]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
Added support for non-bridged networking
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 15 Nov 2006 00:38:13 +0000 (00:38 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 15 Nov 2006 00:38:13 +0000 (00:38 +0000)
13 files changed:
ChangeLog
src/xend_internal.c
src/xml.c
tests/sexpr2xmldata/sexpr2xml-net-bridged.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-net-bridged.xml [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-net-routed.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-net-routed.xml [new file with mode: 0644]
tests/sexpr2xmltest.c
tests/xml2sexprdata/xml2sexpr-net-bridged.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-net-bridged.xml [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-net-routed.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-net-routed.xml [new file with mode: 0644]
tests/xml2sexprtest.c

index 255d8f0f4cae275ce776f3c5498af420467eca00..0084b239d9dcb9253666df39839294e689bc2328 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Tue Nov 14 18:42:01 EST 2006 Daniel Berrange <berrange@redhat.com>
+
+       * src/xend_internal.c: Added support for parsing non-bridge style
+       networking configs for guests.
+       * src/xml.c: Ensure the <ip address> element gets serialized to
+       the SEXPR for non-bridged networks.
+       * tests/xml2sexprtest.c, tests/sexpr2xmltest.c: Added new tests
+       covering different networking configs
+       * tests/xml2sexprdata/, tests/sexpr2xmldata/: Added more data
+       files for new test cases
+
 Mon Nov 13 17:18:00 CET 2006 Daniel Veillard <veillard@redhat.com>
 
        * src/xend_internal.c src/xml.c: fix for shareable drive support
index 990d8a0550d8b2dbaaf8b0841d8baafb31d3d61e..5fb24c4f3c192a6996085955b9af3470c8923a8f 100644 (file)
@@ -1700,38 +1700,35 @@ xend_parse_sexp_desc(virConnectPtr conn, struct sexpr *root, int xendConfigVersi
             if (drvType)
                 free(drvType);
         } else if (sexpr_lookup(node, "device/vif")) {
-            const char *tmp2;
-
-            tmp = sexpr_node(node, "device/vif/bridge");
+            char *tmp2;
             tmp2 = sexpr_node(node, "device/vif/script");
-            if ((tmp != NULL) || (strstr(tmp2, "bridge"))) {
+            if (tmp2 && strstr(tmp2, "bridge")) {
                 virBufferVSprintf(&buf, "    <interface type='bridge'>\n");
+                tmp = sexpr_node(node, "device/vif/bridge");
                 if (tmp != NULL)
                     virBufferVSprintf(&buf, "      <source bridge='%s'/>\n",
                                       tmp);
-                tmp = sexpr_node(node, "device/vif/vifname");
-                if (tmp != NULL)
-                    virBufferVSprintf(&buf, "      <target dev='%s'/>\n",
-                                      tmp);
-                tmp = sexpr_node(node, "device/vif/mac");
-                if (tmp != NULL)
-                    virBufferVSprintf(&buf, "      <mac address='%s'/>\n",
-                                      tmp);
-                tmp = sexpr_node(node, "device/vif/ip");
-                if (tmp != NULL)
-                    virBufferVSprintf(&buf, "      <ip address='%s'/>\n",
-                                      tmp);
-                if (tmp2 != NULL)
-                    virBufferVSprintf(&buf, "      <script path='%s'/>\n",
-                                      tmp2);
-                virBufferAdd(&buf, "    </interface>\n", 17);
             } else {
-                char serial[1000];
-
-                TODO sexpr2string(node, serial, 1000);
-                virBufferVSprintf(&buf, "<!-- Failed to parse vif: %s -->\n",
-                                  serial);
+                virBufferVSprintf(&buf, "    <interface type='ethernet'>\n");
             }
+
+            tmp = sexpr_node(node, "device/vif/vifname");
+            if (tmp)
+                virBufferVSprintf(&buf, "      <target dev='%s'/>\n",
+                                  tmp);
+            tmp = sexpr_node(node, "device/vif/mac");
+            if (tmp)
+                virBufferVSprintf(&buf, "      <mac address='%s'/>\n",
+                                  tmp);
+            tmp = sexpr_node(node, "device/vif/ip");
+            if (tmp)
+                virBufferVSprintf(&buf, "      <ip address='%s'/>\n",
+                                  tmp);
+            if (tmp2)
+                virBufferVSprintf(&buf, "      <script path='%s'/>\n",
+                                  tmp2);
+
+            virBufferAdd(&buf, "    </interface>\n", 17);
         }
     }
 
index b1ef663d72c970a788f2e9492df26092d47e7bec..2a7725115b632af9272a423e5a87115d01fb42a3 100644 (file)
--- a/src/xml.c
+++ b/src/xml.c
@@ -1118,6 +1118,7 @@ virDomainParseXMLIfDesc(xmlNodePtr node, virBufferPtr buf, int hvm)
     xmlChar *source = NULL;
     xmlChar *mac = NULL;
     xmlChar *script = NULL;
+    xmlChar *ip = NULL;
     int typ = 0;
 
     type = xmlGetProp(node, BAD_CAST "type");
@@ -1133,7 +1134,6 @@ virDomainParseXMLIfDesc(xmlNodePtr node, virBufferPtr buf, int hvm)
         if (cur->type == XML_ELEMENT_NODE) {
             if ((source == NULL) &&
                 (xmlStrEqual(cur->name, BAD_CAST "source"))) {
-
                 if (typ == 0)
                     source = xmlGetProp(cur, BAD_CAST "bridge");
                 else
@@ -1144,6 +1144,13 @@ virDomainParseXMLIfDesc(xmlNodePtr node, virBufferPtr buf, int hvm)
             } else if ((script == NULL) &&
                        (xmlStrEqual(cur->name, BAD_CAST "script"))) {
                 script = xmlGetProp(cur, BAD_CAST "path");
+            } else if ((ip == NULL) &&
+                       (xmlStrEqual(cur->name, BAD_CAST "ip"))) {
+                /* XXX in future expect to need to have > 1 ip
+                   address element - eg ipv4 & ipv6. For now
+                   xen only supports a single address though
+                   so lets ignore that complication */
+                ip = xmlGetProp(cur, BAD_CAST "address");
             }
         }
         cur = cur->next;
@@ -1160,6 +1167,8 @@ virDomainParseXMLIfDesc(xmlNodePtr node, virBufferPtr buf, int hvm)
     }
     if (script != NULL)
         virBufferVSprintf(buf, "(script '%s')", script);
+    if (ip != NULL)
+        virBufferVSprintf(buf, "(ip '%s')", ip);
     if (hvm)
         virBufferAdd(buf, "(type ioemu)", 12);
 
@@ -1170,6 +1179,8 @@ virDomainParseXMLIfDesc(xmlNodePtr node, virBufferPtr buf, int hvm)
         xmlFree(source);
     if (script != NULL)
         xmlFree(script);
+    if (ip != NULL)
+        xmlFree(ip);
     return (0);
 }
 
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-bridged.sexpr b/tests/sexpr2xmldata/sexpr2xml-net-bridged.sexpr
new file mode 100644 (file)
index 0000000..7670443
--- /dev/null
@@ -0,0 +1,2 @@
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))(device (vif (mac '00:11:22:33:44:55')(bridge 'xenbr2')(script 'vif-bridge'))))
+
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml b/tests/sexpr2xmldata/sexpr2xml-net-bridged.xml
new file mode 100644 (file)
index 0000000..9ff80f4
--- /dev/null
@@ -0,0 +1,27 @@
+<domain type='xen' id='6'>
+  <name>pvtest</name>
+  <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+  <os>
+    <type>linux</type>
+    <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+    <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+    <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
+  </os>
+  <memory>430080</memory>
+  <vcpu>2</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <driver name='file'/>
+      <source file='/root/some.img'/>
+      <target dev='xvda'/>
+    </disk>
+    <interface type='bridge'>
+      <source bridge='xenbr2'/>
+      <mac address='00:11:22:33:44:55'/>
+      <script path='vif-bridge'/>
+    </interface>
+  </devices>
+</domain>
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-routed.sexpr b/tests/sexpr2xmldata/sexpr2xml-net-routed.sexpr
new file mode 100644 (file)
index 0000000..b3c4ceb
--- /dev/null
@@ -0,0 +1,2 @@
+(domain (domid 6)(name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))(device (vif (mac '00:11:22:33:44:55')(dev 'eth3')(script 'vif-routed')(ip '172.14.5.6')))
+
diff --git a/tests/sexpr2xmldata/sexpr2xml-net-routed.xml b/tests/sexpr2xmldata/sexpr2xml-net-routed.xml
new file mode 100644 (file)
index 0000000..a0ede8a
--- /dev/null
@@ -0,0 +1,27 @@
+<domain type='xen' id='6'>
+  <name>pvtest</name>
+  <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+  <os>
+    <type>linux</type>
+    <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+    <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+    <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
+  </os>
+  <memory>430080</memory>
+  <vcpu>2</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <driver name='file'/>
+      <source file='/root/some.img'/>
+      <target dev='xvda'/>
+    </disk>
+    <interface type='ethernet'>
+      <mac address='00:11:22:33:44:55'/>
+      <ip address='172.14.5.6'/>
+      <script path='vif-routed'/>
+    </interface>
+  </devices>
+</domain>
index a7b2b5ca686d06a606b9e03ef3d86b0888a456dc..3c968112c4bd4995dcd223eb2079412a96a1de33 100644 (file)
@@ -97,6 +97,19 @@ static int testCompareResizedMemory(void *data ATTRIBUTE_UNUSED) {
 }
 
 
