[libvirt] PATCH: 1/2: port Test driver to network APIs

Daniel P. Berrange berrange at redhat.com
Tue Jun 24 15:59:18 UTC 2008


This patch ports the Test driver to use the network XML apis.

Basically the 'struct _testNet' is removed, and replaced by usage of the
generic virNetworkObjPtr and virNetworkDefPtr objects. The XML parser
and formatters are ripped out and replaced by calls to the generic APIs
in network_conf.h. Finally there is just alot of cleanup of all the 
individual network driver implementations to adjust to the style of the
new APIs used.

 test.c |  477 ++++++++++++++++-------------------------------------------------
 1 file changed, 121 insertions(+), 356 deletions(-)

Regards,
Daniel

diff -r 77e5fcbd24b7 src/test.c
--- a/src/test.c	Sun Jun 22 17:55:31 2008 -0400
+++ b/src/test.c	Sun Jun 22 17:56:04 2008 -0400
@@ -46,6 +46,7 @@
 #include "uuid.h"
 #include "capabilities.h"
 #include "memory.h"
+#include "network_conf.h"
 
 /* Flags that determine the action to take on a shutdown or crash of a domain
  */
@@ -85,26 +86,6 @@
 typedef struct _testDom testDom;
 typedef struct _testDom *testDomPtr;
 
-struct _testNet {
-    int active;
-    int config;
-    int running;
-    char name[20];
-    char bridge[20];
-    unsigned char uuid[VIR_UUID_BUFLEN];
-    int forward;
-    char forwardDev[IF_NAMESIZE];
-    char ipAddress[INET_ADDRSTRLEN];
-    char ipNetmask[INET_ADDRSTRLEN];
-
-    char dhcpStart[INET_ADDRSTRLEN];
-    char dhcpEnd[INET_ADDRSTRLEN];
-
-    int autostart;
-};
-typedef struct _testNet testNet;
-typedef struct _testNet *testNetPtr;
-
 #define MAX_DOMAINS 20
 #define MAX_NETWORKS 20
 #define MAX_CPUS 128
@@ -125,8 +106,7 @@
     virNodeInfo nodeInfo;
     int numDomains;
     testDom domains[MAX_DOMAINS];
-    int numNetworks;
-    testNet networks[MAX_NETWORKS];
+    virNetworkObjPtr networks;
     int numCells;
     testCell cells[MAX_CELLS];
 };
@@ -161,17 +141,18 @@
     privdom = &privconn->domains[domidx];
 
 #define GET_NETWORK(net, ret)                                           \
-    int netidx;                                                         \
     testConnPtr privconn;                                               \
-    testNetPtr privnet;                                                 \
+    virNetworkObjPtr privnet;                                           \
                                                                         \
     privconn = (testConnPtr)net->conn->privateData;                     \
-    if ((netidx = getNetworkIndex(net)) < 0) {                          \
-        testError((net)->conn, NULL, (net), VIR_ERR_INVALID_ARG,        \
-                  __FUNCTION__);                                        \
-        return (ret);                                                   \
-    }                                                                   \
-    privnet = &privconn->networks[netidx];
+    do {                                                                \
+        if ((privnet = virNetworkFindByName(privconn->networks,         \
+                                            (net)->name)) == NULL) {    \
+            testError((net)->conn, NULL, (net), VIR_ERR_INVALID_ARG,    \
+                      __FUNCTION__);                                    \
+            return (ret);                                               \
+        }                                                               \
+    } while (0)
 
 #define GET_CONNECTION(conn, ret)                                       \
     testConnPtr privconn;                                               \
@@ -423,191 +404,54 @@
 }
 
 
-static int testLoadNetwork(virConnectPtr conn,
-                           xmlDocPtr xml) {
-    xmlNodePtr root = NULL;
-    xmlXPathContextPtr ctxt = NULL;
-    char *name = NULL, *bridge = NULL;
-    unsigned char uuid[VIR_UUID_BUFLEN];
-    char *str;
-    char *ipaddress = NULL, *ipnetmask = NULL, *dhcpstart = NULL, *dhcpend = NULL;
-    int forward;
-    char *forwardDev = NULL;
-    int handle = -1, i;
+#define MAX_NETWORK_XML_LEN 16000
+
+static virNetworkObjPtr
+testLoadNetworkFromFile(virConnectPtr conn,
+                        const char *filename) {
+    char *data;
+    virNetworkDefPtr def;
     GET_CONNECTION(conn, -1);
 
-    root = xmlDocGetRootElement(xml);
-    if ((root == NULL) || (!xmlStrEqual(root->name, BAD_CAST "network"))) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network"));
-        goto error;
+    if (virFileReadAll(filename, MAX_NETWORK_XML_LEN, &data) < 0) {
+        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("load network definition file"));
+        return NULL;
     }
 
-    ctxt = xmlXPathNewContext(xml);
-    if (ctxt == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("creating xpath context"));
-        goto error;
+    if ((def = virNetworkDefParse(conn, data, filename)) == NULL) {
+        VIR_FREE(data);
+        return NULL;
     }
+    VIR_FREE(data);
 
-    name = virXPathString("string(/network/name[1])", ctxt);
-    if (name == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("network name"));
-        goto error;
-    }
-
-    bridge = virXPathString("string(/network/bridge[1]/@name)", ctxt);
-
-    str = virXPathString("string(/network/uuid[1])", ctxt);
-    if (str == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network uuid"));
-        goto error;
-    }
-    if (virUUIDParse(str, uuid) < 0) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network uuid"));
-        goto error;
-    }
-    VIR_FREE(str);
-
-
-    forward = virXPathBoolean("count(/network/forward) != 0", ctxt);
-    if (forward < 0) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network forward"));
-        goto error;
-    }
-
-    forwardDev = virXPathString("string(/network/forward/@dev)", ctxt);
-
-
-    ipaddress = virXPathString("string(/network/ip/@address)", ctxt);
-    if (ipaddress == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("ip address"));
-        goto error;
-    }
-    ipnetmask = virXPathString("string(/network/ip/@netmask)", ctxt);
-    if (ipnetmask == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("ip netmask"));
-        goto error;
-    }
-    dhcpstart = virXPathString("string(/network/ip/dhcp/range[1]/@start)", ctxt);
-    if (dhcpstart == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("ip address"));
-        goto error;
-    }
-    dhcpend = virXPathString("string(/network/ip/dhcp/range[1]/@end)", ctxt);
-    if (dhcpend == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("ip address"));
-        goto error;
-    }
-
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (!privconn->networks[i].active) {
-            handle = i;
-            break;
-        }
-    }
-    if (handle < 0)
-        return (-1);
-
-    privconn->networks[handle].active = 1;
-    privconn->networks[handle].running = 1;
-    strncpy(privconn->networks[handle].name, name, sizeof(privconn->networks[handle].name)-1);
-    privconn->networks[handle].name[sizeof(privconn->networks[handle].name)-1] = '\0';
-    strncpy(privconn->networks[handle].bridge, bridge ? bridge : name, sizeof(privconn->networks[handle].bridge)-1);
-    privconn->networks[handle].bridge[sizeof(privconn->networks[handle].bridge)-1] = '\0';
-    VIR_FREE(name);
-    name = NULL;
-    if (bridge) {
-        VIR_FREE(bridge);
-        bridge = NULL;
-    }
-
-    memmove(privconn->networks[handle].uuid, uuid, VIR_UUID_BUFLEN);
-    privconn->networks[handle].forward = forward;
-    if (forwardDev) {
-        strncpy(privconn->networks[handle].forwardDev, forwardDev, sizeof(privconn->networks[handle].forwardDev)-1);
-        privconn->networks[handle].forwardDev[sizeof(privconn->networks[handle].forwardDev)-1] = '\0';
-        VIR_FREE(forwardDev);
-    }
-
-    strncpy(privconn->networks[handle].ipAddress, ipaddress, sizeof(privconn->networks[handle].ipAddress)-1);
-    privconn->networks[handle].ipAddress[sizeof(privconn->networks[handle].ipAddress)-1] = '\0';
-    VIR_FREE(ipaddress);
-    strncpy(privconn->networks[handle].ipNetmask, ipnetmask, sizeof(privconn->networks[handle].ipNetmask)-1);
-    privconn->networks[handle].ipNetmask[sizeof(privconn->networks[handle].ipNetmask)-1] = '\0';
-    VIR_FREE(ipnetmask);
-    strncpy(privconn->networks[handle].dhcpStart, dhcpstart, sizeof(privconn->networks[handle].dhcpStart)-1);
-    privconn->networks[handle].dhcpStart[sizeof(privconn->networks[handle].dhcpStart)-1] = '\0';
-    VIR_FREE(dhcpstart);
-    strncpy(privconn->networks[handle].dhcpEnd, dhcpend, sizeof(privconn->networks[handle].dhcpEnd)-1);
-    privconn->networks[handle].dhcpEnd[sizeof(privconn->networks[handle].dhcpEnd)-1] = '\0';
-    VIR_FREE(dhcpend);
-    xmlXPathFreeContext(ctxt);
-    return (handle);
-
- error:
-    xmlXPathFreeContext(ctxt);
-    VIR_FREE (forwardDev);
-    VIR_FREE(ipaddress);
-    VIR_FREE(ipnetmask);
-    VIR_FREE(dhcpstart);
-    VIR_FREE(dhcpend);
-    VIR_FREE(name);
-    return (-1);
+    return virNetworkAssignDef(conn, &privconn->networks,
+                               def);
 }
 
-static int testLoadNetworkFromDoc(virConnectPtr conn,
-                                 const char *doc) {
-    int ret;
-    xmlDocPtr xml;
-    if (!(xml = xmlReadDoc(BAD_CAST doc, "network.xml", NULL,
-                           XML_PARSE_NOENT | XML_PARSE_NONET |
-                           XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network"));
-        return (-1);
-    }
-
-    ret = testLoadNetwork(conn, xml);
-
-    xmlFreeDoc(xml);
-
-    return (ret);
-}
-
-
-static int testLoadNetworkFromFile(virConnectPtr conn,
-                                  const char *filename) {
-    int ret, fd;
-    xmlDocPtr xml;
-
-    if ((fd = open(filename, O_RDONLY)) < 0) {
-        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("load network definition file"));
-        return (-1);
-    }
-
-    if (!(xml = xmlReadFd(fd, filename, NULL,
-                          XML_PARSE_NOENT | XML_PARSE_NONET |
-                          XML_PARSE_NOERROR | XML_PARSE_NOWARNING))) {
-        testError(conn, NULL, NULL, VIR_ERR_XML_ERROR, _("network"));
-        return (-1);
-    }
-
-    ret = testLoadNetwork(conn, xml);
-
-    xmlFreeDoc(xml);
-    close(fd);
-
-    return (ret);
-}
+static const char *defaultNetworkXML =
+"<network>"
+"  <name>default</name>"
+"  <bridge name='virbr0' />"
+"  <forward/>"
+"  <ip address='192.168.122.1' netmask='255.255.255.0'>"
+"    <dhcp>"
+"      <range start='192.168.122.2' end='192.168.122.254' />"
+"    </dhcp>"
+"  </ip>"
+"</network>";
 
 
 static int testOpenDefault(virConnectPtr conn) {
     int u;
     struct timeval tv;
     testConnPtr privconn;
+    virNetworkDefPtr netdef;
+    virNetworkObjPtr netobj;
+
     if (VIR_ALLOC(privconn) < 0) {
         testError(conn, NULL, NULL, VIR_ERR_NO_MEMORY, "testConn");
         return VIR_DRV_OPEN_ERROR;
     }
-    memset(privconn, 0, sizeof(testConn));
 
     if (gettimeofday(&tv, NULL) < 0) {
         testError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("getting time of day"));
@@ -636,21 +480,15 @@
     privconn->domains[0].info.cpuTime = ((tv.tv_sec * 1000ll * 1000ll  * 1000ll) + (tv.tv_usec * 1000ll));
 
 
-    privconn->numNetworks = 1;
-    privconn->networks[0].active = 1;
-    privconn->networks[0].config = 1;
-    privconn->networks[0].running = 1;
-    strcpy(privconn->networks[0].name, "default");
-    strcpy(privconn->networks[0].bridge, "default");
-    for (u = 0 ; u < VIR_UUID_BUFLEN ; u++) {
-        privconn->networks[0].uuid[u] = (u * 75)%255;
+    if (!(netdef = virNetworkDefParse(conn, defaultNetworkXML, "default.xml"))) {
+        return VIR_DRV_OPEN_ERROR;
     }
-    privconn->networks[0].forward = 1;
-    strcpy(privconn->networks[0].forwardDev, "eth0");
-    strcpy(privconn->networks[0].ipAddress, "192.168.122.1");
-    strcpy(privconn->networks[0].ipNetmask, "255.255.255.0");
-    strcpy(privconn->networks[0].dhcpStart, "192.168.122.128");
-    strcpy(privconn->networks[0].dhcpEnd, "192.168.122.253");
+    if (!(netobj = virNetworkAssignDef(conn, &privconn->networks, netdef))) {
+        virNetworkDefFree(netdef);
+        return VIR_DRV_OPEN_ERROR;
+    }
+    netobj->active = 1;
+    netobj->persistent = 1;
 
     // Numa setup
     privconn->numCells = 2;
@@ -736,7 +574,6 @@
     conn->privateData = privconn;
     privconn->nextDomID = 1;
     privconn->numDomains = 0;
-    privconn->numNetworks = 0;
     privconn->numCells = 0;
     strncpy(privconn->path, file, PATH_MAX-1);
     privconn->path[PATH_MAX-1] = '\0';
@@ -840,21 +677,20 @@
     ret = virXPathNodeSet("/node/network", ctxt, &networks);
     if (ret > 0) {
         for (i = 0 ; i < ret ; i++) {
+            virNetworkObjPtr net;
             xmlChar *netFile = xmlGetProp(networks[i], BAD_CAST "file");
             char *absFile = testBuildFilename(file, (const char *)netFile);
-            int handle;
             VIR_FREE(netFile);
             if (!absFile) {
                 testError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("resolving network filename"));
                 goto error;
             }
-            if ((handle = testLoadNetworkFromFile(conn, absFile)) < 0) {
+            if ((net = testLoadNetworkFromFile(conn, absFile)) == NULL) {
                 VIR_FREE(absFile);
                 goto error;
             }
-            privconn->networks[handle].config = 1;
-            VIR_FREE(absFile);
-            privconn->numNetworks++;
+            net->persistent = 1;
+            net->configFile = absFile;
         }
         if (networks != NULL) {
             VIR_FREE(networks);
@@ -892,17 +728,6 @@
             if (STREQ(domain->name, privconn->domains[i].name))
                 return (i);
         }
-    }
-    return (-1);
-}
-
-static int getNetworkIndex(virNetworkPtr network) {
-    int i;
-    GET_CONNECTION(network->conn, -1);
-
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (STREQ(network->name, privconn->networks[i].name))
-            return (i);
     }
     return (-1);
 }
@@ -1742,160 +1567,131 @@
 static virNetworkPtr testLookupNetworkByUUID(virConnectPtr conn,
                                            const unsigned char *uuid)
 {
-    int i, idx = -1;
+    virNetworkObjPtr net = NULL;
     GET_CONNECTION(conn, NULL);
 
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (privconn->networks[i].active &&
-            memcmp(uuid, privconn->networks[i].uuid, VIR_UUID_BUFLEN) == 0) {
-            idx = i;
-            break;
-        }
-    }
-
-    if (idx < 0) {
+    if ((net = virNetworkFindByUUID(privconn->networks, uuid)) == NULL) {
         testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL);
         return NULL;
     }
 
-    return virGetNetwork(conn, privconn->networks[idx].name, privconn->networks[idx].uuid);
+    return virGetNetwork(conn, net->def->name, net->def->uuid);
 }
 
 static virNetworkPtr testLookupNetworkByName(virConnectPtr conn,
-                                           const char *name)
+                                             const char *name)
 {
-    int i, idx = -1;
+    virNetworkObjPtr net = NULL;
     GET_CONNECTION(conn, NULL);
 
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (privconn->networks[i].active &&
-            STREQ(name, privconn->networks[i].name)) {
-            idx = i;
-            break;
-        }
-    }
-
-    if (idx < 0) {
+    if ((net = virNetworkFindByName(privconn->networks, name)) == NULL) {
         testError (conn, NULL, NULL, VIR_ERR_NO_NETWORK, NULL);
         return NULL;
     }
 
-    return virGetNetwork(conn, privconn->networks[idx].name, privconn->networks[idx].uuid);
+    return virGetNetwork(conn, net->def->name, net->def->uuid);
 }
 
 
 static int testNumNetworks(virConnectPtr conn) {
-    int numInactive = 0, i;
+    int numActive = 0;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, -1);
 
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (!privconn->networks[i].active ||
-            !privconn->networks[i].running)
-            continue;
-        numInactive++;
+    net = privconn->networks;
+    while (net) {
+        if (virNetworkIsActive(net))
+            numActive++;
+        net = net->next;
     }
-    return (numInactive);
+    return numActive;
 }
 
 static int testListNetworks(virConnectPtr conn, char **const names, int nnames) {
-    int n = 0, i;
+    int n = 0;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, -1);
 
-    for (i = 0, n = 0 ; i < MAX_NETWORKS && n < nnames ; i++) {
-        if (privconn->networks[i].active &&
-            privconn->networks[i].running) {
-            names[n++] = strdup(privconn->networks[i].name);
-        }
+    net = privconn->networks;
+    while (net && n < nnames) {
+        if (virNetworkIsActive(net))
+            names[n++] = strdup(net->def->name);
+        net = net->next;
     }
-    return (n);
+    return n;
 }
 
 static int testNumDefinedNetworks(virConnectPtr conn) {
-    int numInactive = 0, i;
+    int numInactive = 0;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, -1);
 
-    for (i = 0 ; i < MAX_NETWORKS ; i++) {
-        if (!privconn->networks[i].active ||
-            privconn->networks[i].running)
-            continue;
-        numInactive++;
+    net = privconn->networks;
+    while (net) {
+        if (!virNetworkIsActive(net))
+            numInactive++;
+        net = net->next;
     }
-    return (numInactive);
+    return numInactive;
 }
 
 static int testListDefinedNetworks(virConnectPtr conn, char **const names, int nnames) {
-    int n = 0, i;
+    int n = 0;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, -1);
 
-    for (i = 0, n = 0 ; i < MAX_NETWORKS && n < nnames ; i++) {
-        if (privconn->networks[i].active &&
-            !privconn->networks[i].running) {
-            names[n++] = strdup(privconn->networks[i].name);
-        }
+    net = privconn->networks;
+    while (net && n < nnames) {
+        if (!virNetworkIsActive(net))
+            names[n++] = strdup(net->def->name);
+        net = net->next;
     }
-    return (n);
+    return n;
 }
 
 static virNetworkPtr testNetworkCreate(virConnectPtr conn, const char *xml) {
-    int handle = -1;
-    virNetworkPtr net;
+    virNetworkDefPtr def;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, NULL);
 
-    if (xml == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
-        return (NULL);
-    }
+    if ((def = virNetworkDefParse(conn, xml, NULL)) == NULL)
+        return NULL;
 
-    if (privconn->numNetworks == MAX_NETWORKS) {
-        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("too many networks"));
-        return (NULL);
-    }
+    if ((net = virNetworkAssignDef(conn, &privconn->networks,
+                                   def)) == NULL)
+        return NULL;
+    net->active = 1;
 
-    if ((handle = testLoadNetworkFromDoc(conn, xml)) < 0)
-        return (NULL);
-    privconn->networks[handle].config = 0;
-
-    net = virGetNetwork(conn, privconn->networks[handle].name, privconn->networks[handle].uuid);
-    if (net == NULL) return NULL;
-    privconn->numNetworks++;
-    return (net);
+    return virGetNetwork(conn, def->name, def->uuid);
 }
 
 static virNetworkPtr testNetworkDefine(virConnectPtr conn, const char *xml) {
-    int handle = -1;
-    virNetworkPtr net;
+    virNetworkDefPtr def;
+    virNetworkObjPtr net;
     GET_CONNECTION(conn, NULL);
 
-    if (xml == NULL) {
-        testError(conn, NULL, NULL, VIR_ERR_INVALID_ARG, __FUNCTION__);
-        return (NULL);
-    }
+    if ((def = virNetworkDefParse(conn, xml, NULL)) == NULL)
+        return NULL;
 
-    if (privconn->numNetworks == MAX_NETWORKS) {
-        testError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR, _("too many networks"));
-        return (NULL);
-    }
+    if ((net = virNetworkAssignDef(conn, &privconn->networks,
+                                   def)) == NULL)
+        return NULL;
+    net->persistent = 1;
 
