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>
This commit is contained in:
committed by
Ole Trøan
parent
f646d74392
commit
9e315958d6
@@ -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:
|
||||
|
||||
+7
-3
@@ -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.')
|
||||
|
||||
Reference in New Issue
Block a user