diff options
author | Paul Vinciguerra <pvinci@vinciconsulting.com> | 2019-01-29 11:51:44 -0800 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-02-01 08:51:59 +0000 |
commit | 9e315958d6c9654a988439ae463b1a85cd03bebb (patch) | |
tree | 523bd5314193568a3e2aeca29d92b0bba695a1fb | |
parent | f646d74392490cf162a615badb92f62b573c694d (diff) |
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>
-rw-r--r-- | test/hook.py | 5 | ||||
-rw-r--r-- | test/vpp_ip.py | 10 |
2 files changed, 12 insertions, 3 deletions
diff --git a/test/hook.py b/test/hook.py index a8f37c7a35b..64fc076c1a0 100644 --- a/test/hook.py +++ b/test/hook.py @@ -6,6 +6,10 @@ from log import RED, single_line_delim, double_line_delim 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 @@ class Hook(object): 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 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.') |