]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
parse IP address for bridge interfaces
authorJohn Levon <john.levon@sun.com>
Fri, 23 Jan 2009 01:48:47 +0000 (01:48 +0000)
committerJohn Levon <john.levon@sun.com>
Fri, 23 Jan 2009 01:48:47 +0000 (01:48 +0000)
ChangeLog
src/domain_conf.c
src/domain_conf.h
src/xend_internal.c
src/xm_internal.c
tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.sexpr [new file with mode: 0644]
tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.xml [new file with mode: 0644]
tests/sexpr2xmltest.c
tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.sexpr [new file with mode: 0644]
tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.xml [new file with mode: 0644]
tests/xml2sexprtest.c

index 25e8d05cec4901db9c07ba7d0421eab8f2295f62..64d9196c16d1f8600cf1757db9f4d51e46a1e85d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+Thu Jan 22 17:42:37 PST 2009 John Levon <john.levon@sun.com>
+
+       * src/domain_conf.c, src/domain_conf.h, src/xend_internal.c,
+       src/xm_internal.c: parse IP address for bridge interfaces
+
+       * tests/sexpr2xmltest.c, tests/xml2sexprtest.c,
+       tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.sexpr,
+       tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.xml,
+       tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.sexpr,
+       tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.xml: add tests
+
 Thu Jan 21 19:44:12 GMT 2009 Daniel P. Berrange <berrange@redhat.com>
 
        Use the GNULIB random_r function
index feb77cac92b727599e8b72abe9df528856a0d5f8..30336d490f79a0391032c464184fd7f6f3987fdd 100644 (file)
@@ -289,6 +289,7 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
     case VIR_DOMAIN_NET_TYPE_BRIDGE:
         VIR_FREE(def->data.bridge.brname);
         VIR_FREE(def->data.bridge.script);
+        VIR_FREE(def->data.bridge.ipaddr);
         break;
     }
 
