]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Make virtual network netmasks optional
authorLaine Stump <laine@laine.org>
Tue, 30 Nov 2010 20:53:17 +0000 (15:53 -0500)
committerLaine Stump <laine@laine.org>
Thu, 23 Dec 2010 20:53:04 +0000 (15:53 -0500)
When a netmask isn't specified for an IPv4 address, one can be implied
based on what network class range the address is in. The
virNetworkDefPrefix function does this for us, so netmask isn't
required.

src/conf/network_conf.c

index b5c61dade5a78c357ca211503e5e1b8a303e487f..87d7ed89fea13b6eb55cfb27a1a4579b92ecbcb6 100644 (file)
@@ -470,19 +470,14 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
         def->delay = 0;
 
     ipAddress = virXPathString("string(./ip[1]/@address)", ctxt);
-    netmask = virXPathString("string(./ip[1]/@netmask)", ctxt);
-    if (ipAddress &&
-        netmask) {
+    if (ipAddress) {
         xmlNodePtr ip;
 
         if (virSocketParseAddr(ipAddress, &def->ipAddress, AF_UNSPEC) < 0)
             goto error;
-        if (virSocketParseAddr(netmask, &def->netmask, AF_UNSPEC) < 0)
-            goto error;
 
         /* XXX someday we want IPv6, so will need to relax this */
-        if (!VIR_SOCKET_IS_FAMILY(&def->ipAddress, AF_INET) ||
-            !VIR_SOCKET_IS_FAMILY(&def->netmask, AF_INET)) {
+        if (!VIR_SOCKET_IS_FAMILY(&def->ipAddress, AF_INET)) {
             virNetworkReportError(VIR_ERR_CONFIG_UNSUPPORTED,
                                   "%s", _("Only IPv4 addresses are supported"));
             goto error;
@@ -493,18 +488,25 @@ virNetworkDefParseXML(xmlXPathContextPtr ctxt)
             goto error;
     }
     VIR_FREE(ipAddress);
-    VIR_FREE(netmask);
 
+    netmask = virXPathString("string(./ip[1]/@netmask)", ctxt);
+    if (netmask) {
 
-    /* IPv4 forwarding setup */
-    if (virXPathBoolean("count(./forward) > 0", ctxt)) {
-        if (def->ipAddress.data.sa.sa_family != AF_INET ||
-            def->netmask.data.sa.sa_family != AF_INET) {
-            virNetworkReportError(VIR_ERR_INTERNAL_ERROR,
-                                  "%s", _("Forwarding requested, but no IPv4 address/netmask provided"));
+        if (virSocketParseAddr(netmask, &def->netmask, AF_UNSPEC) < 0)
+            goto error;
+
+        /* XXX someday we want IPv6, so will need to relax this */
+        if (!VIR_SOCKET_IS_FAMILY(&def->netmask, AF_INET)) {
+            virNetworkReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                                  "%s", _("Only IPv4 addresses are supported"));
             goto error;
         }
+    }
+    VIR_FREE(netmask);
+
 
+    /* IPv4 forwarding setup */
+    if (virXPathBoolean("count(./forward) > 0", ctxt)) {
         tmp = virXPathString("string(./forward[1]/@mode)", ctxt);
         if (tmp) {
             if ((def->forwardType = virNetworkForwardTypeFromString(tmp)) < 0) {