[Libvir] PATCH: Fix bridge device handling with xm config files

Daniel P. Berrange berrange at redhat.com
Thu Jun 7 14:55:45 UTC 2007


The code for parsing xm config files & generating XML forgot to add in the
<source bridge='xenbr0'> elements if an explicit bridge is requested. The
reverse direction was already implemeneted. This patch fixes the missing
handling of bridge devices & adds a test case

Dan
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 
-------------- next part --------------
? foo
? docs/APIchunk5.html
? docs/APIchunk6.html
? docs/apibuild.pyc
? docs/examples/.deps
? docs/examples/.libs
? tests/foo
Index: src/xm_internal.c
===================================================================
RCS file: /data/cvs/libvirt/src/xm_internal.c,v
retrieving revision 1.28
diff -u -p -r1.28 xm_internal.c
--- src/xm_internal.c	7 Jun 2007 14:08:35 -0000	1.28
+++ src/xm_internal.c	7 Jun 2007 14:53:06 -0000
@@ -824,8 +824,10 @@ char *xenXMDomainFormatXML(virConnectPtr
             char script[PATH_MAX];
             char ip[16];
             char mac[18];
+            char bridge[50];
             char *key;
 
+            bridge[0] = '\0';
             mac[0] = '\0';
             script[0] = '\0';
             ip[0] = '\0';
@@ -849,7 +851,12 @@ char *xenXMDomainFormatXML(virConnectPtr
                     strncpy(mac, data, len);
                     mac[len] = '\0';
                 } else if (!strncmp(key, "bridge=", 7)) {
+                    int len = nextkey ? (nextkey - data) : sizeof(bridge)-1;
                     type = 1;
+                    if (len > (sizeof(bridge)-1))
+                        len = sizeof(bridge)-1;
+                    strncpy(bridge, data, len);
+                    bridge[len] = '\0';
                 } else if (!strncmp(key, "script=", 7)) {
                     int len = nextkey ? (nextkey - data) : PATH_MAX-1;
                     if (len > (PATH_MAX-1))
@@ -879,6 +886,8 @@ char *xenXMDomainFormatXML(virConnectPtr
             virBufferAdd(buf, "    <interface type='bridge'>\n", -1);
             if (mac[0])
                 virBufferVSprintf(buf, "      <mac address='%s'/>\n", mac);
+            if (type == 1 && bridge[0])
+                virBufferVSprintf(buf, "      <source bridge='%s'/>\n", bridge);
             if (script[0])
                 virBufferVSprintf(buf, "      <script path='%s'/>\n", script);
             if (ip[0])
Index: tests/xmconfigdata/test-fullvirt-new-cdrom.cfg
===================================================================
RCS file: /data/cvs/libvirt/tests/xmconfigdata/test-fullvirt-new-cdrom.cfg,v
retrieving revision 1.1
diff -u -p -r1.1 test-fullvirt-new-cdrom.cfg
--- tests/xmconfigdata/test-fullvirt-new-cdrom.cfg	19 Jan 2007 20:30:05 -0000	1.1
+++ tests/xmconfigdata/test-fullvirt-new-cdrom.cfg	7 Jun 2007 14:53:06 -0000
@@ -19,4 +19,4 @@ vncunused = 1
 vnclisten = "127.0.0.1"
 vncpasswd = "123poi"
 disk = [ "phy:/dev/HostVG/XenGuest2,hda,w", "file:/root/boot.iso,hdc:cdrom,r" ]
-vif = [ "mac=00:16:3E:66:92:9C,type=ioemu" ]
+vif = [ "mac=00:16:3E:66:92:9C,bridge=xenbr1,type=ioemu" ]
Index: tests/xmconfigdata/test-fullvirt-new-cdrom.xml
===================================================================
RCS file: /data/cvs/libvirt/tests/xmconfigdata/test-fullvirt-new-cdrom.xml,v
retrieving revision 1.2
diff -u -p -r1.2 test-fullvirt-new-cdrom.xml
--- tests/xmconfigdata/test-fullvirt-new-cdrom.xml	7 Jun 2007 14:08:35 -0000	1.2
+++ tests/xmconfigdata/test-fullvirt-new-cdrom.xml	7 Jun 2007 14:53:06 -0000
@@ -32,6 +32,7 @@
     </disk>
     <interface type='bridge'>
       <mac address='00:16:3E:66:92:9C'/>
+      <source bridge='xenbr1'/>
     </interface>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>
Index: tests/xmconfigdata/test-fullvirt-old-cdrom.cfg
===================================================================
RCS file: /data/cvs/libvirt/tests/xmconfigdata/test-fullvirt-old-cdrom.cfg,v
retrieving revision 1.1
diff -u -p -r1.1 test-fullvirt-old-cdrom.cfg
--- tests/xmconfigdata/test-fullvirt-old-cdrom.cfg	19 Jan 2007 20:30:05 -0000	1.1
+++ tests/xmconfigdata/test-fullvirt-old-cdrom.cfg	7 Jun 2007 14:53:06 -0000
@@ -20,4 +20,4 @@ vncunused = 1
 vnclisten = "127.0.0.1"
 vncpasswd = "123poi"
 disk = [ "phy:/dev/HostVG/XenGuest2,ioemu:hda,w" ]
-vif = [ "mac=00:16:3E:66:92:9C,type=ioemu" ]
+vif = [ "mac=00:16:3E:66:92:9C,bridge=xenbr0,type=ioemu" ]
Index: tests/xmconfigdata/test-fullvirt-old-cdrom.xml
===================================================================
RCS file: /data/cvs/libvirt/tests/xmconfigdata/test-fullvirt-old-cdrom.xml,v
retrieving revision 1.2
diff -u -p -r1.2 test-fullvirt-old-cdrom.xml
--- tests/xmconfigdata/test-fullvirt-old-cdrom.xml	7 Jun 2007 14:08:35 -0000	1.2
+++ tests/xmconfigdata/test-fullvirt-old-cdrom.xml	7 Jun 2007 14:53:06 -0000
@@ -32,6 +32,7 @@
     </disk>
     <interface type='bridge'>
       <mac address='00:16:3E:66:92:9C'/>
+      <source bridge='xenbr0'/>
     </interface>
     <graphics type='vnc' port='-1' listen='127.0.0.1' passwd='123poi'/>
   </devices>


More information about the libvir-list mailing list