[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