2/3 fixes for ip address and mac byte handling
This commit is contained in:
parent
db9d13aff8
commit
bb5e68ad8b
4 changed files with 10 additions and 25 deletions
|
@ -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:])
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue