]> xenbits.xensource.com Git - libvirt.git/commitdiff
Support for 'internal' network
authorDaniel Veillard <veillard@redhat.com>
Mon, 11 May 2009 09:50:27 +0000 (09:50 +0000)
committerDaniel Veillard <veillard@redhat.com>
Mon, 11 May 2009 09:50:27 +0000 (09:50 +0000)
* src/domain_conf.[ch] docs/schemas/domain.rng: add support
  for internal network in the generic part of the code, and
  update the Relax-NG grammar accordingly, patch by Pritesh Kothari
daniel

ChangeLog
docs/schemas/domain.rng
src/domain_conf.c
src/domain_conf.h

index c2b27e3d28aaf2a627b39fcd87500cc9e20e433d..95bfd1e548a78743fcce76ed0ef46ea2c9de240d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Mon May 11 11:47:51 CEST 2009 Daniel Veillard <veillard@redhat.com>
+
+       * src/domain_conf.[ch] docs/schemas/domain.rng: add support
+         for internal network in the generic part of the code, and
+         update the Relax-NG grammar accordingly, patch by Pritesh Kothari
+
 Fri May  8 11:24:22 BST 2009 Daniel P. Berrange <berrange@redhat.com>
 
        * src/cgroup.c: Create cgroups mode 755, not 655 (Ryota Ozaki)
index 2f784e1de4bddac2f3dba099c6a9c1b21f9fd56a..f1fc8c7f88f6e4db048bc69f8b69418d1a86f9e9 100644 (file)
             <ref name="interface-options"/>
           </interleave>
         </group>
+        <group>
+          <attribute name="type">
+            <value>internal</value>
+          </attribute>
+          <interleave>
+            <element name="source">
+              <attribute name="name">
+                <ref name="deviceName"/>
+              </attribute>
+              <empty/>
+            </element>
+            <ref name="interface-options"/>
+          </interleave>
+        </group>
       </choice>
     </element>
   </define>
index ed4b8e5744d676de2266110744803bdfdc0c5385..00aceef5b3e28b678f76179ec0753b789e9c6050 100644 (file)
@@ -119,7 +119,8 @@ VIR_ENUM_IMPL(virDomainNet, VIR_DOMAIN_NET_TYPE_LAST,
               "client",
               "mcast",
               "network",
-              "bridge")
+              "bridge",
+              "internal")
 
 VIR_ENUM_IMPL(virDomainChr, VIR_DOMAIN_CHR_TYPE_LAST,
               "null",
@@ -310,6 +311,10 @@ void virDomainNetDefFree(virDomainNetDefPtr def)
         VIR_FREE(def->data.bridge.script);
         VIR_FREE(def->data.bridge.ipaddr);
         break;
+
+    case VIR_DOMAIN_NET_TYPE_INTERNAL:
+        VIR_FREE(def->data.internal.name);
+        break;
     }
 
     VIR_FREE(def->ifname);
@@ -889,6 +894,7 @@ virDomainNetDefParseXML(virConnectPtr conn,
     char *address = NULL;
     char *port = NULL;
     char *model = NULL;
+    char *internal = NULL;
 
     if (VIR_ALLOC(def) < 0) {
         virReportOOMError(conn);
@@ -916,6 +922,10 @@ virDomainNetDefParseXML(virConnectPtr conn,
                        (def->type == VIR_DOMAIN_NET_TYPE_NETWORK) &&
                        (xmlStrEqual(cur->name, BAD_CAST "source"))) {
                 network = virXMLPropString(cur, "network");
+            } else if ((internal == NULL) &&
+                       (def->type == VIR_DOMAIN_NET_TYPE_INTERNAL) &&
+                       (xmlStrEqual(cur->name, BAD_CAST "source"))) {
+                internal = virXMLPropString(cur, "name");
             } else if ((network == NULL) &&
                        (def->type == VIR_DOMAIN_NET_TYPE_BRIDGE) &&
                        (xmlStrEqual(cur->name, BAD_CAST "source"))) {
@@ -1031,6 +1041,15 @@ virDomainNetDefParseXML(virConnectPtr conn,
             def->data.socket.address = address;
             address = NULL;
         }
+    case VIR_DOMAIN_NET_TYPE_INTERNAL:
+        if (internal == NULL) {
+            virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
+        _("No <source> 'name' attribute specified with <interface type='internal'/>"));
+            goto error;
+        }
+        def->data.internal.name = internal;
+        internal = NULL;
+        break;
     }
 
     if (ifname != NULL) {
@@ -1068,6 +1087,7 @@ cleanup:
     VIR_FREE(bridge);
     VIR_FREE(model);
     VIR_FREE(type);
+    VIR_FREE(internal);
 
     return def;
 
@@ -3051,6 +3071,12 @@ virDomainNetDefFormat(virConnectPtr conn,
         else
             virBufferVSprintf(buf, "      <source port='%d'/>\n",
                               def->data.socket.port);
+
+    case VIR_DOMAIN_NET_TYPE_INTERNAL:
+        virBufferEscapeString(buf, "      <source name='%s'/>\n",
+                              def->data.internal.name);
+        break;
+
     }
 
     if (def->ifname)
index 84fc4778579b18d242601b67b0953f1d15c818cd..c0a5288cbf9f1c7482129b48e31103cc74273236 100644 (file)
@@ -138,6 +138,7 @@ enum virDomainNetType {
     VIR_DOMAIN_NET_TYPE_MCAST,
     VIR_DOMAIN_NET_TYPE_NETWORK,
     VIR_DOMAIN_NET_TYPE_BRIDGE,
+    VIR_DOMAIN_NET_TYPE_INTERNAL,
 
     VIR_DOMAIN_NET_TYPE_LAST,
 };
@@ -168,6 +169,9 @@ struct _virDomainNetDef {
             char *script;
             char *ipaddr;
         } bridge;
+        struct {
+            char *name;
+        } internal;
     } data;
     char *ifname;
 };