+static int testCompareNetRouted(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("sexpr2xmldata/sexpr2xml-net-routed.xml",
+                         "sexpr2xmldata/sexpr2xml-net-routed.sexpr",
+                         1);
+}
+
+static int testCompareNetBridged(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("sexpr2xmldata/sexpr2xml-net-bridged.xml",
+                         "sexpr2xmldata/sexpr2xml-net-bridged.sexpr",
+                         1);
+}
+
+
 int
 main(int argc, char **argv)
 {
@@ -145,5 +158,13 @@ main(int argc, char **argv)
                    1, testCompareResizedMemory, NULL) != 0)
        ret = -1;
 
+    if (virtTestRun("SEXPR-2-XML net routed",
+                   1, testCompareNetRouted, NULL) != 0)
+       ret = -1;
+
+    if (virtTestRun("SEXPR-2-XML net bridged",
+                   1, testCompareNetBridged, NULL) != 0)
+       ret = -1;
+
     exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/tests/xml2sexprdata/xml2sexpr-net-bridged.sexpr b/tests/xml2sexprdata/xml2sexpr-net-bridged.sexpr
new file mode 100644 (file)
index 0000000..93b1de3
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))(device (vif (mac '00:11:22:33:44:55')(bridge 'xenbr2')(script 'vif-bridge'))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-net-bridged.xml b/tests/xml2sexprdata/xml2sexpr-net-bridged.xml
new file mode 100644 (file)
index 0000000..7c5115c
--- /dev/null
@@ -0,0 +1,29 @@
+<domain type='xen' id='15'>
+  <name>pvtest</name>
+  <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+  <os>
+    <type>linux</type>
+    <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+    <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+    <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
+  </os>
+  <memory>430080</memory>
+  <vcpu>2</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <source file='/root/some.img'/>
+      <target dev='xvda'/>
+    </disk>
+    <interface type="bridge">
+      <mac address="00:11:22:33:44:55"/>
+      <source bridge="xenbr2"/>
+      <script path="vif-bridge"/>
+      <target dev="vif4.0"/>
+    </interface>
+    <console tty='/dev/pts/4'/>
+  </devices>
+</domain>
+
diff --git a/tests/xml2sexprdata/xml2sexpr-net-routed.sexpr b/tests/xml2sexprdata/xml2sexpr-net-routed.sexpr
new file mode 100644 (file)
index 0000000..c8b5f9f
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d2171f48fb2e068e2386a5c413e')(on_poweroff 'destroy')(on_reboot 'destroy')(on_crash 'destroy')(image (linux (kernel '/var/lib/xen/vmlinuz.2Dn2YT')(ramdisk '/var/lib/xen/initrd.img.0u-Vhq')(args ' method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  ')))(device (vbd (dev 'xvda')(uname 'file:/root/some.img')(mode 'w')))(device (vif (mac '00:11:22:33:44:55')(dev 'eth3')(script 'vif-routed')(ip '172.14.5.6'))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-net-routed.xml b/tests/xml2sexprdata/xml2sexpr-net-routed.xml
new file mode 100644 (file)
index 0000000..aae2080
--- /dev/null
@@ -0,0 +1,30 @@
+<domain type='xen' id='15'>
+  <name>pvtest</name>
+  <uuid>596a5d2171f48fb2e068e2386a5c413e</uuid>
+  <os>
+    <type>linux</type>
+    <kernel>/var/lib/xen/vmlinuz.2Dn2YT</kernel>
+    <initrd>/var/lib/xen/initrd.img.0u-Vhq</initrd>
+    <cmdline> method=http://download.fedora.devel.redhat.com/pub/fedora/linux/core/test/5.91/x86_64/os  </cmdline>
+  </os>
+  <memory>430080</memory>
+  <vcpu>2</vcpu>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>destroy</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <disk type='file' device='disk'>
+      <source file='/root/some.img'/>
+      <target dev='xvda'/>
+    </disk>
+    <interface type="ethernet">
+      <mac address="00:11:22:33:44:55"/>
+      <ip address="172.14.5.6"/>
+      <source dev="eth3"/>
+      <script path="vif-routed"/>
+      <target dev="vif4.0"/>
+    </interface>
+    <console tty='/dev/pts/4'/>
+  </devices>
+</domain>
+
index 9ca42b973c6d40ac58c3385d2eee52a5a7c28cd8..a1c09e403c1f619a8973a263d7cd23604a3fa16e 100644 (file)
@@ -138,6 +138,21 @@ static int testCompareMemoryResize(void *data ATTRIBUTE_UNUSED) {
                          2);
 }
 
+static int testCompareNetRouted(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("xml2sexprdata/xml2sexpr-net-routed.xml",
+                         "xml2sexprdata/xml2sexpr-net-routed.sexpr",
+                         "pvtest",
+                         2);
+}
+
+static int testCompareNetBridged(void *data ATTRIBUTE_UNUSED) {
+  return testCompareFiles("xml2sexprdata/xml2sexpr-net-bridged.xml",
+                         "xml2sexprdata/xml2sexpr-net-bridged.sexpr",
+                         "pvtest",
+                         2);
+}
+
+
 int
 main(int argc, char **argv)
 {
@@ -202,6 +217,13 @@ main(int argc, char **argv)
                    1, testCompareMemoryResize, NULL) != 0)
        ret = -1;
 
+    if (virtTestRun("XML-2-SEXPR Net Routed",
+                   1, testCompareNetRouted, NULL) != 0)
+       ret = -1;
+
+    if (virtTestRun("XML-2-SEXPR Net Bridged",
+                   1, testCompareNetBridged, NULL) != 0)
+       ret = -1;
 
     exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }