char *append = NULL;
char *haveTLS = NULL;
char *tlsFromConfig = NULL;
+ int sourceParsed = 0;
for (; cur; cur = cur->next) {
if (cur->type != XML_ELEMENT_NODE)
continue;
if (virXMLNodeNameEqual(cur, "source")) {
+ /* Parse only the first source element since only one is used
+ * for chardev devices, the only exception is UDP type, where
+ * user can specify two source elements. */
+ if (sourceParsed >= 1 && def->type != VIR_DOMAIN_CHR_TYPE_UDP) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("only one source element is allowed for "
+ "character device"));
+ goto error;
+ } else if (sourceParsed >= 2) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("only two source elements are allowed for "
+ "character device"));
+ goto error;
+ }
+ sourceParsed++;
+
if (!mode)
mode = virXMLPropString(cur, "mode");
if (!haveTLS)
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>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-system-i686</emulator>
+ <controller type='virtio-serial' index='0'/>
+ <channel type='tcp'>
+ <source mode='bind' host='localhost' service='5678'/>
+ <source mode='connect' host='localhost' service='5678'/>
+ <protocol type='raw'/>
+ <target type='virtio' name='test1'/>
+ </channel>
+ <memballoon model='none'/>
+ </devices>
+</domain>
--- /dev/null
+<domain type='qemu'>
+ <name>QEMUGuest1</name>
+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+ <memory unit='KiB'>219136</memory>
+ <currentMemory unit='KiB'>219136</currentMemory>
+ <vcpu placement='static'>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-system-i686</emulator>
+ <controller type='virtio-serial' index='0'/>
+ <channel type='udp'>
+ <source mode='connect' host='localhost' service='5678'/>
+ <source mode='bind' host='localhost' service='4567'/>
+ <source mode='connect' host='localhost' service='3456'/>
+ <target type='virtio' name='test1'/>
+ </channel>
+ <memballoon model='none'/>
+ </devices>
+</domain>
TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
DO_TEST_FULL("chardev-tcp-missing-service", 0, false,
TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
+ DO_TEST_FULL("chardev-tcp-multiple-source", 0, false,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
DO_TEST_DIFFERENT("chardev-udp");
DO_TEST_FULL("chardev-udp-missing-connect-service", 0, false,
TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
+ DO_TEST_FULL("chardev-udp-multiple-source", 0, false,
+ TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);
DO_TEST_DIFFERENT("chardev-unix");
DO_TEST_FULL("chardev-unix-smartcard-missing-path", 0, false,
TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_PARSE);