Petr Horáček has uploaded a new change for review.

Change subject: net: canonicalize IPv4 prefix to netmask
......................................................................

net: canonicalize IPv4 prefix to netmask

In order to simplify static IP handling and fix OVS switch, this
patch introduces canonicalization of passed IPv4 prefix into netmask.

It also adds missing 'prefix' to setupNetworks documentation.

Change-Id: I344eef120b4c19f90d4dd20c7857bb73ab259e9b
Bug-Url: https://bugzilla.redhat.com/1374194
Signed-off-by: Petr Horáček <phora...@redhat.com>
---
M lib/vdsm/network/api.py
M lib/vdsm/network/canonicalize.py
M tests/network/func_static_ip_test.py
M tests/network/netfunctestlib.py
4 files changed, 23 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/94/64494/1

diff --git a/lib/vdsm/network/api.py b/lib/vdsm/network/api.py
index 9350efe..9eae392 100644
--- a/lib/vdsm/network/api.py
+++ b/lib/vdsm/network/api.py
@@ -209,7 +209,7 @@
                         bonding="<name>" | nic="<name>"
                         (bonding and nics are mutually exclusive)
                         ipaddr="<ipv4>"
-                        netmask="<ipv4>"
+                        netmask="<ipv4>" | prefix=<prefixlen>
                         gateway="<ipv4>"
                         bootproto="..."
                         ipv6addr="<ipv6>[/<prefixlen>]"
diff --git a/lib/vdsm/network/canonicalize.py b/lib/vdsm/network/canonicalize.py
index b0bc983..655db7b 100644
--- a/lib/vdsm/network/canonicalize.py
+++ b/lib/vdsm/network/canonicalize.py
@@ -22,6 +22,7 @@
 import six
 
 from .netinfo import bridges, mtus, bonding, dns
+from .netinfo.addresses import prefix2netmask
 from vdsm import utils
 
 from .errors import ConfigNetworkError
@@ -47,6 +48,7 @@
         _canonicalize_switch_type_net(attrs)
         _canonicalize_ip_default_route(attrs)
         _canonicalize_nameservers(attrs)
+        _canonicalize_netmask(attrs)
 
 
 def canonicalize_bondings(bonds):
@@ -138,3 +140,9 @@
             data['nameservers'] = dns.get_host_nameservers()
         else:
             data['nameservers'] = []
+
+
+def _canonicalize_netmask(data):
+    prefix = data.pop('prefix', None)
+    if prefix:
+        data['netmask'] = prefix2netmask(int(prefix))
diff --git a/tests/network/func_static_ip_test.py 
b/tests/network/func_static_ip_test.py
index 529e01e..d16c56e 100644
--- a/tests/network/func_static_ip_test.py
+++ b/tests/network/func_static_ip_test.py
@@ -122,6 +122,17 @@
             with self.setupNetworks(netcreate, bondcreate, NOCHK):
                 self.assertNetworkIp(NETWORK_NAME, netcreate[NETWORK_NAME])
 
+    def test_add_net_with_prefix(self):
+        with dummy_device() as nic:
+            network_attrs = {'nic': nic,
+                             'ipaddr': IPv4_ADDRESS,
+                             'prefix': IPv4_PREFIX_LEN,
+                             'switch': self.switch}
+            netcreate = {NETWORK_NAME: network_attrs}
+
+            with self.setupNetworks(netcreate, {}, NOCHK):
+                self.assertNetworkIp(NETWORK_NAME, netcreate[NETWORK_NAME])
+
 
 @attr(type='functional', switch='legacy')
 class NetworkStaticIpBasicLegacyTest(NetworkStaticIpBasicTemplate):
diff --git a/tests/network/netfunctestlib.py b/tests/network/netfunctestlib.py
index 2d238aa..cdf8d78 100644
--- a/tests/network/netfunctestlib.py
+++ b/tests/network/netfunctestlib.py
@@ -32,6 +32,7 @@
 from vdsm.network.ip import dhclient
 from vdsm.network.ip.address import ipv6_supported
 from vdsm.network.link.iface import is_oper_up
+from vdsm.network.netinfo.addresses import prefix2netmask
 
 from testlib import VdsmTestCase
 
@@ -289,7 +290,8 @@
     def assertStaticIPv4(self, netattrs, ipinfo):
         requires_ipaddress()
         address = netattrs['ipaddr']
-        netmask = netattrs['netmask']
+        netmask = (netattrs.get('netmask') or
+                   prefix2netmask(int(netattrs.get('prefix'))))
         self.assertEqual(address, ipinfo['addr'])
         self.assertEqual(netmask, ipinfo['netmask'])
         ipv4 = ipaddress.IPv4Interface(


-- 
To view, visit https://gerrit.ovirt.org/64494
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I344eef120b4c19f90d4dd20c7857bb73ab259e9b
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Petr Horáček <phora...@redhat.com>
_______________________________________________
vdsm-patches mailing list -- vdsm-patches@lists.fedorahosted.org
To unsubscribe send an email to vdsm-patches-le...@lists.fedorahosted.org

Reply via email to