[libvirt] PATCH: 3/5: The easy Xen and QEMU implementations

Daniel Veillard veillard at redhat.com
Wed May 13 15:59:38 UTC 2009


On Wed, May 13, 2009 at 03:38:57PM +0100, Daniel P. Berrange wrote:
> This patches provides an implenmentation of the new APIs for Xen which
> can convert to/from both XM config format (/etc/xen files), and the
> SEXPR format used by XenD.  The former is most useful to end users, but
> it was easy to add the latter too, so I did. It can be a useful debugging
> aid sometimes. For QEMU, it implemnets export of  domain XML into the
> QEMU argv format.
> 
>  qemu_conf.c   |   25 +++++-------
>  qemu_conf.h   |    3 +
>  qemu_driver.c |  119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  xen_unified.c |   95 +++++++++++++++++++++++++++++++++++++++++++++-
>  xen_unified.h |    3 +
>  5 files changed, 228 insertions(+), 17 deletions(-)
> 
> 
> Daniel
> 
> diff -r f55fa9b69d85 src/qemu_conf.c
> --- a/src/qemu_conf.c	Wed May 13 13:13:18 2009 +0100
> +++ b/src/qemu_conf.c	Wed May 13 13:16:50 2009 +0100
> @@ -1248,21 +1248,18 @@ int qemudBuildCommandLine(virConnectPtr 
>  
>              case VIR_DOMAIN_NET_TYPE_ETHERNET:
>                  {
> -                    char arg[PATH_MAX];
> -                    if (net->ifname) {
> -                        if (snprintf(arg, PATH_MAX-1, "tap,ifname=%s,script=%s,vlan=%d",
> -                                     net->ifname,
> -                                     net->data.ethernet.script,
> -                                     vlan) >= (PATH_MAX-1))
> -                            goto error;
> -                    } else {
> -                        if (snprintf(arg, PATH_MAX-1, "tap,script=%s,vlan=%d",
> -                                     net->data.ethernet.script,
> -                                     vlan) >= (PATH_MAX-1))
> -                            goto error;
> -                    }
> +                    virBuffer buf = VIR_BUFFER_INITIALIZER;
>  
> -                    ADD_ARG_LIT(arg);
> +                    virBufferAddLit(&buf, "tap");
> +                    if (net->ifname)
> +                        virBufferVSprintf(&buf, ",ifname=%s", net->ifname);
> +                    if (net->data.ethernet.script)
> +                        virBufferVSprintf(&buf, ",script=%s", net->data.ethernet.script);
> +                    virBufferVSprintf(&buf, ",vlan=%d", vlan);
> +                    if (virBufferError(&buf))
> +                        goto error;
> +
> +                    ADD_ARG(virBufferContentAndReset(&buf));
>                  }
>                  break;

  Hum, that part looks a bit orthogonal to the patch itself, isn't it ?

[...]
> +    /* Since we're just exporting args, we can't do bridge/network
> +     * setups, since libvirt will normally create TAP devices
> +     * directly. We convert those configs into generic 'ethernet'
> +     * config and assume the user has suitable 'ifup-qemu' scripts
> +     */
> +    for (i = 0 ; i < def->nnets ; i++) {
> +        virDomainNetDefPtr net = def->nets[i];
> +        if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
> +            VIR_FREE(net->data.network.name);
> +            net->type = VIR_DOMAIN_NET_TYPE_ETHERNET;
> +            net->data.ethernet.dev = NULL;
> +            net->data.ethernet.script = NULL;
> +            net->data.ethernet.ipaddr = NULL;
> +        } else if (net->type == VIR_DOMAIN_NET_TYPE_BRIDGE) {
> +            net->type = VIR_DOMAIN_NET_TYPE_ETHERNET;
> +            /* Rely on fact that the 'ethernet' and 'bridge'
> +             * union structs have members in same place */

   Hum, it's a bit fishy... why not play safe, shaving a couple
   microseconds here is probably not worth it.

[...]
> +cleanup:
> +    for (tmp = retargv ; tmp && *tmp ; tmp++)

  weird, we use a static string just for "" ?

> +        VIR_FREE(*tmp);
> +    VIR_FREE(retargv);
> +
> +    for (tmp = retenv ; tmp && *tmp ; tmp++)

  same

> +        VIR_FREE(*tmp);
> +    VIR_FREE(retenv);

[...]
> --- a/src/xen_unified.h	Wed May 13 13:13:18 2009 +0100
> +++ b/src/xen_unified.h	Wed May 13 13:16:50 2009 +0100
> @@ -46,6 +46,9 @@ extern int xenRegister (void);
>  
>  #define MIN_XEN_GUEST_SIZE 64  /* 64 megabytes */
>  
> +#define XEN_CONFIG_FORMAT_XM    "xen-xm"
> +#define XEN_CONFIG_FORMAT_SEXPR "xen-sxpr"

  Actually, shouldn't those be part of the public headers instead
I'm afraid I'm missing something here ...

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list