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@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- Libvir-list mailing list Libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list