]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Add NIC and hostnet names to domain state XML
authorMark McLoughlin <markmc@redhat.com>
Fri, 17 Jul 2009 21:08:34 +0000 (22:08 +0100)
committerMark McLoughlin <markmc@redhat.com>
Wed, 22 Jul 2009 10:34:06 +0000 (11:34 +0100)
The qemu driver needs to assign and keep track of identifiers for
network devices so that it can remove them. We need to keep this state
across libvirtd restarts, but it's not configuration that needs to
be kept across guest restarts.

* src/domain_conf.c: parse and format <state nic="foo" hostnet="bar"/>

src/domain_conf.c

index 0741d4e2610148b8ddb8576fa39683f9e96dbb0d..2750c88a25392e611be8b84f2439775f2ecf87c2 100644 (file)
@@ -960,6 +960,8 @@ virDomainNetDefParseXML(virConnectPtr conn,
     char *port = NULL;
     char *model = NULL;
     char *internal = NULL;
+    char *nic_name = NULL;
+    char *hostnet_name = NULL;
 
     if (VIR_ALLOC(def) < 0) {
         virReportOOMError(conn);
@@ -1025,6 +1027,10 @@ virDomainNetDefParseXML(virConnectPtr conn,
                 script = virXMLPropString(cur, "path");
             } else if (xmlStrEqual (cur->name, BAD_CAST "model")) {
                 model = virXMLPropString(cur, "type");
+            } else if ((flags & VIR_DOMAIN_XML_INTERNAL_STATUS) &&
+                       xmlStrEqual(cur->name, BAD_CAST "state")) {
+                nic_name = virXMLPropString(cur, "nic");
+                hostnet_name = virXMLPropString(cur, "hostnet");
             }
         }
         cur = cur->next;
@@ -1036,6 +1042,10 @@ virDomainNetDefParseXML(virConnectPtr conn,
         virCapabilitiesGenerateMac(caps, def->mac);
     }
 
+    def->nic_name = nic_name;
+    def->hostnet_name = hostnet_name;
+    nic_name = hostnet_name = NULL;
+
     switch (def->type) {
     case VIR_DOMAIN_NET_TYPE_NETWORK:
         if (network == NULL) {
@@ -1155,6 +1165,8 @@ cleanup:
     VIR_FREE(model);
     VIR_FREE(type);
     VIR_FREE(internal);
+    VIR_FREE(nic_name);
+    VIR_FREE(hostnet_name);
 
     return def;
 
@@ -3534,7 +3546,8 @@ virDomainFSDefFormat(virConnectPtr conn,
 static int
 virDomainNetDefFormat(virConnectPtr conn,
                       virBufferPtr buf,
-                      virDomainNetDefPtr def)
+                      virDomainNetDefPtr def,
+                      int flags)
 {
     const char *type = virDomainNetTypeToString(def->type);
 
@@ -3605,6 +3618,15 @@ virDomainNetDefFormat(virConnectPtr conn,
         virBufferEscapeString(buf, "      <model type='%s'/>\n",
                               def->model);
 
+    if (flags & VIR_DOMAIN_XML_INTERNAL_STATUS) {
+        virBufferAddLit(buf, "      <state");
+        if (def->nic_name)
+            virBufferEscapeString(buf, " nic='%s'", def->nic_name);
+        if (def->hostnet_name)
+            virBufferEscapeString(buf, " hostnet='%s'", def->hostnet_name);
+        virBufferAddLit(buf, "/>\n");
+    }
+
     virBufferAddLit(buf, "    </interface>\n");
 
     return 0;
@@ -4086,7 +4108,7 @@ char *virDomainDefFormat(virConnectPtr conn,
 
 
     for (n = 0 ; n < def->nnets ; n++)
-        if (virDomainNetDefFormat(conn, &buf, def->nets[n]) < 0)
+        if (virDomainNetDefFormat(conn, &buf, def->nets[n], flags) < 0)
             goto cleanup;
 
     for (n = 0 ; n < def->nserials ; n++)