-    if ((handle = testLoadNetworkFromDoc(conn, xml)) < 0)
-        return (NULL);
-
-    net = virGetNetwork(conn, privconn->networks[handle].name, privconn->networks[handle].uuid);
-    privconn->networks[handle].config = 1;
-    if (net == NULL) return NULL;
-    privconn->numNetworks++;
-    return (net);
+    return virGetNetwork(conn, def->name, def->uuid);
 }
 
 static int testNetworkUndefine(virNetworkPtr network) {
     GET_NETWORK(network, -1);
 
-    if (privnet->running) {
+    if (virNetworkIsActive(privnet)) {
         testError(network->conn, NULL, network, VIR_ERR_INTERNAL_ERROR,
                   _("Network is still running"));
         return (-1);
     }
 
-    privnet->active = 0;
+    virNetworkRemoveInactive(&privconn->networks,
+                             privnet);
 
     return (0);
 }
@@ -1903,13 +1699,13 @@
 static int testNetworkStart(virNetworkPtr network) {
     GET_NETWORK(network, -1);
 
-    if (privnet->running) {
+    if (virNetworkIsActive(privnet)) {
         testError(network->conn, NULL, network, VIR_ERR_INTERNAL_ERROR,
                   _("Network is already running"));
         return (-1);
     }
 
-    privnet->running = 1;
+    privnet->active = 1;
 
     return (0);
 }
@@ -1917,55 +1713,24 @@
 static int testNetworkDestroy(virNetworkPtr network) {
     GET_NETWORK(network, -1);
 
-    if (privnet->config) {
-        privnet->running = 0;
-    } else {
-        privnet->active = 0;
+    privnet->active = 0;
+    if (!privnet->persistent) {
+        virNetworkRemoveInactive(&privconn->networks,
+                                 privnet);
     }
     return (0);
 }
 
 static char *testNetworkDumpXML(virNetworkPtr network, int flags ATTRIBUTE_UNUSED) {
-    virBuffer buf = VIR_BUFFER_INITIALIZER;
-    unsigned char *uuid;
-    char uuidstr[VIR_UUID_STRING_BUFLEN];
     GET_NETWORK(network, NULL);
 
-    virBufferAddLit(&buf, "<network>\n");
-    virBufferVSprintf(&buf, "  <name>%s</name>\n", network->name);
-    uuid = network->uuid;
-    virUUIDFormat(uuid, uuidstr);
-    virBufferVSprintf(&buf, "  <uuid>%s</uuid>\n", uuidstr);
-    virBufferVSprintf(&buf, "  <bridge name='%s'/>\n", privnet->bridge);
-    if (privnet->forward) {
-        if (privnet->forwardDev[0])
-            virBufferVSprintf(&buf, "  <forward dev='%s'/>\n", privnet->forwardDev);
-        else
-            virBufferAddLit(&buf, "  <forward/>\n");
-    }
-
-    virBufferVSprintf(&buf, "  <ip address='%s' netmask='%s'>\n",
-                      privnet->ipAddress, privnet->ipNetmask);
-    virBufferAddLit(&buf, "    <dhcp>\n");
-    virBufferVSprintf(&buf, "      <range start='%s' end='%s'/>\n",
-                      privnet->dhcpStart, privnet->dhcpEnd);
-    virBufferAddLit(&buf, "    </dhcp>\n");
-    virBufferAddLit(&buf, "  </ip>\n");
-
-    virBufferAddLit(&buf, "</network>\n");
-
-    if (virBufferError(&buf)) {
-        testError(network->conn, NULL, network, VIR_ERR_NO_MEMORY, __FUNCTION__);
-        return NULL;
-    }
-
-    return virBufferContentAndReset(&buf);
+    return virNetworkDefFormat(network->conn, privnet->def);
 }
 
 static char *testNetworkGetBridgeName(virNetworkPtr network) {
     char *bridge;
     GET_NETWORK(network, NULL);
-    bridge = strdup(privnet->bridge);
+    bridge = privnet->def->bridge ? strdup(privnet->def->bridge) : NULL;
     if (!bridge) {
         testError(network->conn, NULL, network, VIR_ERR_NO_MEMORY, "network");
         return NULL;


-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list