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

View file

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

View file

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

View file

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