[PATCHv2 06/13] Make virtual network netmasks optional

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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.
---
V2 Changes:

* Any prefix arg is now unsigned int rather than int.

 src/conf/network_conf.c |   30 ++++++++++++++++--------------
 1 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/conf/network_conf.c b/src/conf/network_conf.c
index 427b338..b17c708 100644
--- a/src/conf/network_conf.c
+++ b/src/conf/network_conf.c
@@ -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) {
-- 
1.7.3.4

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list


[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]