2/3 fixes for ip address and mac byte handling

This commit is contained in:
Blake Harnden 2019-06-03 11:49:43 -07:00
parent db9d13aff8
commit bb5e68ad8b
4 changed files with 10 additions and 25 deletions

View file

@ -276,8 +276,6 @@ class CoreTlvDataIpv4Addr(CoreTlvDataObj):
:return: Ipv4 address :return: Ipv4 address
:rtype: core.misc.ipaddress.IpAddress :rtype: core.misc.ipaddress.IpAddress
""" """
# value = value.decode("ISO-8859-1")
# value = socket.inet_ntoa(value)
return IpAddress(af=socket.AF_INET, address=value) return IpAddress(af=socket.AF_INET, address=value)
@ -308,8 +306,6 @@ class CoreTlvDataIPv6Addr(CoreTlvDataObj):
:return: Ipv4 address :return: Ipv4 address
:rtype: core.misc.ipaddress.IpAddress :rtype: core.misc.ipaddress.IpAddress
""" """
# value = value.decode("ISO-8859-1")
# value = socket.inet_ntoa(value)
return IpAddress(af=socket.AF_INET6, address=value) return IpAddress(af=socket.AF_INET6, address=value)
@ -342,8 +338,6 @@ class CoreTlvDataMacAddr(CoreTlvDataObj):
:rtype: core.misc.ipaddress.MacAddress :rtype: core.misc.ipaddress.MacAddress
""" """
# only use 48 bits # only use 48 bits
# value = value.decode("ISO-8859-1")
# value = socket.inet_ntoa(value)
return MacAddress(address=value[2:]) return MacAddress(address=value[2:])

View file

@ -1063,13 +1063,11 @@ class CoreNetworkBase(NodeBase):
if ipaddress.is_ipv4_address(ip): if ipaddress.is_ipv4_address(ip):
family = AF_INET family = AF_INET
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface2_ip4 = ipaddress.IpAddress(af=family, address=ipl) interface2_ip4 = ipaddress.IpAddress(af=family, address=ipl)
interface2_ip4_mask = mask interface2_ip4_mask = mask
else: else:
family = AF_INET6 family = AF_INET6
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface2_ip6 = ipaddress.IpAddress(af=family, address=ipl) interface2_ip6 = ipaddress.IpAddress(af=family, address=ipl)
interface2_ip6_mask = mask interface2_ip6_mask = mask

View file

