From 9e315958d6c9654a988439ae463b1a85cd03bebb Mon Sep 17 00:00:00 2001 From: Paul Vinciguerra Date: Tue, 29 Jan 2019 11:51:44 -0800 Subject: VTL: Fix issue with ipaddress library use under python2. If you pass in a non-unicode 4-byte ipv6 address to ip_address, ipaddress interprets this as an IPv4Address. Under python2, ip_address interprets 'a7::' as a packed ipv4: 97.55.58.58 You can test with: --- import ipaddress try: text_type = unicode except NameError: text_type = str addr = ipaddress.ip_address('a7::') print(addr) --- Change-Id: I06c561e0ab7315869cc89d0bb08c05e743a90982 Signed-off-by: Paul Vinciguerra --- test/vpp_ip.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'test/vpp_ip.py') diff --git a/test/vpp_ip.py b/test/vpp_ip.py index fe985fb901c..8b7ea222a67 100644 --- a/test/vpp_ip.py +++ b/test/vpp_ip.py @@ -7,6 +7,10 @@ import logging from ipaddress import ip_address from socket import AF_INET, AF_INET6 from vpp_papi import VppEnum +try: + text_type = unicode +except NameError: + text_type = str _log = logging.getLogger(__name__) @@ -26,7 +30,7 @@ INVALID_INDEX = 0xffffffff class VppIpAddressUnion(): def __init__(self, addr): self.addr = addr - self.ip_addr = ip_address(unicode(self.addr)) + self.ip_addr = ip_address(text_type(self.addr)) def encode(self): if self.version == 6: @@ -191,8 +195,8 @@ class VppIpMPrefix(): self.saddr = saddr self.gaddr = gaddr self.len = len - self.ip_saddr = ip_address(unicode(self.saddr)) - self.ip_gaddr = ip_address(unicode(self.gaddr)) + self.ip_saddr = ip_address(text_type(self.saddr)) + self.ip_gaddr = ip_address(text_type(self.gaddr)) if self.ip_saddr.version != self.ip_gaddr.version: raise ValueError('Source and group addresses must be of the ' 'same address family.') -- cgit 1.2.3-korg