diff --git a/debian/control b/debian/control index 7122da4..7809864 100644 --- a/debian/control +++ b/debian/control @@ -17,7 +17,7 @@ Architecture: all Provides: ifupdown Conflicts: ifupdown Replaces: ifupdown -Depends: ${python:Depends}, ${misc:Depends}, iproute2, python3-argcomplete +Depends: ${python:Depends}, ${misc:Depends}, iproute2, python-argcomplete, python-ipaddr Suggests: isc-dhcp-client, bridge-utils, ethtool, python-gvgen, python-mako Description: Network Interface Management tool similar to ifupdown ifupdown2 is ifupdown re-written in Python. It replaces ifupdown and provides diff --git a/ifupdown2/addons/address.py b/ifupdown2/addons/address.py index 94d8b77..3abc4c4 100644 --- a/ifupdown2/addons/address.py +++ b/ifupdown2/addons/address.py @@ -6,12 +6,7 @@ import socket -from ipaddress import ip_network, IPv4Network, IPv6Network - - -def IPNetwork(ip): - return ip_network(ip, False) - +from ipaddr import IPNetwork, IPv4Network, IPv6Network try: from ifupdown2.lib.addon import Addon @@ -325,14 +320,6 @@ class address(Addon, moduleBase): return True return False - @staticmethod - def validate_ipv4network(value): - return IPv4Network(value, strict=False) - - @staticmethod - def validate_ipv6network(value): - return IPv6Network(value, strict=False) - def syntax_check_multiple_gateway(self, ifaceobj): result = True inet = False @@ -341,10 +328,10 @@ class address(Addon, moduleBase): for addr in gateways if gateways else []: try: if self._syntax_check_multiple_gateway('inet', inet, addr, - self.validate_ipv4network): + IPv4Network): inet = True if self._syntax_check_multiple_gateway('inet6', inet6, addr, - self.validate_ipv6network): + IPv6Network): inet6 = True except Exception as e: self.logger.warning('%s: address: %s' % (ifaceobj.name, str(e))) diff --git a/ifupdown2/addons/addressvirtual.py b/ifupdown2/addons/addressvirtual.py index 9b025dd..1eb668e 100644 --- a/ifupdown2/addons/addressvirtual.py +++ b/ifupdown2/addons/addressvirtual.py @@ -9,10 +9,7 @@ import glob import subprocess from collections import deque -from ipaddress import ip_network, IPv6Network - -def IPNetwork(ip): - return ip_network(ip, False) +from ipaddr import IPNetwork, IPv6Network try: from ifupdown2.lib.addon import Addon diff --git a/ifupdown2/addons/vxlan.py b/ifupdown2/addons/vxlan.py index c5d9103..e005b30 100644 --- a/ifupdown2/addons/vxlan.py +++ b/ifupdown2/addons/vxlan.py @@ -5,16 +5,7 @@ # -from ipaddress import ip_network, ip_address, IPv4Address, IPv4Network, AddressValueError - - -def IPNetwork(ip): - return ip_network(ip, False) - - -def IPAddress(ip): - return ip_address(ip) - +from ipaddr import IPNetwork, IPAddress, IPv4Address, IPv4Network, AddressValueError try: import ifupdown2.ifupdown.policymanager as policymanager @@ -400,7 +391,7 @@ class vxlan(Addon, moduleBase): local = IPv4Address(local) except AddressValueError: try: - local_ip = IPv4Network(local, strict=False).network_address + local_ip = IPv4Network(local).ip self.logger.warning("%s: vxlan-local-tunnelip %s: netmask ignored" % (ifname, local)) local = local_ip except: @@ -481,7 +472,7 @@ class vxlan(Addon, moduleBase): group = IPv4Address(group) except AddressValueError: try: - group_ip = IPv4Network(group, strict=False).network_address + group_ip = IPv4Network(group).ip self.logger.warning("%s: vxlan-svcnodeip %s: netmask ignored" % (ifname, group)) group = group_ip except: @@ -501,7 +492,7 @@ class vxlan(Addon, moduleBase): mcast_grp = IPv4Address(mcast_grp) except AddressValueError: try: - group_ip = IPv4Network(mcast_grp, strict=False).network_address + group_ip = IPv4Network(mcast_grp).ip self.logger.warning("%s: vxlan-mcastgrp %s: netmask ignored" % (ifname, mcast_grp)) mcast_grp = group_ip except: diff --git a/ifupdown2/ifupdown/ifupdownmain.py b/ifupdown2/ifupdown/ifupdownmain.py index b75cfde..a51d97f 100644 --- a/ifupdown2/ifupdown/ifupdownmain.py +++ b/ifupdown2/ifupdown/ifupdownmain.py @@ -15,14 +15,7 @@ import pprint from collections import OrderedDict -from ipaddress import ip_network, ip_address, IPv4Network, IPv6Network, IPv4Address, IPv6Address - -def IPNetwork(ip): - return ip_network(ip, False) - -def IPAddress(ip): - return ip_address(ip) - +from ipaddr import IPNetwork, IPv4Network, IPv6Network, IPAddress, IPv4Address, IPv6Address try: import ifupdown2.lib.nlcache as nlcache @@ -892,25 +885,17 @@ class ifupdownMain: self.logger.debug('keyword: check list: %s' % str(e)) return False - @staticmethod - def validate_ipv4network(value): - return IPv4Network(value, strict=False) - - @staticmethod - def validate_ipv6network(value): - return IPv6Network(value, strict=False) - def _keyword_ipv4(self, value, validrange=None): return self._keyword_check_list(value.split(), IPv4Address, limit=1) def _keyword_ipv4_prefixlen(self, value, validrange=None): - return self._keyword_check_list(value.split(), self.validate_ipv4network, limit=1) + return self._keyword_check_list(value.split(), IPv4Network, limit=1) def _keyword_ipv6(self, value, validrange=None): return self._keyword_check_list(value.split(), IPv6Address, limit=1) def _keyword_ipv6_prefixlen(self, value, validrange=None): - return self._keyword_check_list(value.split(), self.validate_ipv6network, limit=1) + return self._keyword_check_list(value.split(), IPv6Network, limit=1) def _keyword_ip(self, value, validrange=None): return self._keyword_check_list(value.split(), IPAddress, limit=1) diff --git a/ifupdown2/ifupdown/utils.py b/ifupdown2/ifupdown/utils.py index 1097799..e519636 100644 --- a/ifupdown2/ifupdown/utils.py +++ b/ifupdown2/ifupdown/utils.py @@ -16,14 +16,7 @@ import logging import subprocess from functools import partial -from ipaddress import ip_network, ip_address - -def IPNetwork(ip): - return ip_network(ip, False) - -def IPAddress(ip): - return ip_address(ip) - +from ipaddr import IPNetwork, IPAddress try: from ifupdown2.ifupdown.iface import * diff --git a/ifupdown2/lib/iproute2.py b/ifupdown2/lib/iproute2.py index cfbd12a..89d13c5 100644 --- a/ifupdown2/lib/iproute2.py +++ b/ifupdown2/lib/iproute2.py @@ -27,10 +27,7 @@ import shlex import signal import subprocess -from ipaddress import ip_network - -def IPNetwork(ip): - return ip_network(ip, False) +from ipaddr import IPNetwork try: from ifupdown2.lib.sysfs import Sysfs diff --git a/ifupdown2/lib/nlcache.py b/ifupdown2/lib/nlcache.py index 8814e36..26a9fa3 100644 --- a/ifupdown2/lib/nlcache.py +++ b/ifupdown2/lib/nlcache.py @@ -33,11 +33,7 @@ import logging import threading import traceback -from ipaddress import ip_network - -def IPNetwork(ip): - return ip_network(ip, False) - +from ipaddr import IPNetwork from logging import DEBUG, WARNING from collections import OrderedDict diff --git a/ifupdown2/nlmanager/nlmanager.py b/ifupdown2/nlmanager/nlmanager.py index 9320fa3..be11e44 100644 --- a/ifupdown2/nlmanager/nlmanager.py +++ b/ifupdown2/nlmanager/nlmanager.py @@ -26,7 +26,7 @@ # from collections import OrderedDict -from ipaddress import IPv4Address, IPv6Address +from ipaddr import IPv4Address, IPv6Address from .nlpacket import * from select import select from struct import pack, unpack diff --git a/ifupdown2/nlmanager/nlpacket.py b/ifupdown2/nlmanager/nlpacket.py index c36d2ea..c2c4933 100644 --- a/ifupdown2/nlmanager/nlpacket.py +++ b/ifupdown2/nlmanager/nlpacket.py @@ -31,16 +31,7 @@ import socket import logging import struct - -from ipaddress import ip_network, ip_address, IPv4Address, IPv6Address - -def IPNetwork(ip): - return ip_network(ip, False) - -def IPAddress(ip): - return ip_address(ip) - - +from ipaddr import IPNetwork, IPv4Address, IPv6Address, IPAddress from binascii import hexlify from pprint import pformat from socket import AF_UNSPEC, AF_INET, AF_INET6, AF_BRIDGE, htons @@ -1340,6 +1331,8 @@ class AttributeIPAddress(Attribute): def __init__(self, atype, string, family, logger): Attribute.__init__(self, atype, string, logger) + self.value_int = None + self.value_int_str = None self.family = family if self.family == AF_INET: @@ -1383,8 +1376,14 @@ class AttributeIPAddress(Attribute): self.value = IPNetwork('%s/%s' % (self.value, parent_msg.prefixlen)) except AttributeError: self.value = IPNetwork('%s' % self.value) + + self.value_int = int(self.value) + self.value_int_str = str(self.value_int) + except struct.error: self.value = None + self.value_int = None + self.value_int_str = None self.log.error("%s unpack of %s failed, data 0x%s" % (self, self.PACK, hexlify(self.data[4:]))) raise @@ -1394,11 +1393,7 @@ class AttributeIPAddress(Attribute): if self.family not in [AF_INET, AF_INET6, AF_BRIDGE]: raise Exception("%s is not a supported address family" % self.family) - try: - raw = pack(self.HEADER_PACK, length, self.atype) + self.value.network_address.packed - except: - raw = pack(self.HEADER_PACK, length, self.atype) + self.value.packed - + raw = pack(self.HEADER_PACK, length, self.atype) + self.value.packed raw = self.pad(length, raw) return raw