@ -6,6 +6,7 @@ import logging
import random import random
import socket import socket
import struct import struct
from builtins import bytes
from builtins import range from builtins import range
from socket import AF_INET from socket import AF_INET
from socket import AF_INET6 from socket import AF_INET6
@ -31,9 +32,7 @@ class MacAddress(object):
:return: string representation :return: string representation
:rtype: str :rtype: str
""" """
logging.info("mac addr: %s", type(self.addr)) return ":".join("%02x" % x for x in bytearray(self.addr))
addr = self.addr.decode("ISO-8859-1")
return ":".join("%02x" % ord(x) for x in addr)
def to_link_local(self): def to_link_local(self):
""" """
@ -63,7 +62,7 @@ class MacAddress(object):
:return: mac address class :return: mac address class
:rtype: MacAddress :rtype: MacAddress
""" """
addr = "".join(chr(int(x, 16)) for x in s.split(":")) addr = b"".join(bytes([int(x, 16)]) for x in s.split(":"))
return cls(addr) return cls(addr)
@classmethod @classmethod
@ -95,9 +94,7 @@ class IpAddress(object):
:return: :return:
""" """
# check if (af, addr) is valid # check if (af, addr) is valid
logging.info("ip address: %s", type(address))
if not socket.inet_ntop(af, address): if not socket.inet_ntop(af, address):
# if not socket.inet_ntop(af, address.encode("ISO-8859-1")):
raise ValueError("invalid af/addr") raise ValueError("invalid af/addr")
self.af = af self.af = af
self.addr = address self.addr = address
@ -128,7 +125,6 @@ class IpAddress(object):
:rtype: str :rtype: str
""" """
return socket.inet_ntop(self.af, self.addr) return socket.inet_ntop(self.af, self.addr)
# return socket.inet_ntop(self.af, self.addr.encode("ISO-8859-1"))
def __eq__(self, other): def __eq__(self, other):
""" """
@ -159,14 +155,14 @@ class IpAddress(object):
logging.exception("error during addition") logging.exception("error during addition")
return NotImplemented return NotImplemented
tmp = [ord(x) for x in self.addr] tmp = [x for x in bytearray(self.addr)]
for i in range(len(tmp) - 1, -1, -1): for i in range(len(tmp) - 1, -1, -1):
x = tmp[i] + carry x = tmp[i] + carry
tmp[i] = x & 0xff tmp[i] = x & 0xff
carry = x >> 8 carry = x >> 8
if carry == 0: if carry == 0:
break break
addr = "".join(chr(x) for x in tmp) addr = bytes(tmp)
return self.__class__(self.af, addr) return self.__class__(self.af, addr)
def __sub__(self, other): def __sub__(self, other):
@ -237,12 +233,13 @@ class IpPrefix(object):
else: else:
self.prefixlen = self.addrlen self.prefixlen = self.addrlen
self.prefix = socket.inet_pton(self.af, tmp[0]) self.prefix = socket.inet_pton(self.af, tmp[0])
self.prefix = bytes(self.prefix)
if self.addrlen > self.prefixlen: if self.addrlen > self.prefixlen:
addrbits = self.addrlen - self.prefixlen addrbits = self.addrlen - self.prefixlen
netmask = ((1 << self.prefixlen) - 1) << addrbits netmask = ((1 << self.prefixlen) - 1) << addrbits
prefix = "" prefix = bytes(b"")
for i in range(-1, -(addrbits >> 3) - 2, -1): for i in range(-1, -(addrbits >> 3) - 2, -1):
prefix = chr(ord(self.prefix[i]) & (netmask & 0xff)) + prefix prefix = bytes([self.prefix[i] & (netmask & 0xff)]) + prefix
netmask >>= 8 netmask >>= 8
self.prefix = self.prefix[:i] + prefix self.prefix = self.prefix[:i] + prefix
@ -323,11 +320,11 @@ class IpPrefix(object):
self.af == AF_INET and tmp == (1 << (self.addrlen - self.prefixlen)) - 1): self.af == AF_INET and tmp == (1 << (self.addrlen - self.prefixlen)) - 1):
raise ValueError("invalid hostid for prefix %s: %s" % (self, hostid)) raise ValueError("invalid hostid for prefix %s: %s" % (self, hostid))
addr = "" addr = bytes(b"")
prefix_endpoint = -1 prefix_endpoint = -1
for i in range(-1, -(self.addrlen >> 3) - 1, -1): for i in range(-1, -(self.addrlen >> 3) - 1, -1):
prefix_endpoint = i prefix_endpoint = i
addr = chr(ord(self.prefix[i]) | (tmp & 0xff)) + addr addr = bytes([self.prefix[i] | (tmp & 0xff)]) + addr
tmp >>= 8 tmp >>= 8
if not tmp: if not tmp:
break break

View file

@ -855,13 +855,11 @@ class PtpNet(CoreNetwork):
if ipaddress.is_ipv4_address(ip): if ipaddress.is_ipv4_address(ip):
family = AF_INET family = AF_INET
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface1_ip4 = ipaddress.IpAddress(af=family, address=ipl) interface1_ip4 = ipaddress.IpAddress(af=family, address=ipl)
interface1_ip4_mask = mask interface1_ip4_mask = mask
else: else:
family = AF_INET6 family = AF_INET6
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface1_ip6 = ipaddress.IpAddress(af=family, address=ipl) interface1_ip6 = ipaddress.IpAddress(af=family, address=ipl)
interface1_ip6_mask = mask interface1_ip6_mask = mask
@ -875,13 +873,11 @@ class PtpNet(CoreNetwork):
if ipaddress.is_ipv4_address(ip): if ipaddress.is_ipv4_address(ip):
family = AF_INET family = AF_INET
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface2_ip4 = ipaddress.IpAddress(af=family, address=ipl) interface2_ip4 = ipaddress.IpAddress(af=family, address=ipl)
interface2_ip4_mask = mask interface2_ip4_mask = mask
else: else:
family = AF_INET6 family = AF_INET6
ipl = socket.inet_pton(family, ip) ipl = socket.inet_pton(family, ip)
# ipl = ipl.decode("ISO-8859-1")
interface2_ip6 = ipaddress.IpAddress(af=family, address=ipl) interface2_ip6 = ipaddress.IpAddress(af=family, address=ipl)
interface2_ip6_mask = mask interface2_ip6_mask = mask