X-Git-Url: https://gerrit.fd.io/r/gitweb?p=csit.git;a=blobdiff_plain;f=resources%2Flibraries%2Fpython%2FIPUtil.py;h=e364e60ceeb4a3cc7fc9103c283b7d50035f390c;hp=8ad01c491bb00785bdc68efe8c0ec33f201107fd;hb=fdc6e0fc0c675eb4faa699fef7e1e2ca91df2b03;hpb=8c12ff59f1a5e750151f5eb0e806dcc80e91c3c2 diff --git a/resources/libraries/python/IPUtil.py b/resources/libraries/python/IPUtil.py index 8ad01c491b..e364e60cee 100644 --- a/resources/libraries/python/IPUtil.py +++ b/resources/libraries/python/IPUtil.py @@ -12,6 +12,7 @@ # limitations under the License. """Common IP utilities library.""" +from ipaddress import IPv4Network from resources.libraries.python.ssh import SSH from resources.libraries.python.constants import Constants @@ -40,3 +41,24 @@ class IPUtil(object): if int(ret_code) != 0: raise Exception('VPP ip probe {dev} {ip} failed on {h}'.format( dev=interface, ip=addr, h=node['host'])) + + +def convert_ipv4_netmask_prefix(network): + """Convert network mask to equivalent network prefix length or vice versa. + + Example: mask 255.255.0.0 -> prefix length 16 + :param network: Network mask or network prefix length. + :type network: str or int + :return: Network mask or network prefix length. + :rtype: str or int + """ + temp_address = "0.0.0.0" + net = IPv4Network(u"{0}/{1}".format(temp_address, network), False) + + if isinstance(network, int) and (0 < network < 33): + return str(net.netmask) + elif isinstance(network, basestring): + return int(net.prefixlen) + else: + raise Exception("Value {0} is not a valid ipv4 netmask or network" + " prefix length".format(network))