[Libvirt-cim] [PATCH 3 of 6] Add network interface parsing for KVM domains

Dan Smith danms at us.ibm.com
Thu Jan 17 15:47:49 UTC 2008


# HG changeset patch
# User Dan Smith <danms at us.ibm.com>
# Date 1200587110 28800
# Node ID a1fe7e8ff84c4e27245beb259e64de71e6dca740
# Parent  2602553d1f9ac0bd6fc6ad41b54a466053f03c5d
Add network interface parsing for KVM domains

Changes:
 - Fixed printf() debugs
 - Changed the source/type validation to better catch unsupported
   configs.

Signed-off-by: Dan Smith <danms at us.ibm.com>

diff -r 2602553d1f9a -r a1fe7e8ff84c libxkutil/device_parsing.c
--- a/libxkutil/device_parsing.c	Thu Jan 17 08:25:10 2008 -0800
+++ b/libxkutil/device_parsing.c	Thu Jan 17 08:25:10 2008 -0800
@@ -44,6 +44,7 @@
 #define GRAPHICS_XPATH  (xmlChar *)"/domain/devices/graphics"
 
 #define DEFAULT_BRIDGE "xenbr0"
+#define DEFAULT_NETWORK "default"
 
 #define XSTREQ(x, y) (STREQ((char *)x, y))
 #define MAX(a,b) (((a)>(b))?(a):(b))
@@ -61,7 +62,7 @@ static void cleanup_net_device(struct ne
 {
         free(dev->type);
         free(dev->mac);
-        free(dev->bridge);
+        free(dev->source);
 }
 
 static void cleanup_emu_device(struct emu_device *dev)
@@ -216,18 +217,35 @@ static int parse_net_device(xmlNode *ino
                         if (ndev->mac == NULL)
                                 goto err;
                 } else if (XSTREQ(child->name, "source")) {
-                        ndev->bridge = get_attr_value(child, "bridge");
-                        if (ndev->bridge == NULL)
-                                goto err;
+                        ndev->source = get_attr_value(child, "bridge");
+                        if (ndev->source != NULL)
+                                continue;
+                        ndev->source = get_attr_value(child, "network");
+                        if (ndev->source != NULL)
+                                continue;
+                        goto err;
                 }
         }
 
         if (ndev->mac == NULL)
                 goto err;
 
-        if (ndev->bridge == NULL) {
-                ndev->bridge = strdup(DEFAULT_BRIDGE);
-                printf("No bridge, taking default of `%s'\n", ndev->bridge);
+        if (ndev->source == NULL) {
+                if (STREQC(ndev->type, "bridge")) {
+                        ndev->source = strdup(DEFAULT_BRIDGE);
+                        CU_DEBUG("No bridge, taking default of `%s'\n",
+                                 ndev->source);
+                } else if (STREQC(ndev->type, "network")) {
+                        ndev->source = strdup(DEFAULT_NETWORK);
+                        CU_DEBUG("No network, taking default of `%s'\n",
+                                 ndev->source);
+                } else {
+                        /* This likely indicates an unsupported
+                         * network configuration
+                         */
+                        CU_DEBUG("No network source, and no known default");
+                        goto err;
+                }
         }
 
         vdev->type = VIRT_DEV_NET;
@@ -517,7 +535,7 @@ struct virt_device *virt_device_dup(stru
         if (dev->type == VIRT_DEV_NET) {
                 DUP_FIELD(dev, _dev, dev.net.mac);
                 DUP_FIELD(dev, _dev, dev.net.type);
-                DUP_FIELD(dev, _dev, dev.net.bridge);
+                DUP_FIELD(dev, _dev, dev.net.source);
         } else if (dev->type == VIRT_DEV_DISK) {
                 DUP_FIELD(dev, _dev, dev.disk.type);
                 DUP_FIELD(dev, _dev, dev.disk.device);
diff -r 2602553d1f9a -r a1fe7e8ff84c libxkutil/device_parsing.h
--- a/libxkutil/device_parsing.h	Thu Jan 17 08:25:10 2008 -0800
+++ b/libxkutil/device_parsing.h	Thu Jan 17 08:25:10 2008 -0800
@@ -41,7 +41,7 @@ struct net_device {
 struct net_device {
         char *type;
         char *mac;
-        char *bridge;
+        char *source;
 };
 
 struct mem_device {
diff -r 2602553d1f9a -r a1fe7e8ff84c src/Virt_DevicePool.c
--- a/src/Virt_DevicePool.c	Thu Jan 17 08:25:10 2008 -0800
+++ b/src/Virt_DevicePool.c	Thu Jan 17 08:25:10 2008 -0800
@@ -295,7 +295,7 @@ static char *netpool_member_of(const CMP
         for (i = 0; i < count; i++) {
                 if (STREQ((devs[i].id), dev)) {
                         result = _netpool_member_of(conn,
-                                                    devs[i].dev.net.bridge);
+                                                    devs[i].dev.net.source);
                         break;
                 }
         }




More information about the Libvirt-cim mailing list