[libvirt] [PATCH] network: fix network driver startup for qemu:///session
Daniel P. Berrange
berrange at redhat.com
Thu May 2 19:23:24 UTC 2013
On Thu, May 02, 2013 at 02:06:16PM -0400, Laine Stump wrote:
>
> -#define NETWORK_PID_DIR LOCALSTATEDIR "/run/libvirt/network"
> -#define NETWORK_STATE_DIR LOCALSTATEDIR "/lib/libvirt/network"
> +#define NETWORK_PID_DIR "/run/libvirt/network"
> +#define NETWORK_STATE_DIR "/lib/libvirt/network"
>
> -#define DNSMASQ_STATE_DIR LOCALSTATEDIR "/lib/libvirt/dnsmasq"
> -#define RADVD_STATE_DIR LOCALSTATEDIR "/lib/libvirt/radvd"
> +#define DNSMASQ_STATE_DIR "/lib/libvirt/dnsmasq"
> +#define RADVD_STATE_DIR "/lib/libvirt/radvd"
This kind of approach doesn't really work I'm afraid.
The '/lib' and '/run' prefixes are only relevant for
the privileged daemon.
> if (privileged) {
> - if (virAsprintf(&driverState->logDir,
> - "%s/log/libvirt/qemu", LOCALSTATEDIR) == -1)
> - goto out_of_memory;
> -
> - if ((base = strdup(SYSCONFDIR "/libvirt")) == NULL)
> + if (((base = strdup(SYSCONFDIR "/libvirt")) == NULL) ||
> + ((driverState->logDir
> + = strdup(LOCALSTATEDIR "/log/libvirt/qemu")) == NULL) ||
> + ((driverState->stateDir
> + = strdup(LOCALSTATEDIR NETWORK_STATE_DIR)) == NULL) ||
> + ((driverState->pidDir
> + = strdup(LOCALSTATEDIR NETWORK_PID_DIR)) == NULL) ||
> + ((driverState->dnsmasqStateDir
> + = strdup(LOCALSTATEDIR DNSMASQ_STATE_DIR)) == NULL) ||
> + ((driverState->radvdStateDir
> + = strdup(LOCALSTATEDIR RADVD_STATE_DIR)) == NULL)) {
> goto out_of_memory;
> + }
> } else {
> char *userdir = virGetUserCacheDirectory();
>
> if (!userdir)
> goto error;
>
> + userdir = virGetUserConfigDirectory();
> + if (virAsprintf(&base, "%s", userdir) < 0) {
> + VIR_FREE(userdir);
> + goto out_of_memory;
> + }
> + VIR_FREE(userdir);
> +
> if (virAsprintf(&driverState->logDir,
> - "%s/qemu/log", userdir) == -1) {
> + "%s/qemu/log", userdir) < 0) {
> VIR_FREE(userdir);
> goto out_of_memory;
> }
> VIR_FREE(userdir);
>
> - userdir = virGetUserConfigDirectory();
> - if (virAsprintf(&base, "%s", userdir) == -1) {
> + if (!(userdir = virGetUserRuntimeDirectory()))
> + goto error;
> +
> + if (virAsprintf(&driverState->stateDir,
> + "%s" NETWORK_STATE_DIR, userdir) < 0) {
> + VIR_FREE(userdir);
> + goto out_of_memory;
> + }
> + if (virAsprintf(&driverState->pidDir,
> + "%s" NETWORK_PID_DIR, userdir) < 0) {
> + VIR_FREE(userdir);
> + goto out_of_memory;
> + }
> + if (virAsprintf(&driverState->dnsmasqStateDir,
> + "%s" DNSMASQ_STATE_DIR, userdir) < 0) {
> + VIR_FREE(userdir);
> + goto out_of_memory;
> + }
> + if (virAsprintf(&driverState->radvdStateDir,
> + "%s" RADVD_STATE_DIR, userdir) < 0) {
> VIR_FREE(userdir);
> goto out_of_memory;
> }
These cause the state dirs to become
$XDG_RUNTIME_DIR/lib/libvirt/network
$XDG_RUNTIME_DIR/run/libvirt/network
$XDG_RUNTIME_DIR/lib/libvirt/dnsmasq
$XDG_RUNTIME_DIR/lib/libvirt/radvd
when in fact we want them to be
$XDG_RUNTIME_DIR/libvirt/network/lib
$XDG_RUNTIME_DIR/libvirt/network/run
$XDG_RUNTIME_DIR/libvirt/dnsmasq/lib
$XDG_RUNTIME_DIR/libvirt/radvd/lib
Take a look at how QEMU sets this up in virQEMUDriverConfigNew
Daniel
--
|: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org -o- http://virt-manager.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
More information about the libvir-list
mailing list