summaryrefslogtreecommitdiff
path: root/python/vyos/validate.py
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2020-03-31 22:14:25 +0200
committerChristian Poessinger <christian@poessinger.com>2020-03-31 22:14:25 +0200
commit18c7ed34520a806de26316370ed9938e733e090e (patch)
treedde8eda06db206de784137b092c3286734cf67ac /python/vyos/validate.py
parent292d65031878ad70ae996b2de16a5228bff69b72 (diff)
downloadvyos-1x-18c7ed34520a806de26316370ed9938e733e090e.tar.gz
vyos-1x-18c7ed34520a806de26316370ed9938e733e090e.zip
Revert "validate: T2182: IPv6 are not normalised when compared"
This reverts commit e2f80e57d9895d207edf0ad92c299dc7862087d6. Due to failing smoketests this commit is reverted.
Diffstat (limited to 'python/vyos/validate.py')
-rw-r--r--python/vyos/validate.py32
1 files changed, 14 insertions, 18 deletions
diff --git a/python/vyos/validate.py b/python/vyos/validate.py
index b110a62fa..0e6d34e7e 100644
--- a/python/vyos/validate.py
+++ b/python/vyos/validate.py
@@ -13,7 +13,6 @@
# You should have received a copy of the GNU Lesser General Public
# License along with this library. If not, see <http://www.gnu.org/licenses/>.
-import socket
import netifaces
import ipaddress
@@ -84,8 +83,6 @@ def is_intf_addr_assigned(intf, addr):
print(e)
return False
- addr_host, addr_mask = addr.split('/')
-
if addr_type in netifaces.ifaddresses(intf).keys():
# Check every IP address on this interface for a match
for ip in netifaces.ifaddresses(intf)[addr_type]:
@@ -95,24 +92,23 @@ def is_intf_addr_assigned(intf, addr):
if r'/' in addr:
prefixlen = ''
if is_ipv6(addr):
- # Note that currently expanded netmasks are not supported. That means
- # 2001:db00::0/24 is a valid argument while 2001:db00::0/ffff:ff00:: not.
- # see https://docs.python.org/3/library/ipaddress.html
- bits = bin( int(ip['netmask'].replace(':',''), 16) ).count('1')
- prefixlen = str(bits)
- else:
- prefixlen = str(ipaddress.IPv4Network('0.0.0.0/' + ip['netmask']).prefixlen)
+ # Note that currently expanded netmasks are not supported. That means
+ # 2001:db00::0/24 is a valid argument while 2001:db00::0/ffff:ff00:: not.
+ # see https://docs.python.org/3/library/ipaddress.html
+ bits = bin( int(ip['netmask'].replace(':',''), 16) ).count('1')
+ prefixlen = '/' + str(bits)
- # the netmask are different
- if prefixlen != addr_mask:
- continue
+ else:
+ prefixlen = '/' + str(ipaddress.IPv4Network('0.0.0.0/' + ip['netmask']).prefixlen)
- addr_af = socket.AF_INET if is_ipv4(addr_host) else socket.AF_INET6
- ip_af = socket.AF_INET if is_ipv4(ip['addr']) else socket.AF_INET6
+ # construct temporary variable holding IPv6 address and netmask
+ # in CIDR notation
+ tmp = ip['addr'] + prefixlen
+ if addr == tmp:
+ return True
- # compare the binary representation of the IP
- if socket.inet_pton(addr_af, addr_host) == socket.inet_pton(ip_af, ip['addr']):
- return True
+ elif ip['addr'] == addr:
+ return True
return False