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 <pvinci@vinciconsulting.com>
diff --git a/test/hook.py b/test/hook.py
index a8f37c7..64fc076 100644
--- a/test/hook.py
+++ b/test/hook.py
@@ -6,6 +6,10 @@
import ipaddress
from subprocess import check_output, CalledProcessError
from util import check_core_path, get_core_path
+try:
+ text_type = unicode
+except NameError:
+ text_type = str
class Hook(object):
@@ -32,6 +36,7 @@
return '{!s} ({!s})'.format(val, ':'.join(['{:02x}'.format(
ord(x)) for x in val]))
try:
+ # we don't call test_type(val) because it is a packed value.
return '{!s} ({!s})'.format(val, str(
ipaddress.ip_address(val)))
except ipaddress.AddressValueError:
diff --git a/test/vpp_ip.py b/test/vpp_ip.py
index fe985fb..8b7ea22 100644
--- a/test/vpp_ip.py
+++ b/test/vpp_ip.py
@@ -7,6 +7,10 @@
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 @@
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 @@
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.')