On 04/14/2011 12:05 PM, Michal Novotny wrote: > Make: passed > Make check: passed > Make syntax-check: passed > > Hi, > this is the commit to introduce the function to create new character > device definition for the domain as advised by Cole Robinson > <crobinso@xxxxxxxxxx>. > > The function is used on the relevant places and also new tests has > been added. > > Michal > ACK, looks good now. Thanks, Cole > Signed-off-by: Michal Novotny <minovotn@xxxxxxxxxx> > --- > src/conf/domain_conf.c | 20 +++++++++-- > src/conf/domain_conf.h | 2 + > src/libvirt_private.syms | 1 + > src/qemu/qemu_command.c | 5 ++- > src/xenxs/xen_sxpr.c | 7 ++-- > src/xenxs/xen_xm.c | 8 +++- > .../qemuxml2argv-serial-target-port-auto.xml | 31 ++++++++++++++++ > .../qemuxml2xmlout-serial-target-port-auto.xml | 37 ++++++++++++++++++++ > tests/qemuxml2xmltest.c | 1 + > 9 files changed, 102 insertions(+), 10 deletions(-) > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 90a1317..a80719c 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -3212,6 +3212,22 @@ error: > goto cleanup; > } > > +/* Create a new character device definition and set > + * default port. > + */ > +virDomainChrDefPtr > +virDomainChrDefNew(void) { > + virDomainChrDefPtr def = NULL; > + > + if (VIR_ALLOC(def) < 0) { > + virReportOOMError(); > + return NULL; > + } > + > + def->target.port = -1; > + return def; > +} > + > /* Parse the XML definition for a character device > * @param node XML nodeset to parse for net definition > * > @@ -3260,10 +3276,8 @@ virDomainChrDefParseXML(virCapsPtr caps, > virDomainChrDefPtr def; > int remaining; > > - if (VIR_ALLOC(def) < 0) { > - virReportOOMError(); > + if (!(def = virDomainChrDefNew())) > return NULL; > - } > > type = virXMLPropString(node, "type"); > if (type == NULL) { > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 95bd11e..ecf44ca 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -1229,6 +1229,8 @@ void virDomainObjRef(virDomainObjPtr vm); > /* Returns 1 if the object was freed, 0 if more refs exist */ > int virDomainObjUnref(virDomainObjPtr vm) ATTRIBUTE_RETURN_CHECK; > > +virDomainChrDefPtr virDomainChrDefNew(void); > + > /* live == true means def describes an active domain (being migrated or > * restored) as opposed to a new persistent configuration of the domain */ > virDomainObjPtr virDomainAssignDef(virCapsPtr caps, > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index 54e4482..4175ca0 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -201,6 +201,7 @@ virDomainChrConsoleTargetTypeFromString; > virDomainChrConsoleTargetTypeToString; > virDomainChrDefForeach; > virDomainChrDefFree; > +virDomainChrDefNew; > virDomainChrSourceDefFree; > virDomainChrSpicevmcTypeFromString; > virDomainChrSpicevmcTypeToString; > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index fea0068..029ed7d 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -36,6 +36,7 @@ > #include "c-ctype.h" > #include "domain_nwfilter.h" > #include "qemu_audit.h" > +#include "domain_conf.h" > > #include <sys/utsname.h> > #include <sys/stat.h> > @@ -5315,8 +5316,8 @@ qemuParseCommandLineChr(const char *val) > { > virDomainChrDefPtr def; > > - if (VIR_ALLOC(def) < 0) > - goto no_memory; > + if (!(def = virDomainChrDefNew())) > + goto error; > > if (STREQ(val, "null")) { > def->source.type = VIR_DOMAIN_CHR_TYPE_NULL; > diff --git a/src/xenxs/xen_sxpr.c b/src/xenxs/xen_sxpr.c > index 3a412a6..b590517 100644 > --- a/src/xenxs/xen_sxpr.c > +++ b/src/xenxs/xen_sxpr.c > @@ -168,10 +168,8 @@ xenParseSxprChar(const char *value, > char *tmp; > virDomainChrDefPtr def; > > - if (VIR_ALLOC(def) < 0) { > - virReportOOMError(); > + if (!(def = virDomainChrDefNew())) > return NULL; > - } > > prefix = value; > > @@ -1328,6 +1326,7 @@ xenParseSxpr(const struct sexpr *root, > goto no_memory; > } > chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; > + chr->target.port = 0; > def->serials[def->nserials++] = chr; > } > } > @@ -1343,6 +1342,7 @@ xenParseSxpr(const struct sexpr *root, > goto no_memory; > } > chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL; > + chr->target.port = 0; > def->parallels[def->nparallels++] = chr; > } > } else { > @@ -1350,6 +1350,7 @@ xenParseSxpr(const struct sexpr *root, > if (!(def->console = xenParseSxprChar("pty", tty))) > goto error; > def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; > + def->console->target.port = 0; > def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; > } > VIR_FREE(tty); > diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c > index 22ad788..89f75a5 100644 > --- a/src/xenxs/xen_xm.c > +++ b/src/xenxs/xen_xm.c > @@ -36,6 +36,7 @@ > #include "xenxs_private.h" > #include "xen_xm.h" > #include "xen_sxpr.h" > +#include "domain_conf.h" > > /* Convenience method to grab a int from the config file object */ > static int xenXMConfigGetBool(virConfPtr conf, > @@ -957,6 +958,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, > goto no_memory; > } > chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_PARALLEL; > + chr->target.port = 0; > def->parallels[0] = chr; > def->nparallels++; > chr = NULL; > @@ -981,8 +983,8 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, > continue; > } > > - if (VIR_ALLOC(chr) < 0) > - goto no_memory; > + if (!(chr = virDomainChrDefNew())) > + goto cleanup; > if (!(chr = xenParseSxprChar(port, NULL))) > goto cleanup; > > @@ -1010,6 +1012,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, > goto no_memory; > } > chr->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL; > + chr->target.port = 0; > def->serials[0] = chr; > def->nserials++; > } > @@ -1018,6 +1021,7 @@ xenParseXM(virConfPtr conf, int xendConfigVersion, > if (!(def->console = xenParseSxprChar("pty", NULL))) > goto cleanup; > def->console->deviceType = VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE; > + def->console->target.port = 0; > def->console->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_XEN; > } > > diff --git a/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml b/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml > new file mode 100644 > index 0000000..0f98f51 > --- /dev/null > +++ b/tests/qemuxml2argvdata/qemuxml2argv-serial-target-port-auto.xml > @@ -0,0 +1,31 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory>219100</memory> > + <currentMemory>219100</currentMemory> > + <vcpu>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <disk type='block' device='disk'> > + <source dev='/dev/HostVG/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <serial type='pty'/> > + <serial type='null'/> > + <serial type='stdio'/> > + <console type='pty'> > + <target port='0'/> > + </console> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml > new file mode 100644 > index 0000000..878418a > --- /dev/null > +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-serial-target-port-auto.xml > @@ -0,0 +1,37 @@ > +<domain type='qemu'> > + <name>QEMUGuest1</name> > + <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > + <memory>219100</memory> > + <currentMemory>219100</currentMemory> > + <vcpu>1</vcpu> > + <os> > + <type arch='i686' machine='pc'>hvm</type> > + <boot dev='hd'/> > + </os> > + <clock offset='utc'/> > + <on_poweroff>destroy</on_poweroff> > + <on_reboot>restart</on_reboot> > + <on_crash>destroy</on_crash> > + <devices> > + <emulator>/usr/bin/qemu</emulator> > + <disk type='block' device='disk'> > + <source dev='/dev/HostVG/QEMUGuest1'/> > + <target dev='hda' bus='ide'/> > + <address type='drive' controller='0' bus='0' unit='0'/> > + </disk> > + <controller type='ide' index='0'/> > + <serial type='pty'> > + <target port='0'/> > + </serial> > + <serial type='null'> > + <target port='1'/> > + </serial> > + <serial type='stdio'> > + <target port='2'/> > + </serial> > + <console type='pty'> > + <target type='serial' port='0'/> > + </console> > + <memballoon model='virtio'/> > + </devices> > +</domain> > diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c > index b86dbee..27330a9 100644 > --- a/tests/qemuxml2xmltest.c > +++ b/tests/qemuxml2xmltest.c > @@ -195,6 +195,7 @@ mymain(int argc, char **argv) > DO_TEST_DIFFERENT("console-compat-auto"); > DO_TEST_DIFFERENT("disk-scsi-device-auto"); > DO_TEST_DIFFERENT("console-virtio"); > + DO_TEST_DIFFERENT("serial-target-port-auto"); > > virCapabilitiesFree(driver.caps); > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list