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 <phoracek(a)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 <phoracek(a)redhat.com>