@@ -887,7 +888,8 @@ virDomainNetDefParseXML(virConnectPtr conn,
                 address = virXMLPropString(cur, "address");
                 port = virXMLPropString(cur, "port");
             } else if ((address == NULL) &&
-                       (def->type == VIR_DOMAIN_NET_TYPE_ETHERNET) &&
+                       (def->type == VIR_DOMAIN_NET_TYPE_ETHERNET ||
+                        def->type == VIR_DOMAIN_NET_TYPE_BRIDGE) &&
                        (xmlStrEqual(cur->name, BAD_CAST "ip"))) {
                 address = virXMLPropString(cur, "address");
             } else if ((ifname == NULL) &&
@@ -954,6 +956,10 @@ virDomainNetDefParseXML(virConnectPtr conn,
             def->data.bridge.script = script;
             script = NULL;
         }
+        if (address != NULL) {
+            def->data.bridge.ipaddr = address;
+            address = NULL;
+        }
         break;
 
     case VIR_DOMAIN_NET_TYPE_CLIENT:
@@ -2889,6 +2895,9 @@ virDomainNetDefFormat(virConnectPtr conn,
     case VIR_DOMAIN_NET_TYPE_BRIDGE:
         virBufferEscapeString(buf, "      <source bridge='%s'/>\n",
                               def->data.bridge.brname);
+        if (def->data.bridge.ipaddr)
+            virBufferVSprintf(buf, "      <ip address='%s'/>\n",
+                              def->data.bridge.ipaddr);
         if (def->data.bridge.script)
             virBufferEscapeString(buf, "      <script path='%s'/>\n",
                                   def->data.bridge.script);
index e37a2d246e602651f5fb384e104fcfde706dd460..cd2f4800bc2558b5816f46ec24c59b31d623c0ef 100644 (file)
@@ -155,6 +155,7 @@ struct _virDomainNetDef {
         struct {
             char *brname;
             char *script;
+            char *ipaddr;
         } bridge;
     } data;
     char *ifname;
index 321dfdf14a60b7811e1b0855fd113a04e3a39118..3bd70ad9849ba8c2fd94e3dca587faafb39ee44b 100644 (file)
@@ -1763,11 +1763,19 @@ xenDaemonParseSxprNets(virConnectPtr conn,
                     net->type == VIR_DOMAIN_NET_TYPE_BRIDGE &&
                     !(net->data.bridge.script = strdup(tmp2)))
                     goto no_memory;
+                tmp = sexpr_node(node, "device/vif/ip");
+                if (tmp &&
+                    !(net->data.bridge.ipaddr = strdup(tmp)))
+                    goto no_memory;
             } else {
                 net->type = VIR_DOMAIN_NET_TYPE_ETHERNET;
                 if (tmp2 &&
                     !(net->data.ethernet.script = strdup(tmp2)))
                     goto no_memory;
+                tmp = sexpr_node(node, "device/vif/ip");
+                if (tmp &&
+                    !(net->data.ethernet.ipaddr = strdup(tmp)))
+                    goto no_memory;
             }
 
             tmp = sexpr_node(node, "device/vif/vifname");
@@ -1801,11 +1809,6 @@ xenDaemonParseSxprNets(virConnectPtr conn,
                 net->mac[5] = mac[5];
             }
 
-            tmp = sexpr_node(node, "device/vif/ip");
-            if (tmp &&
-                !(net->data.ethernet.ipaddr = strdup(tmp)))
-                goto no_memory;
-
             if (model &&
                 !(net->model = strdup(model)))
                 goto no_memory;
@@ -5135,6 +5138,8 @@ xenDaemonFormatSxprNet(virConnectPtr conn,
             script = def->data.bridge.script;
 
         virBufferVSprintf(buf, "(script '%s')", script);
+        if (def->data.bridge.ipaddr != NULL)
+            virBufferVSprintf(buf, "(ip '%s')", def->data.bridge.ipaddr);
         break;
 
     case VIR_DOMAIN_NET_TYPE_NETWORK:
index b420e8083fe58046905cb67e3f821559969e7ecf..a03263c40f14aac0013ca98c113bf2fdda3d7477 100644 (file)
@@ -1089,6 +1089,9 @@ xenXMDomainConfigParse(virConnectPtr conn, virConfPtr conf) {
                 if (script[0] &&
                     !(net->data.bridge.script = strdup(script)))
                     goto no_memory;
+                if (ip[0] &&
+                    !(net->data.bridge.ipaddr = strdup(ip)))
+                    goto no_memory;
             } else {
                 if (script[0] &&
                     !(net->data.ethernet.script = strdup(script)))
@@ -1883,6 +1886,8 @@ static int xenXMDomainConfigFormatNet(virConnectPtr conn,
     switch (net->type) {
     case VIR_DOMAIN_NET_TYPE_BRIDGE:
         virBufferVSprintf(&buf, ",bridge=%s", net->data.bridge.brname);
+        if (net->data.bridge.ipaddr)
+            virBufferVSprintf(&buf, ",ip=%s", net->data.bridge.ipaddr);
         break;
 
     case VIR_DOMAIN_NET_TYPE_ETHERNET:
diff --git a/tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.sexpr b/tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.sexpr
new file mode 100644 (file)
index 0000000..b001d3b
--- /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')(ip '192.0.2.1')))
+
diff --git a/tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.xml b/tests/sexpr2xmldata/sexpr2xml-bridge-ipaddr.xml
new file mode 100644 (file)
index 0000000..14dc37c
--- /dev/null
@@ -0,0 +1,34 @@
+<domain type='xen' id='6'>
+  <name>pvtest</name>
+  <uuid>596a5d21-71f4-8fb2-e068-e2386a5c413e</uuid>
+  <memory>430080</memory>
+  <currentMemory>430080</currentMemory>
+  <vcpu>2</vcpu>
+  <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>
+  <clock offset='utc'/>
+  <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' bus='xen'/>
+    </disk>
+    <interface type='bridge'>
+      <mac address='00:11:22:33:44:55'/>
+      <source bridge='xenbr2'/>
+      <ip address='192.0.2.1'/>
+      <script path='vif-bridge'/>
+      <target dev='vif6.0'/>
+    </interface>
+    <console type='pty'>
+      <target port='0'/>
+    </console>
+  </devices>
+</domain>
index 21ae0ec99fd6d5810e5fcbe6bcd2b4fcfd00450e..9033d2015a3c7f20d34d8a63bbacbe1c3b505a27 100644 (file)
@@ -139,6 +139,7 @@ mymain(int argc, char **argv)
     DO_TEST("net-routed", "net-routed", 2);
     DO_TEST("net-bridged", "net-bridged", 2);
     DO_TEST("net-e1000", "net-e1000", 2);
+    DO_TEST("bridge-ipaddr", "bridge-ipaddr", 3);
     DO_TEST("no-source-cdrom", "no-source-cdrom", 2);
 
     DO_TEST("fv-utc", "fv-utc", 1);
diff --git a/tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.sexpr b/tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.sexpr
new file mode 100644 (file)
index 0000000..898fe2d
--- /dev/null
@@ -0,0 +1 @@
+(vm (name 'pvtest')(memory 420)(maxmem 420)(vcpus 2)(uuid '596a5d21-71f4-8fb2-e068-e2386a5c413e')(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')(ip '192.0.2.1'))))
\ No newline at end of file
diff --git a/tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.xml b/tests/xml2sexprdata/xml2sexpr-bridge-ipaddr.xml
new file mode 100644 (file)
index 0000000..587cc6a
--- /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="bridge">
+      <mac address="00:11:22:33:44:55"/>
+      <source bridge="xenbr2"/>
+      <ip address="192.0.2.1"/>
+      <script path="vif-bridge"/>
+      <target dev="vif4.0"/>
+    </interface>
+    <console tty='/dev/pts/4'/>
+  </devices>
+</domain>
+
index b06c3ace811ab2d002aeedbf99f0587ad618a1c8..20528fe9e389655f85b3d0c677a8c9b945ad7c76 100644 (file)
@@ -126,6 +126,7 @@ mymain(int argc, char **argv)
     DO_TEST("net-routed", "net-routed", "pvtest", 2);
     DO_TEST("net-bridged", "net-bridged", "pvtest", 2);
     DO_TEST("net-e1000", "net-e1000", "pvtest", 2);
+    DO_TEST("bridge-ipaddr", "bridge-ipaddr", "pvtest", 2);
     DO_TEST("no-source-cdrom", "no-source-cdrom", "test", 2);
 
     DO_TEST("fv-utc", "fv-utc", "fvtest", 1);