summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYAMAMOTO Takashi <yamamoto@valinux.co.jp>2013-08-01 13:54:57 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2013-08-01 14:25:41 +0900
commitc14a4182d3bda7374e579ba4ee7cf78770b9b9b0 (patch)
tree23cec21f8c852a9c324af8a27734b1c0ab8a68ac
parent84236ab88df5d1a11b369308ad752365f04cacd1 (diff)
packet lib: change the api to use text addresses
for example: >>> from ryu.lib.packet.ipv4 import ipv4 >>> o = ipv4(src='127.0.0.1') >>> o.src '127.0.0.1' >>> i left lldp TLVs as they seem to be treated opaque. for now, i don't change mac.DONTCARE and mac.BROADCAST because they are used by the ofproto world as well. Signed-off-by: YAMAMOTO Takashi <yamamoto@valinux.co.jp> Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r--ryu/lib/mac.py6
-rw-r--r--ryu/lib/packet/arp.py24
-rw-r--r--ryu/lib/packet/bpdu.py16
-rw-r--r--ryu/lib/packet/ethernet.py9
-rw-r--r--ryu/lib/packet/icmpv6.py12
-rw-r--r--ryu/lib/packet/ipv4.py14
-rw-r--r--ryu/lib/packet/ipv6.py7
-rw-r--r--ryu/lib/packet/lldp.py6
-rw-r--r--ryu/lib/packet/packet_utils.py9
-rwxr-xr-xryu/lib/packet/slow.py23
-rw-r--r--ryu/lib/packet/vrrp.py53
-rw-r--r--ryu/tests/unit/packet/test_arp.py26
-rw-r--r--ryu/tests/unit/packet/test_ethernet.py14
-rw-r--r--ryu/tests/unit/packet/test_icmpv6.py36
-rw-r--r--ryu/tests/unit/packet/test_ipv4.py15
-rw-r--r--ryu/tests/unit/packet/test_lldp.py11
-rw-r--r--ryu/tests/unit/packet/test_packet.py43
-rwxr-xr-xryu/tests/unit/packet/test_slow.py18
-rw-r--r--ryu/tests/unit/packet/test_tcp.py16
-rw-r--r--ryu/tests/unit/packet/test_udp.py12
-rw-r--r--ryu/tests/unit/packet/test_vlan.py10
-rw-r--r--ryu/tests/unit/packet/test_vrrp.py51
22 files changed, 242 insertions, 189 deletions
diff --git a/ryu/lib/mac.py b/ryu/lib/mac.py
index ad10672d..d7ec7d94 100644
--- a/ryu/lib/mac.py
+++ b/ryu/lib/mac.py
@@ -23,8 +23,10 @@ HADDR_PATTERN = r'([0-9a-f]{2}:){5}[0-9a-f]{2}'
DONTCARE = '\x00' * 6
BROADCAST = '\xff' * 6
-MULTICAST = '\xfe' + '\xff' * 5
-UNICAST = '\x01' + '\x00' * 5
+DONTCARE_STR = '00:00:00:00:00:00'
+BROADCAST_STR = 'ff:ff:ff:ff:ff:ff'
+MULTICAST = 'fe:ff:ff:ff:ff:ff'
+UNICAST = '01:00:00:00:00:00'
def is_multicast(addr):
diff --git a/ryu/lib/packet/arp.py b/ryu/lib/packet/arp.py
index 616ab86b..2edb0282 100644
--- a/ryu/lib/packet/arp.py
+++ b/ryu/lib/packet/arp.py
@@ -16,8 +16,7 @@
import struct
from ryu.ofproto import ether
-from ryu.lib import ip
-from ryu.lib import mac
+from ryu.lib import addrconv
from . import packet_base
ARP_HW_TYPE_ETHERNET = 1 # ethernet hardware type
@@ -56,10 +55,10 @@ class arp(packet_base.PacketBase):
def __init__(self, hwtype=ARP_HW_TYPE_ETHERNET, proto=ether.ETH_TYPE_IP,
hlen=6, plen=4, opcode=ARP_REQUEST,
- src_mac=mac.haddr_to_bin('ff:ff:ff:ff:ff:ff'),
- src_ip=ip.ipv4_to_bin('0.0.0.0'),
- dst_mac=mac.haddr_to_bin('ff:ff:ff:ff:ff:ff'),
- dst_ip=ip.ipv4_to_bin('0.0.0.0')):
+ src_mac='ff:ff:ff:ff:ff:ff',
+ src_ip='0.0.0.0',
+ dst_mac='ff:ff:ff:ff:ff:ff',
+ dst_ip='0.0.0.0'):
super(arp, self).__init__()
self.hwtype = hwtype
self.proto = proto
@@ -75,14 +74,19 @@ class arp(packet_base.PacketBase):
def parser(cls, buf):
(hwtype, proto, hlen, plen, opcode, src_mac, src_ip,
dst_mac, dst_ip) = struct.unpack_from(cls._PACK_STR, buf)
- return cls(hwtype, proto, hlen, plen, opcode, src_mac, src_ip,
- dst_mac, dst_ip), None, buf[arp._MIN_LEN:]
+ return cls(hwtype, proto, hlen, plen, opcode,
+ addrconv.mac.bin_to_text(src_mac),
+ addrconv.ipv4.bin_to_text(src_ip),
+ addrconv.mac.bin_to_text(dst_mac),
+ addrconv.ipv4.bin_to_text(dst_ip)), None, buf[arp._MIN_LEN:]
def serialize(self, payload, prev):
return struct.pack(arp._PACK_STR, self.hwtype, self.proto,
self.hlen, self.plen, self.opcode,
- self.src_mac, self.src_ip, self.dst_mac,
- self.dst_ip)
+ addrconv.mac.text_to_bin(self.src_mac),
+ addrconv.ipv4.text_to_bin(self.src_ip),
+ addrconv.mac.text_to_bin(self.dst_mac),
+ addrconv.ipv4.text_to_bin(self.dst_ip))
def arp_ip(opcode, src_mac, src_ip, dst_mac, dst_ip):
diff --git a/ryu/lib/packet/bpdu.py b/ryu/lib/packet/bpdu.py
index 8e31771b..89253eaa 100644
--- a/ryu/lib/packet/bpdu.py
+++ b/ryu/lib/packet/bpdu.py
@@ -130,7 +130,7 @@ Rapid Spanning Tree BPDUs(RST BPDUs) format
import binascii
import struct
from . import packet_base
-from ryu.lib.mac import haddr_to_bin
+from ryu.lib import addrconv
# BPDU destination
@@ -243,10 +243,10 @@ class ConfigurationBPDUs(bpdu):
def __init__(self, flags=0, root_priority=DEFAULT_BRIDGE_PRIORITY,
root_system_id_extension=0,
- root_mac_address=haddr_to_bin('00:00:00:00:00:00'),
+ root_mac_address='00:00:00:00:00:00',
root_path_cost=0, bridge_priority=DEFAULT_BRIDGE_PRIORITY,
bridge_system_id_extension=0,
- bridge_mac_address=haddr_to_bin('00:00:00:00:00:00'),
+ bridge_mac_address='00:00:00:00:00:00',
port_priority=DEFAULT_PORT_PRIORITY, port_number=0,
message_age=0, max_age=DEFAULT_MAX_AGE,
hello_time=DEFAULT_HELLO_TIME,
@@ -336,13 +336,15 @@ class ConfigurationBPDUs(bpdu):
mac_addr_list = [format((mac_addr >> (8 * i)) & 0xff, '02x')
for i in range(0, 6)]
mac_addr_list.reverse()
- mac_address = binascii.a2b_hex(''.join(mac_addr_list))
+ mac_address_bin = binascii.a2b_hex(''.join(mac_addr_list))
+ mac_address = addrconv.mac.bin_to_text(mac_address_bin)
return priority, system_id_extension, mac_address
@staticmethod
def encode_bridge_id(priority, system_id_extension, mac_address):
- mac_addr = int(binascii.hexlify(mac_address), 16)
+ mac_addr = int(binascii.hexlify(addrconv.mac.text_to_bin(mac_address)),
+ 16)
return ((priority + system_id_extension) << 48) + mac_addr
@staticmethod
@@ -429,10 +431,10 @@ class RstBPDUs(ConfigurationBPDUs):
def __init__(self, flags=0, root_priority=DEFAULT_BRIDGE_PRIORITY,
root_system_id_extension=0,
- root_mac_address=haddr_to_bin('00:00:00:00:00:00'),
+ root_mac_address='00:00:00:00:00:00',
root_path_cost=0, bridge_priority=DEFAULT_BRIDGE_PRIORITY,
bridge_system_id_extension=0,
- bridge_mac_address=haddr_to_bin('00:00:00:00:00:00'),
+ bridge_mac_address='00:00:00:00:00:00',
port_priority=DEFAULT_PORT_PRIORITY, port_number=0,
message_age=0, max_age=DEFAULT_MAX_AGE,
hello_time=DEFAULT_HELLO_TIME,
diff --git a/ryu/lib/packet/ethernet.py b/ryu/lib/packet/ethernet.py
index 83cc1d63..0ca77d8b 100644
--- a/ryu/lib/packet/ethernet.py
+++ b/ryu/lib/packet/ethernet.py
@@ -18,6 +18,7 @@ from . import packet_base
from . import vlan
from . import mpls
from ryu.ofproto import ether
+from ryu.lib import addrconv
class ethernet(packet_base.PacketBase):
@@ -47,11 +48,15 @@ class ethernet(packet_base.PacketBase):
@classmethod
def parser(cls, buf):
dst, src, ethertype = struct.unpack_from(cls._PACK_STR, buf)
- return (cls(dst, src, ethertype), ethernet.get_packet_type(ethertype),
+ return (cls(addrconv.mac.bin_to_text(dst),
+ addrconv.mac.bin_to_text(src), ethertype),
+ ethernet.get_packet_type(ethertype),
buf[ethernet._MIN_LEN:])
def serialize(self, payload, prev):
- return struct.pack(ethernet._PACK_STR, self.dst, self.src,
+ return struct.pack(ethernet._PACK_STR,
+ addrconv.mac.text_to_bin(self.dst),
+ addrconv.mac.text_to_bin(self.src),
self.ethertype)
@classmethod
diff --git a/ryu/lib/packet/icmpv6.py b/ryu/lib/packet/icmpv6.py
index 3419108e..fe16d092 100644
--- a/ryu/lib/packet/icmpv6.py
+++ b/ryu/lib/packet/icmpv6.py
@@ -20,7 +20,7 @@ import binascii
from . import packet_base
from . import packet_utils
-from ryu.lib.mac import haddr_to_bin, haddr_to_str
+from ryu.lib import addrconv
ICMPV6_DST_UNREACH = 1 # dest unreachable, codes:
ICMPV6_PACKET_TOO_BIG = 2 # packet too big
@@ -181,7 +181,7 @@ class nd_neighbor(object):
@classmethod
def parser(cls, buf, offset):
(res, dst) = struct.unpack_from(cls._PACK_STR, buf, offset)
- msg = cls(res >> 29, dst)
+ msg = cls(res >> 29, addrconv.ipv6.bin_to_text(dst))
offset += cls._MIN_LEN
if len(buf) > offset:
(msg.type_, msg.length) = struct.unpack_from('!BB', buf, offset)
@@ -195,7 +195,8 @@ class nd_neighbor(object):
return msg
def serialize(self):
- hdr = bytearray(struct.pack(nd_neighbor._PACK_STR, self.res, self.dst))
+ hdr = bytearray(struct.pack(nd_neighbor._PACK_STR, self.res,
+ addrconv.ipv6.text_to_bin(self.dst)))
if self.type_ is not None:
hdr += bytearray(struct.pack('!BB', self.type_, self.length))
@@ -244,7 +245,7 @@ class nd_option_la(object):
@classmethod
def parser(cls, buf, offset):
(hw_src, ) = struct.unpack_from(cls._PACK_STR, buf, offset)
- msg = cls(hw_src)
+ msg = cls(addrconv.mac.bin_to_text(hw_src))
offset += cls._MIN_LEN
if len(buf) > offset:
msg.data = buf[offset:]
@@ -252,7 +253,8 @@ class nd_option_la(object):
return msg
def serialize(self):
- hdr = bytearray(struct.pack(self._PACK_STR, self.hw_src))
+ hdr = bytearray(struct.pack(self._PACK_STR,
+ addrconv.mac.text_to_bin(self.hw_src)))
if self.data is not None:
hdr += bytearray(self.data)
diff --git a/ryu/lib/packet/ipv4.py b/ryu/lib/packet/ipv4.py
index 16b46980..d80c8497 100644
--- a/ryu/lib/packet/ipv4.py
+++ b/ryu/lib/packet/ipv4.py
@@ -21,7 +21,7 @@ from . import icmp
from . import udp
from . import tcp
from ryu.ofproto import inet
-from ryu.lib import ip
+from ryu.lib import addrconv
IPV4_ADDRESS_PACK_STR = '!I'
@@ -68,8 +68,8 @@ class ipv4(packet_base.PacketBase):
def __init__(self, version=4, header_length=5, tos=0,
total_length=0, identification=0, flags=0,
offset=0, ttl=255, proto=0, csum=0,
- src=ip.ipv4_to_bin('0.0.0.0'),
- dst=ip.ipv4_to_bin('0.0.0.0'),
+ src='0.0.0.0',
+ dst='0.0.0.0',
option=None):
super(ipv4, self).__init__()
self.version = version
@@ -103,7 +103,9 @@ class ipv4(packet_base.PacketBase):
else:
option = None
msg = cls(version, header_length, tos, total_length, identification,
- flags, offset, ttl, proto, csum, src, dst, option)
+ flags, offset, ttl, proto, csum,
+ addrconv.ipv4.bin_to_text(src),
+ addrconv.ipv4.bin_to_text(dst), option)
return msg, ipv4.get_packet_type(proto), buf[length:total_length]
@@ -116,7 +118,9 @@ class ipv4(packet_base.PacketBase):
self.total_length = self.header_length * 4 + len(payload)
struct.pack_into(ipv4._PACK_STR, hdr, 0, version, self.tos,
self.total_length, self.identification, flags,
- self.ttl, self.proto, 0, self.src, self.dst)
+ self.ttl, self.proto, 0,
+ addrconv.ipv4.text_to_bin(self.src),
+ addrconv.ipv4.text_to_bin(self.dst))
if self.option:
assert (length - ipv4._MIN_LEN) >= len(self.option)
diff --git a/ryu/lib/packet/ipv6.py b/ryu/lib/packet/ipv6.py
index 707a3dd6..f2393ef7 100644
--- a/ryu/lib/packet/ipv6.py
+++ b/ryu/lib/packet/ipv6.py
@@ -20,6 +20,7 @@ from . import packet_utils
from . import icmpv6
from . import tcp
from ryu.ofproto import inet
+from ryu.lib import addrconv
IPV6_ADDRESS_PACK_STR = '!16s'
@@ -73,7 +74,8 @@ class ipv6(packet_base.PacketBase):
flow_label = v_tc_flow & 0xfffff
hop_limit = hlim
msg = cls(version, traffic_class, flow_label, payload_length,
- nxt, hop_limit, src, dst)
+ nxt, hop_limit, addrconv.ipv6.bin_to_text(src),
+ addrconv.ipv6.bin_to_text(dst))
return msg, ipv6.get_packet_type(nxt), buf[cls._MIN_LEN:payload_length]
def serialize(self, payload, prev):
@@ -82,7 +84,8 @@ class ipv6(packet_base.PacketBase):
self.flow_label << 12)
struct.pack_into(ipv6._PACK_STR, hdr, 0, v_tc_flow,
self.payload_length, self.nxt, self.hop_limit,
- self.src, self.dst)
+ addrconv.ipv6.text_to_bin(self.src),
+ addrconv.ipv6.text_to_bin(self.dst))
return hdr
ipv6.register_packet_type(icmpv6.icmpv6, inet.IPPROTO_ICMPV6)
diff --git a/ryu/lib/packet/lldp.py b/ryu/lib/packet/lldp.py
index 0c6dc03e..b668f660 100644
--- a/ryu/lib/packet/lldp.py
+++ b/ryu/lib/packet/lldp.py
@@ -45,9 +45,9 @@ from ryu.lib.packet import packet_base
# LLDP destination MAC address
-LLDP_MAC_NEAREST_BRIDGE = '\x01\x80\xc2\x00\x00\x0e'
-LLDP_MAC_NEAREST_NON_TPMR_BRIDGE = '\x01\x80\xc2\x00\x00\x03'
-LLDP_MAC_NEAREST_CUSTOMER_BRIDGE = '\x01\x80\xc2\x00\x00\x00'
+LLDP_MAC_NEAREST_BRIDGE = '01:80:c2:00:00:0e'
+LLDP_MAC_NEAREST_NON_TPMR_BRIDGE = '01:80:c2:00:00:03'
+LLDP_MAC_NEAREST_CUSTOMER_BRIDGE = '01:80:c2:00:00:00'
LLDP_TLV_TYPELEN_STR = '!H'
diff --git a/ryu/lib/packet/packet_utils.py b/ryu/lib/packet/packet_utils.py
index 0052335a..9331472a 100644
--- a/ryu/lib/packet/packet_utils.py
+++ b/ryu/lib/packet/packet_utils.py
@@ -16,6 +16,7 @@
import array
import socket
import struct
+from ryu.lib import addrconv
def carry_around_add(a, b):
@@ -83,10 +84,14 @@ def checksum_ip(ipvx, length, payload):
"""
if ipvx.version == 4:
header = struct.pack(_IPV4_PSEUDO_HEADER_PACK_STR,
- ipvx.src, ipvx.dst, ipvx.proto, length)
+ addrconv.ipv4.text_to_bin(ipvx.src),
+ addrconv.ipv4.text_to_bin(ipvx.dst),
+ ipvx.proto, length)
elif ipvx.version == 6:
header = struct.pack(_IPV6_PSEUDO_HEADER_PACK_STR,
- ipvx.src, ipvx.dst, length, ipvx.nxt)
+ addrconv.ipv6.text_to_bin(ipvx.src),
+ addrconv.ipv6.text_to_bin(ipvx.dst),
+ length, ipvx.nxt)
else:
raise ValueError('Unknown IP version %d' % ipvx.version)
diff --git a/ryu/lib/packet/slow.py b/ryu/lib/packet/slow.py
index 7f4870b9..58cfc4c2 100755
--- a/ryu/lib/packet/slow.py
+++ b/ryu/lib/packet/slow.py
@@ -15,10 +15,10 @@
import struct
from . import packet_base
-from ryu.lib import mac
+from ryu.lib import addrconv
# Slow Protocol Multicast destination
-SLOW_PROTOCOL_MULTICAST = '\x01\x80\xc2\x00\x00\x02'
+SLOW_PROTOCOL_MULTICAST = '01:80:c2:00:00:02'
# Slow Protocol SubType
SLOW_SUBTYPE_LACP = 0x01
@@ -368,7 +368,7 @@ class lacp(packet_base.PacketBase):
def __init__(self, version=LACP_VERSION_NUMBER,
actor_system_priority=0,
- actor_system=mac.haddr_to_bin('00:00:00:00:00:00'),
+ actor_system='00:00:00:00:00:00',
actor_key=0, actor_port_priority=0, actor_port=0,
actor_state_activity=0, actor_state_timeout=0,
actor_state_aggregation=0,
@@ -376,7 +376,7 @@ class lacp(packet_base.PacketBase):
actor_state_collecting=0, actor_state_distributing=0,
actor_state_defaulted=0, actor_state_expired=0,
partner_system_priority=0,
- partner_system=mac.haddr_to_bin('00:00:00:00:00:00'),
+ partner_system='00:00:00:00:00:00',
partner_key=0, partner_port_priority=0, partner_port=0,
partner_state_activity=0, partner_state_timeout=0,
partner_state_aggregation=0,
@@ -537,14 +537,17 @@ class lacp(packet_base.PacketBase):
) = struct.unpack_from(cls._TRM_PACK_STR, buf, offset)
assert cls.LACP_TLV_TYPE_TERMINATOR == terminator_tag
assert 0 == terminator_length
- return cls(version, actor_system_priority,
- actor_system, actor_key, actor_port_priority,
+ return cls(version,
+ actor_system_priority,
+ addrconv.mac.bin_to_text(actor_system),
+ actor_key, actor_port_priority,
actor_port, actor_state_activity,
actor_state_timeout, actor_state_aggregation,
actor_state_synchronization, actor_state_collecting,
actor_state_distributing, actor_state_defaulted,
actor_state_expired, partner_system_priority,
- partner_system, partner_key, partner_port_priority,
+ addrconv.mac.bin_to_text(partner_system),
+ partner_key, partner_port_priority,
partner_port, partner_state_activity,
partner_state_timeout, partner_state_aggregation,
partner_state_synchronization,
@@ -558,13 +561,15 @@ class lacp(packet_base.PacketBase):
actor = struct.pack(self._ACTPRT_INFO_PACK_STR,
self.actor_tag, self.actor_length,
self.actor_system_priority,
- self.actor_system, self.actor_key,
+ addrconv.mac.text_to_bin(self.actor_system),
+ self.actor_key,
self.actor_port_priority, self.actor_port,
self.actor_state)
partner = struct.pack(self._ACTPRT_INFO_PACK_STR,
self.partner_tag, self.partner_length,
self.partner_system_priority,
- self.partner_system, self.partner_key,
+ addrconv.mac.text_to_bin(self.partner_system),
+ self.partner_key,
self.partner_port_priority,
self.partner_port, self.partner_state)
collector = struct.pack(self._COL_INFO_PACK_STR,
diff --git a/ryu/lib/packet/vrrp.py b/ryu/lib/packet/vrrp.py
index e79d7584..772d913b 100644
--- a/ryu/lib/packet/vrrp.py
+++ b/ryu/lib/packet/vrrp.py
@@ -67,7 +67,6 @@ VRRP v3 packet format
"""
-import netaddr
import struct
from ryu.lib.packet import ethernet
@@ -79,36 +78,31 @@ from ryu.lib.packet import packet_utils
from ryu.lib.packet import vlan
from ryu.ofproto import ether
from ryu.ofproto import inet
+from ryu.lib import addrconv
# IPv4
# the LSB 8 bits is used for VRID
-VRRP_IPV4_SRC_MAC_ADDRESS_STR = '00:00:5E:00:01:00'
-VRRP_IPV4_SRC_MAC_ADDRESS = netaddr.EUI(VRRP_IPV4_SRC_MAC_ADDRESS_STR).packed
-VRRP_IPV4_DST_MAC_ADDRESS_STR = '01:00:5E:00:00:12'
-VRRP_IPV4_DST_MAC_ADDRESS = netaddr.EUI(VRRP_IPV4_DST_MAC_ADDRESS_STR).packed
-VRRP_IPV4_DST_ADDRESS_STR = '224.0.0.18'
-VRRP_IPV4_DST_ADDRESS = netaddr.IPAddress(VRRP_IPV4_DST_ADDRESS_STR).packed
+VRRP_IPV4_SRC_MAC_ADDRESS_FMT = '00:00:5E:00:01:%02x'
+VRRP_IPV4_DST_MAC_ADDRESS = '01:00:5E:00:00:12'
+VRRP_IPV4_DST_ADDRESS = '224.0.0.18'
VRRP_IPV4_TTL = 255
def vrrp_ipv4_src_mac_address(vrid):
- return VRRP_IPV4_SRC_MAC_ADDRESS[:-1] + chr(vrid)
+ return VRRP_IPV4_SRC_MAC_ADDRESS_FMT % vrid
# IPv6
# the LSB 8 bits is used for VRID
-VRRP_IPV6_SRC_MAC_ADDRESS_STR = '00:00:5E:00:02:00'
-VRRP_IPV6_SRC_MAC_ADDRESS = netaddr.EUI(VRRP_IPV6_SRC_MAC_ADDRESS_STR).packed
-VRRP_IPV6_DST_MAC_ADDRESS_STR = '33:33:00:00:00:12'
-VRRP_IPV6_DST_MAC_ADDRESS = netaddr.EUI(VRRP_IPV6_DST_MAC_ADDRESS_STR).packed
-VRRP_IPV6_DST_ADDRESS_STR = 'FF02:0:0:0:0:0:0:12'
-VRRP_IPV6_DST_ADDRESS = netaddr.IPAddress(VRRP_IPV6_DST_ADDRESS_STR).packed
+VRRP_IPV6_SRC_MAC_ADDRESS_FMT = '00:00:5E:00:02:%02x'
+VRRP_IPV6_DST_MAC_ADDRESS = '33:33:00:00:00:12'
+VRRP_IPV6_DST_ADDRESS = 'ff02::12'
VRRP_IPV6_HOP_LIMIT = 255
def vrrp_ipv6_src_mac_address(vrid):
- return VRRP_IPV6_SRC_MAC_ADDRESS[:-1] + chr(vrid)
+ return VRRP_IPV6_SRC_MAC_ADDRESS_FMT % vrid
VRRP_VERSION_SHIFT = 4
@@ -167,10 +161,12 @@ VRRP_V2_MAX_ADVER_INT_MAX = 0xff
def is_ipv6(ip_address):
assert type(ip_address) == str
- if len(ip_address) == 4:
- return False
- assert len(ip_address) == 16
- return True
+ try:
+ addrconv.ipv4.text_to_bin(ip_address)
+ except:
+ addrconv.ipv6.text_to_bin(ip_address) # sanity
+ return True
+ return False
class vrrp(packet_base.PacketBase):
@@ -449,7 +445,10 @@ class vrrpv2(vrrp):
offset = cls._MIN_LEN
ip_addresses_pack_str = cls._ip_addresses_pack_str(count_ip)
- ip_addresses = struct.unpack_from(ip_addresses_pack_str, buf, offset)
+ ip_addresses_bin = struct.unpack_from(ip_addresses_pack_str, buf,
+ offset)
+ ip_addresses = map(lambda x: addrconv.ipv4.bin_to_text(x),
+ ip_addresses_bin)
offset += struct.calcsize(ip_addresses_pack_str)
auth_data = struct.unpack_from(cls._AUTH_DATA_PACK_STR, buf, offset)
@@ -484,7 +483,8 @@ class vrrpv2(vrrp):
vrrp_.checksum)
offset += vrrpv2._MIN_LEN
struct.pack_into(ip_addresses_pack_str, buf, offset,
- *vrrp_.ip_addresses)
+ *map(lambda x: addrconv.ipv4.text_to_bin(x),
+ vrrp_.ip_addresses))
offset += ip_addresses_len
struct.pack_into(vrrpv2._AUTH_DATA_PACK_STR, buf, offset,
*vrrp_.auth_data)
@@ -564,14 +564,17 @@ class vrrpv3(vrrp):
# Unfortunately it isn't available. Guess it by vrrp packet length.
if address_len == cls._IPV4_ADDRESS_LEN:
pack_str = '!' + cls._IPV4_ADDRESS_PACK_STR_RAW * count_ip
+ conv = addrconv.ipv4.bin_to_text
elif address_len == cls._IPV6_ADDRESS_LEN:
pack_str = '!' + cls._IPV6_ADDRESS_PACK_STR_RAW * count_ip
+ conv = addrconv.ipv6.bin_to_text
else:
raise ValueError(
'unknown address version address_len %d count_ip %d' % (
address_len, count_ip))
- ip_addresses = struct.unpack_from(pack_str, buf, offset)
+ ip_addresses_bin = struct.unpack_from(pack_str, buf, offset)
+ ip_addresses = map(lambda x: conv(x), ip_addresses_bin)
msg = cls(version, type_, vrid, priority,
count_ip, max_adver_int, checksum, ip_addresses)
return msg, None, buf[len(msg):]
@@ -580,11 +583,11 @@ class vrrpv3(vrrp):
def serialize_static(vrrp_, prev):
if isinstance(prev, ipv4.ipv4):
assert type(vrrp_.ip_addresses[0]) == str
- assert len(vrrp_.ip_addresses[0]) == 4
+ conv = addrconv.ipv4.text_to_bin
ip_address_pack_raw = vrrpv3._IPV4_ADDRESS_PACK_STR_RAW
elif isinstance(prev, ipv6.ipv6):
assert type(vrrp_.ip_addresses[0]) == str
- assert len(vrrp_.ip_addresses[0]) == vrrp._IPV6_ADDRESS_LEN
+ conv = addrconv.ipv6.text_to_bin
ip_address_pack_raw = vrrpv3._IPV6_ADDRESS_PACK_STR_RAW
else:
raise ValueError('Unkown network layer %s' % type(prev))
@@ -605,7 +608,7 @@ class vrrpv3(vrrp):
vrrp_.vrid, vrrp_.priority,
vrrp_.count_ip, vrrp_.max_adver_int, vrrp_.checksum)
struct.pack_into(ip_addresses_pack_str, buf, vrrpv3._MIN_LEN,
- *vrrp_.ip_addresses)
+ *map(lambda x: conv(x), vrrp_.ip_addresses))
if checksum:
vrrp_.checksum = packet_utils.checksum_ip(prev, len(buf), buf)
diff --git a/ryu/tests/unit/packet/test_arp.py b/ryu/tests/unit/packet/test_arp.py
index b1f8d900..5f12ae36 100644
--- a/ryu/tests/unit/packet/test_arp.py
+++ b/ryu/tests/unit/packet/test_arp.py
@@ -18,16 +18,15 @@
import unittest
import logging
import struct
-import netaddr
from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether
-from ryu.lib import mac
from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.arp import arp
from ryu.lib.packet.vlan import vlan
+from ryu.lib import addrconv
LOG = logging.getLogger('test_arp')
@@ -42,14 +41,17 @@ class Test_arp(unittest.TestCase):
hlen = 6
plen = 4
opcode = 1
- src_mac = mac.haddr_to_bin('00:07:0d:af:f4:54')
- src_ip = netaddr.IPAddress('24.166.172.1').packed
- dst_mac = mac.haddr_to_bin('00:00:00:00:00:00')
- dst_ip = netaddr.IPAddress('24.166.173.159').packed
+ src_mac = '00:07:0d:af:f4:54'
+ src_ip = '24.166.172.1'
+ dst_mac = '00:00:00:00:00:00'
+ dst_ip = '24.166.173.159'
fmt = arp._PACK_STR
- buf = pack(fmt, hwtype, proto, hlen, plen, opcode, src_mac, src_ip,
- dst_mac, dst_ip)
+ buf = pack(fmt, hwtype, proto, hlen, plen, opcode,
+ addrconv.mac.text_to_bin(src_mac),
+ addrconv.ipv4.text_to_bin(src_ip),
+ addrconv.mac.text_to_bin(dst_mac),
+ addrconv.ipv4.text_to_bin(dst_ip))
a = arp(hwtype, proto, hlen, plen, opcode, src_mac, src_ip, dst_mac,
dst_ip)
@@ -106,10 +108,10 @@ class Test_arp(unittest.TestCase):
eq_(res[2], self.hlen)
eq_(res[3], self.plen)
eq_(res[4], self.opcode)
- eq_(res[5], self.src_mac)
- eq_(res[6], self.src_ip)
- eq_(res[7], self.dst_mac)
- eq_(res[8], self.dst_ip)
+ eq_(addrconv.mac.bin_to_text(res[5]), self.src_mac)
+ eq_(addrconv.ipv4.bin_to_text(res[6]), self.src_ip)
+ eq_(addrconv.mac.bin_to_text(res[7]), self.dst_mac)
+ eq_(addrconv.ipv4.bin_to_text(res[8]), self.dst_ip)
def _build_arp(self, vlan_enabled):
if vlan_enabled is True:
diff --git a/ryu/tests/unit/packet/test_ethernet.py b/ryu/tests/unit/packet/test_ethernet.py
index 95094b1a..504a560f 100644
--- a/ryu/tests/unit/packet/test_ethernet.py
+++ b/ryu/tests/unit/packet/test_ethernet.py
@@ -23,10 +23,10 @@ from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.arp import arp
+from ryu.lib import addrconv
LOG = logging.getLogger('test_ethernet')
@@ -36,11 +36,13 @@ class Test_ethernet(unittest.TestCase):
""" Test case for ethernet
"""
- dst = mac.haddr_to_bin('AA:AA:AA:AA:AA:AA')
- src = mac.haddr_to_bin('BB:BB:BB:BB:BB:BB')
+ dst = 'aa:aa:aa:aa:aa:aa'
+ src = 'bb:bb:bb:bb:bb:bb'
ethertype = ether.ETH_TYPE_ARP
- buf = pack(ethernet._PACK_STR, dst, src, ethertype)
+ buf = pack(ethernet._PACK_STR,
+ addrconv.mac.text_to_bin(dst),
+ addrconv.mac.text_to_bin(src), ethertype)
e = ethernet(dst, src, ethertype)
@@ -77,8 +79,8 @@ class Test_ethernet(unittest.TestCase):
fmt = ethernet._PACK_STR
res = struct.unpack(fmt, buf)
- eq_(res[0], self.dst)
- eq_(res[1], self.src)
+ eq_(addrconv.mac.bin_to_text(res[0]), self.dst)
+ eq_(addrconv.mac.bin_to_text(res[1]), self.src)
eq_(res[2], self.ethertype)
@raises(Exception)
diff --git a/ryu/tests/unit/packet/test_icmpv6.py b/ryu/tests/unit/packet/test_icmpv6.py
index 0a665c75..26b8c898 100644
--- a/ryu/tests/unit/packet/test_icmpv6.py
+++ b/ryu/tests/unit/packet/test_icmpv6.py
@@ -18,7 +18,6 @@
import unittest
import logging
import struct
-import netaddr
from nose.tools import ok_, eq_, nottest, raises
from nose.plugins.skip import Skip, SkipTest
@@ -28,13 +27,16 @@ from ryu.lib.packet.packet import Packet
from ryu.lib.packet import icmpv6
from ryu.lib.packet.ipv6 import ipv6
from ryu.lib.packet import packet_utils
+from ryu.lib import addrconv
LOG = logging.getLogger(__name__)
def icmpv6_csum(prev, buf):
- ph = struct.pack('!16s16sI3xB', prev.src, prev.dst,
+ ph = struct.pack('!16s16sI3xB',
+ addrconv.ipv6.text_to_bin(prev.src),
+ addrconv.ipv6.text_to_bin(prev.dst),
prev.payload_length, prev.nxt)
h = bytearray(buf)
struct.pack_into('!H', h, 2, 0)
@@ -70,8 +72,8 @@ class Test_icmpv6_header(unittest.TestCase):
eq_(n, None)
def test_serialize(self):
- src_ipv6 = netaddr.IPAddress('fe80::200:ff:fe00:ef').packed
- dst_ipv6 = netaddr.IPAddress('fe80::200:ff:fe00:1').packed
+ src_ipv6 = 'fe80::200:ff:fe00:ef'
+ dst_ipv6 = 'fe80::200:ff:fe00:1'
prev = ipv6(6, 0, 0, 4, 58, 255, src_ipv6, dst_ipv6)
buf = self.icmp.serialize(bytearray(), prev)
@@ -128,8 +130,8 @@ class Test_icmpv6_echo_request(unittest.TestCase):
def _test_serialize(self, echo_data=None):
buf = self.buf + str(echo_data or '')
- src_ipv6 = netaddr.IPAddress('3ffe:507:0:1:200:86ff:fe05:80da').packed
- dst_ipv6 = netaddr.IPAddress('3ffe:501:0:1001::2').packed
+ src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da'
+ dst_ipv6 = '3ffe:501:0:1001::2'
prev = ipv6(6, 0, 0, len(buf), 64, 255, src_ipv6, dst_ipv6)
echo_csum = icmpv6_csum(prev, buf)
@@ -168,16 +170,16 @@ class Test_icmpv6_neighbor_solict(unittest.TestCase):
code = 0
csum = 0x952d
res = 0
- dst = netaddr.IPAddress('3ffe:507:0:1:200:86ff:fe05:80da').packed
+ dst = '3ffe:507:0:1:200:86ff:fe05:80da'
nd_type = 1
nd_length = 1
- nd_hw_src = '\x00\x60\x97\x07\x69\xea'
+ nd_hw_src = '00:60:97:07:69:ea'
data = '\x01\x01\x00\x60\x97\x07\x69\xea'
buf = '\x87\x00\x95\x2d\x00\x00\x00\x00' \
+ '\x3f\xfe\x05\x07\x00\x00\x00\x01' \
+ '\x02\x00\x86\xff\xfe\x05\x80\xda'
- src_ipv6 = netaddr.IPAddress('3ffe:507:0:1:200:86ff:fe05:80da').packed
- dst_ipv6 = netaddr.IPAddress('3ffe:501:0:1001::2').packed
+ src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da'
+ dst_ipv6 = '3ffe:501:0:1001::2'
def setUp(self):
pass
@@ -232,7 +234,7 @@ class Test_icmpv6_neighbor_solict(unittest.TestCase):
eq_(code, self.code)
eq_(csum, nd_csum)
eq_(res >> 29, self.res)
- eq_(dst, self.dst)
+ eq_(addrconv.ipv6.bin_to_text(dst), self.dst)
eq_(data, '')
def test_serialize_with_data(self):
@@ -255,10 +257,10 @@ class Test_icmpv6_neighbor_solict(unittest.TestCase):
eq_(code, self.code)
eq_(csum, nd_csum)
eq_(res >> 29, self.res)
- eq_(dst, self.dst)
+ eq_(addrconv.ipv6.bin_to_text(dst), self.dst)
eq_(nd_type, self.nd_type)
eq_(nd_length, self.nd_length)
- eq_(nd_hw_src, self.nd_hw_src)
+ eq_(addrconv.mac.bin_to_text(nd_hw_src), self.nd_hw_src)
class Test_icmpv6_neighbor_advert(Test_icmpv6_neighbor_solict):
@@ -266,11 +268,11 @@ class Test_icmpv6_neighbor_advert(Test_icmpv6_neighbor_solict):
self.type_ = 136
self.csum = 0xb8ba
self.res = 7
- self.dst = netaddr.IPAddress('3ffe:507:0:1:260:97ff:fe07:69ea').packed
+ self.dst = '3ffe:507:0:1:260:97ff:fe07:69ea'
self.nd_type = 2
self.nd_length = 1
self.nd_data = None
- self.nd_hw_src = '\x00\x60\x97\x07\x69\xea'
+ self.nd_hw_src = '00:60:97:07:69:ea'
self.data = '\x02\x01\x00\x60\x97\x07\x69\xea'
self.buf = '\x88\x00\xb8\xba\xe0\x00\x00\x00' \
+ '\x3f\xfe\x05\x07\x00\x00\x00\x01' \
@@ -316,8 +318,8 @@ class Test_icmpv6_router_solict(unittest.TestCase):
def _test_serialize(self, nd_data=None):
nd_data = str(nd_data or '')
buf = self.buf + nd_data
- src_ipv6 = netaddr.IPAddress('fe80::102d:a5ff:fe6d:bc0f').packed
- dst_ipv6 = netaddr.IPAddress('ff02::2').packed
+ src_ipv6 = 'fe80::102d:a5ff:fe6d:bc0f'
+ dst_ipv6 = 'ff02::2'
prev = ipv6(6, 0, 0, len(buf), 58, 255, src_ipv6, dst_ipv6)
nd_csum = icmpv6_csum(prev, buf)
diff --git a/ryu/tests/unit/packet/test_ipv4.py b/ryu/tests/unit/packet/test_ipv4.py
index fe74c985..4dbc4f2b 100644
--- a/ryu/tests/unit/packet/test_ipv4.py
+++ b/ryu/tests/unit/packet/test_ipv4.py
@@ -22,13 +22,12 @@ from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
from ryu.lib.packet import packet_utils
from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.ipv4 import ipv4
from ryu.lib.packet.tcp import tcp
-import netaddr
+from ryu.lib import addrconv
LOG = logging.getLogger('test_ipv4')
@@ -50,8 +49,8 @@ class Test_ipv4(unittest.TestCase):
ttl = 64
proto = inet.IPPROTO_TCP
csum = 0xadc6
- src = netaddr.IPAddress('131.151.32.21').packed
- dst = netaddr.IPAddress('131.151.32.129').packed
+ src = '131.151.32.21'
+ dst = '131.151.32.129'
length = header_length * 4
option = '\x86\x28\x00\x00\x00\x01\x01\x22' \
+ '\x00\x01\xae\x00\x00\x00\x00\x00' \
@@ -60,7 +59,9 @@ class Test_ipv4(unittest.TestCase):
+ '\x00\x00\x00\x00\x00\x00\x00\x01'
buf = pack(ipv4._PACK_STR, ver_hlen, tos, total_length, identification,
- flg_off, ttl, proto, csum, src, dst) \
+ flg_off, ttl, proto, csum,
+ addrconv.ipv4.text_to_bin(src),
+ addrconv.ipv4.text_to_bin(dst)) \
+ option
ip = ipv4(version, header_length, tos, total_length, identification,
@@ -117,8 +118,8 @@ class Test_ipv4(unittest.TestCase):
eq_(res[4], self.flg_off)
eq_(res[5], self.ttl)
eq_(res[6], self.proto)
- eq_(res[8], self.src)
- eq_(res[9], self.dst)
+ eq_(addrconv.ipv4.bin_to_text(res[8]), self.src)
+ eq_(addrconv.ipv4.bin_to_text(res[9]), self.dst)
eq_(option, self.option)
# checksum
diff --git a/ryu/tests/unit/packet/test_lldp.py b/ryu/tests/unit/packet/test_lldp.py
index 0d224581..7f95fb47 100644
--- a/ryu/tests/unit/packet/test_lldp.py
+++ b/ryu/tests/unit/packet/test_lldp.py
@@ -24,6 +24,7 @@ from ryu.ofproto import ether
from ryu.lib.packet import packet
from ryu.lib.packet import ethernet
from ryu.lib.packet import lldp
+from ryu.lib import addrconv
LOG = logging.getLogger(__name__)
@@ -98,13 +99,14 @@ class TestLLDPMandatoryTLV(unittest.TestCase):
pkt = packet.Packet()
dst = lldp.LLDP_MAC_NEAREST_BRIDGE
- src = '\x00\x04\x96\x1f\xa7\x26'
+ src = '00:04:96:1f:a7:26'
ethertype = ether.ETH_TYPE_LLDP
eth_pkt = ethernet.ethernet(dst, src, ethertype)
pkt.add_protocol(eth_pkt)
tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS,
- chassis_id=src)
+ chassis_id=addrconv.mac.
+ text_to_bin(src))
tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME,
port_id='1/3')
tlv_ttl = lldp.TTL(ttl=120)
@@ -216,13 +218,14 @@ class TestLLDPOptionalTLV(unittest.TestCase):
pkt = packet.Packet()
dst = lldp.LLDP_MAC_NEAREST_BRIDGE
- src = '\x00\x01\x30\xf9\xad\xa0'
+ src = '00:01:30:f9:ad:a0'
ethertype = ether.ETH_TYPE_LLDP
eth_pkt = ethernet.ethernet(dst, src, ethertype)
pkt.add_protocol(eth_pkt)
tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS,
- chassis_id=src)
+ chassis_id=addrconv.mac.
+ text_to_bin(src))
tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME,
port_id='1/1')
tlv_ttl = lldp.TTL(ttl=120)
diff --git a/ryu/tests/unit/packet/test_packet.py b/ryu/tests/unit/packet/test_packet.py
index 7598ec25..45f27fd0 100644
--- a/ryu/tests/unit/packet/test_packet.py
+++ b/ryu/tests/unit/packet/test_packet.py
@@ -18,13 +18,12 @@
import unittest
import logging
import struct
-import netaddr
import array
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
from ryu.lib.packet import *
+from ryu.lib import addrconv
LOG = logging.getLogger('test_packet')
@@ -34,10 +33,14 @@ class TestPacket(unittest.TestCase):
""" Test case for packet
"""
- dst_mac = mac.haddr_to_bin('AA:AA:AA:AA:AA:AA')
- src_mac = mac.haddr_to_bin('BB:BB:BB:BB:BB:BB')
- dst_ip_bin = dst_ip = netaddr.IPAddress('192.168.128.10').packed
- src_ip_bin = src_ip = netaddr.IPAddress('192.168.122.20').packed
+ dst_mac = 'aa:aa:aa:aa:aa:aa'
+ src_mac = 'bb:bb:bb:bb:bb:bb'
+ dst_mac_bin = addrconv.mac.text_to_bin(dst_mac)
+ src_mac_bin = addrconv.mac.text_to_bin(src_mac)
+ dst_ip = '192.168.128.10'
+ src_ip = '192.168.122.20'
+ dst_ip_bin = addrconv.ipv4.text_to_bin(dst_ip)
+ src_ip_bin = addrconv.ipv4.text_to_bin(src_ip)
payload = '\x06\x06\x47\x50\x00\x00\x00\x00' \
+ '\xcd\xc5\x00\x00\x00\x00\x00\x00' \
+ '\x10\x11\x12\x13\x14\x15\x16\x17' \
@@ -71,8 +74,8 @@ class TestPacket(unittest.TestCase):
p.serialize()
# ethernet !6s6sH
- e_buf = self.dst_mac \
- + self.src_mac \
+ e_buf = self.dst_mac_bin \
+ + self.src_mac_bin \
+ '\x08\x06'
# arp !HHBBH6sI6sI
@@ -81,9 +84,9 @@ class TestPacket(unittest.TestCase):
+ '\x06' \
+ '\x04' \
+ '\x00\x02' \
- + self.src_mac \
+ + self.src_mac_bin \
+ self.src_ip_bin \
- + self.dst_mac \
+ + self.dst_mac_bin \
+ self.dst_ip_bin
buf = e_buf + a_buf
@@ -128,8 +131,8 @@ class TestPacket(unittest.TestCase):
p.serialize()
# ethernet !6s6sH
- e_buf = self.dst_mac \
- + self.src_mac \
+ e_buf = self.dst_mac_bin \
+ + self.src_mac_bin \
+ '\x81\x00'
# vlan !HH
@@ -142,9 +145,9 @@ class TestPacket(unittest.TestCase):
+ '\x06' \
+ '\x04' \
+ '\x00\x02' \
- + self.src_mac \
+ + self.src_mac_bin \
+ self.src_ip_bin \
- + self.dst_mac \
+ + self.dst_mac_bin \
+ self.dst_ip_bin
buf = e_buf + v_buf + a_buf
@@ -198,8 +201,8 @@ class TestPacket(unittest.TestCase):
p.serialize()
# ethernet !6s6sH
- e_buf = self.dst_mac \
- + self.src_mac \
+ e_buf = self.dst_mac_bin \
+ + self.src_mac_bin \
+ '\x08\x00'
# ipv4 !BBHHHBBHII
@@ -260,7 +263,7 @@ class TestPacket(unittest.TestCase):
eq_(0x77b2, p_udp.csum)
t = bytearray(u_buf)
struct.pack_into('!H', t, 6, p_udp.csum)
- ph = struct.pack('!4s4sBBH', self.src_ip, self.dst_ip, 0,
+ ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0,
17, len(u_buf) + len(self.payload))
t = ph + t + self.payload
eq_(packet_utils.checksum(t), 0)
@@ -286,8 +289,8 @@ class TestPacket(unittest.TestCase):
p.serialize()
# ethernet !6s6sH
- e_buf = self.dst_mac \
- + self.src_mac \
+ e_buf = self.dst_mac_bin \
+ + self.src_mac_bin \
+ '\x08\x00'
# ipv4 !BBHHHBBHII
@@ -359,7 +362,7 @@ class TestPacket(unittest.TestCase):
eq_(len(t_buf), len(p_tcp))
t = bytearray(t_buf)
struct.pack_into('!H', t, 16, p_tcp.csum)
- ph = struct.pack('!4s4sBBH', self.src_ip, self.dst_ip, 0,
+ ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0,
6, len(t_buf) + len(self.payload))
t = ph + t + self.payload
eq_(packet_utils.checksum(t), 0)
diff --git a/ryu/tests/unit/packet/test_slow.py b/ryu/tests/unit/packet/test_slow.py
index fe6a0e5f..a66e6630 100755
--- a/ryu/tests/unit/packet/test_slow.py
+++ b/ryu/tests/unit/packet/test_slow.py
@@ -21,9 +21,9 @@ import copy
from struct import pack, unpack_from
from nose.tools import ok_, eq_, raises
from ryu.ofproto import ether
-from ryu.lib import mac
from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
+from ryu.lib import addrconv
from ryu.lib.packet.slow import slow, lacp
from ryu.lib.packet.slow import SLOW_PROTOCOL_MULTICAST
from ryu.lib.packet.slow import SLOW_SUBTYPE_LACP
@@ -41,7 +41,7 @@ class Test_slow(unittest.TestCase):
self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR
self.actor_length = 20
self.actor_system_priority = 65534
- self.actor_system = mac.haddr_to_bin('00:07:0d:af:f4:54')
+ self.actor_system = '00:07:0d:af:f4:54'
self.actor_key = 1
self.actor_port_priority = 65535
self.actor_port = 1
@@ -65,7 +65,7 @@ class Test_slow(unittest.TestCase):
self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER
self.partner_length = 20
self.partner_system_priority = 0
- self.partner_system = mac.haddr_to_bin('00:00:00:00:00:00')
+ self.partner_system = '00:00:00:00:00:00'
self.partner_key = 0
self.partner_port_priority = 0
self.partner_port = 0
@@ -167,7 +167,7 @@ class Test_lacp(unittest.TestCase):
self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR
self.actor_length = 20
self.actor_system_priority = 65534
- self.actor_system = mac.haddr_to_bin('00:07:0d:af:f4:54')
+ self.actor_system = '00:07:0d:af:f4:54'
self.actor_key = 1
self.actor_port_priority = 65535
self.actor_port = 1
@@ -191,7 +191,7 @@ class Test_lacp(unittest.TestCase):
self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER
self.partner_length = 20
self.partner_system_priority = 0
- self.partner_system = mac.haddr_to_bin('00:00:00:00:00:00')
+ self.partner_system = '00:00:00:00:00:00'
self.partner_key = 0
self.partner_port_priority = 0
self.partner_port = 0
@@ -237,7 +237,7 @@ class Test_lacp(unittest.TestCase):
self.actor_tag,
self.actor_length,
self.actor_system_priority,
- self.actor_system,
+ addrconv.mac.text_to_bin(self.actor_system),
self.actor_key,
self.actor_port_priority,
self.actor_port,
@@ -246,7 +246,7 @@ class Test_lacp(unittest.TestCase):
self.partner_tag,
self.partner_length,
self.partner_system_priority,
- self.partner_system,
+ addrconv.mac.text_to_bin(self.partner_system),
self.partner_key,
self.partner_port_priority,
self.partner_port,
@@ -423,7 +423,7 @@ class Test_lacp(unittest.TestCase):
eq_(act_res[0], self.actor_tag)
eq_(act_res[1], self.actor_length)
eq_(act_res[2], self.actor_system_priority)
- eq_(act_res[3], self.actor_system)
+ eq_(addrconv.mac.bin_to_text(act_res[3]), self.actor_system)
eq_(act_res[4], self.actor_key)
eq_(act_res[5], self.actor_port_priority)
eq_(act_res[6], self.actor_port)
@@ -432,7 +432,7 @@ class Test_lacp(unittest.TestCase):
eq_(prt_res[0], self.partner_tag)
eq_(prt_res[1], self.partner_length)
eq_(prt_res[2], self.partner_system_priority)
- eq_(prt_res[3], self.partner_system)
+ eq_(addrconv.mac.bin_to_text(prt_res[3]), self.partner_system)
eq_(prt_res[4], self.partner_key)
eq_(prt_res[5], self.partner_port_priority)
eq_(prt_res[6], self.partner_port)
diff --git a/ryu/tests/unit/packet/test_tcp.py b/ryu/tests/unit/packet/test_tcp.py
index fe6f88b1..5618652a 100644
--- a/ryu/tests/unit/packet/test_tcp.py
+++ b/ryu/tests/unit/packet/test_tcp.py
@@ -18,17 +18,15 @@
import unittest
import logging
import struct
-import netaddr
from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
-from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.tcp import tcp
from ryu.lib.packet.ipv4 import ipv4
from ryu.lib.packet import packet_utils
+from ryu.lib import addrconv
LOG = logging.getLogger('test_tcp')
@@ -92,8 +90,8 @@ class Test_tcp(unittest.TestCase):
offset = 5
csum = 0
- src_ip = netaddr.IPAddress('192.168.10.1').packed
- dst_ip = netaddr.IPAddress('192.168.100.1').packed
+ src_ip = '192.168.10.1'
+ dst_ip = '192.168.100.1'
prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64,
inet.IPPROTO_TCP, 0, src_ip, dst_ip)
@@ -112,7 +110,9 @@ class Test_tcp(unittest.TestCase):
eq_(res[8], self.urgent)
# checksum
- ph = struct.pack('!4s4sBBH', src_ip, dst_ip, 0, 6, offset * 4)
+ ph = struct.pack('!4s4sBBH',
+ addrconv.ipv4.text_to_bin(src_ip),
+ addrconv.ipv4.text_to_bin(dst_ip), 0, 6, offset * 4)
d = ph + buf + bytearray()
s = packet_utils.checksum(d)
eq_(0, s)
@@ -122,8 +122,8 @@ class Test_tcp(unittest.TestCase):
csum = 0
option = '\x01\x02'
- src_ip = netaddr.IPAddress('192.168.10.1').packed
- dst_ip = netaddr.IPAddress('192.168.100.1').packed
+ src_ip = '192.168.10.1'
+ dst_ip = '192.168.100.1'
prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64,
inet.IPPROTO_TCP, 0, src_ip, dst_ip)
diff --git a/ryu/tests/unit/packet/test_udp.py b/ryu/tests/unit/packet/test_udp.py
index 9d52eaf0..64187436 100644
--- a/ryu/tests/unit/packet/test_udp.py
+++ b/ryu/tests/unit/packet/test_udp.py
@@ -18,17 +18,15 @@
import unittest
import logging
import struct
-import netaddr
from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
-from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.udp import udp
from ryu.lib.packet.ipv4 import ipv4
from ryu.lib.packet import packet_utils
+from ryu.lib import addrconv
LOG = logging.getLogger('test_udp')
@@ -71,8 +69,8 @@ class Test_udp(unittest.TestCase):
total_length = 0
csum = 0
- src_ip = netaddr.IPAddress('192.168.10.1').packed
- dst_ip = netaddr.IPAddress('192.168.100.1').packed
+ src_ip = '192.168.10.1'
+ dst_ip = '192.168.100.1'
prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64,
inet.IPPROTO_UDP, 0, src_ip, dst_ip)
@@ -85,7 +83,9 @@ class Test_udp(unittest.TestCase):
eq_(res[2], struct.calcsize(udp._PACK_STR))
# checksum
- ph = struct.pack('!4s4sBBH', src_ip, dst_ip, 0, 17, res[2])
+ ph = struct.pack('!4s4sBBH',
+ addrconv.ipv4.text_to_bin(src_ip),
+ addrconv.ipv4.text_to_bin(dst_ip), 0, 17, res[2])
d = ph + buf + bytearray()
s = packet_utils.checksum(d)
eq_(0, s)
diff --git a/ryu/tests/unit/packet/test_vlan.py b/ryu/tests/unit/packet/test_vlan.py
index 5c31e507..69835078 100644
--- a/ryu/tests/unit/packet/test_vlan.py
+++ b/ryu/tests/unit/packet/test_vlan.py
@@ -18,12 +18,10 @@
import unittest
import logging
import struct
-import netaddr
from struct import *
from nose.tools import *
from nose.plugins.skip import Skip, SkipTest
from ryu.ofproto import ether, inet
-from ryu.lib import mac
from ryu.lib.packet.ethernet import ethernet
from ryu.lib.packet.packet import Packet
from ryu.lib.packet.ipv4 import ipv4
@@ -85,8 +83,8 @@ class Test_vlan(unittest.TestCase):
eq_(res[1], self.ethertype)
def _build_vlan(self):
- src_mac = mac.haddr_to_bin('00:07:0d:af:f4:54')
- dst_mac = mac.haddr_to_bin('00:00:00:00:00:00')
+ src_mac = '00:07:0d:af:f4:54'
+ dst_mac = '00:00:00:00:00:00'
ethertype = ether.ETH_TYPE_8021Q
e = ethernet(dst_mac, src_mac, ethertype)
@@ -100,8 +98,8 @@ class Test_vlan(unittest.TestCase):
ttl = 64
proto = inet.IPPROTO_ICMP
csum = 0xa7f2
- src = netaddr.IPAddress('131.151.32.21').packed
- dst = netaddr.IPAddress('131.151.32.129').packed
+ src = '131.151.32.21'
+ dst = '131.151.32.129'
option = 'TEST'
ip = ipv4(version, header_length, tos, total_length, identification,
flags, offset, ttl, proto, csum, src, dst, option)
diff --git a/ryu/tests/unit/packet/test_vrrp.py b/ryu/tests/unit/packet/test_vrrp.py
index 56bb092c..962d56af 100644
--- a/ryu/tests/unit/packet/test_vrrp.py
+++ b/ryu/tests/unit/packet/test_vrrp.py
@@ -19,7 +19,6 @@
import unittest
import logging
import struct
-import netaddr
from nose.tools import eq_, ok_
from nose.tools import raises
@@ -30,6 +29,7 @@ from ryu.lib.packet import ipv6
from ryu.lib.packet import packet
from ryu.lib.packet import packet_utils
from ryu.lib.packet import vrrp
+from ryu.lib import addrconv
LOG = logging.getLogger(__name__)
@@ -46,14 +46,15 @@ class Test_vrrpv2(unittest.TestCase):
auth_type = vrrp.VRRP_AUTH_NO_AUTH
max_adver_int = 100
checksum = 0
- ip_address = netaddr.IPAddress('192.168.0.1').packed
+ ip_address = '192.168.0.1'
auth_data = (0, 0)
vrrpv2 = vrrp.vrrpv2.create(type_, vrid, priority, max_adver_int,
[ip_address])
buf = struct.pack(vrrp.vrrpv2._PACK_STR + '4sII',
vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V2, type_),
vrid, priority, count_ip,
- auth_type, max_adver_int, checksum, ip_address,
+ auth_type, max_adver_int, checksum,
+ addrconv.ipv4.text_to_bin(ip_address),
auth_data[0], auth_data[1])
def setUp(self):
@@ -89,7 +90,7 @@ class Test_vrrpv2(unittest.TestCase):
eq_(self.auth_data, vrrpv2.auth_data)
def test_serialize(self):
- src_ip = netaddr.IPAddress('192.168.0.1').packed
+ src_ip = '192.168.0.1'
dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS
prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL,
inet.IPPROTO_VRRP, 0, src_ip, dst_ip)
@@ -98,7 +99,7 @@ class Test_vrrpv2(unittest.TestCase):
vrid = 5
priority = 10
max_adver_int = 30
- ip_address = netaddr.IPAddress('192.168.0.2').packed
+ ip_address = '192.168.0.2'
ip_addresses = [ip_address]
vrrp_ = vrrp.vrrpv2.create(
@@ -115,7 +116,7 @@ class Test_vrrpv2(unittest.TestCase):
eq_(res[4], vrrp.VRRP_AUTH_NO_AUTH)
eq_(res[5], max_adver_int)
# res[6] is checksum
- eq_(res[7], ip_address)
+ eq_(addrconv.ipv4.bin_to_text(res[7]), ip_address)
eq_(res[8], 0)
eq_(res[9], 0)
eq_(len(buf), pack_len)
@@ -130,7 +131,7 @@ class Test_vrrpv2(unittest.TestCase):
vrrp.vrrp.parser(m_short_buf)
def test_create_packet(self):
- primary_ip = netaddr.IPAddress('192.168.0.2').packed
+ primary_ip = '192.168.0.2'
p0 = self.vrrpv2.create_packet(primary_ip)
p0.serialize()
p1 = packet.Packet(str(p0.data))
@@ -193,13 +194,14 @@ class Test_vrrpv3_ipv4(unittest.TestCase):
count_ip = 1
max_adver_int = 111
checksum = 0
- ip_address = netaddr.IPAddress('192.168.0.1').packed
+ ip_address = '192.168.0.1'
vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int,
[ip_address])
buf = struct.pack(vrrp.vrrpv3._PACK_STR + '4s',
vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_),
vrid, priority, count_ip,
- max_adver_int, checksum, ip_address)
+ max_adver_int, checksum,
+ addrconv.ipv4.text_to_bin(ip_address))
def setUp(self):
pass
@@ -230,7 +232,7 @@ class Test_vrrpv3_ipv4(unittest.TestCase):
eq_(self.ip_address, vrrpv3.ip_addresses[0])
def test_serialize(self):
- src_ip = netaddr.IPAddress('192.168.0.1').packed
+ src_ip = '192.168.0.1'
dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS
prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL,
inet.IPPROTO_VRRP, 0, src_ip, dst_ip)
@@ -239,7 +241,7 @@ class Test_vrrpv3_ipv4(unittest.TestCase):
vrid = 5
priority = 10
max_adver_int = 30
- ip_address = netaddr.IPAddress('192.168.0.2').packed
+ ip_address = '192.168.0.2'
ip_addresses = [ip_address]
vrrp_ = vrrp.vrrpv3.create(
@@ -256,13 +258,15 @@ class Test_vrrpv3_ipv4(unittest.TestCase):
eq_(res[3], len(ip_addresses))
eq_(res[4], max_adver_int)
# res[5] is checksum
- eq_(res[6], ip_address)
+ eq_(addrconv.ipv4.bin_to_text(res[6]), ip_address)
eq_(len(buf), pack_len)
print(res)
# checksum
- ph = struct.pack('!4s4sxBH', src_ip, dst_ip, inet.IPPROTO_VRRP,
- pack_len)
+ ph = struct.pack('!4s4sxBH',
+ addrconv.ipv4.text_to_bin(src_ip),
+ addrconv.ipv4.text_to_bin(dst_ip),
+ inet.IPPROTO_VRRP, pack_len)
s = packet_utils.checksum(ph + buf)
eq_(0, s)
@@ -272,7 +276,7 @@ class Test_vrrpv3_ipv4(unittest.TestCase):
vrrp.vrrp.parser(m_short_buf)
def test_create_packet(self):
- primary_ip = netaddr.IPAddress('192.168.0.2').packed
+ primary_ip = '192.168.0.2'
p0 = self.vrrpv3.create_packet(primary_ip)
p0.serialize()
p1 = packet.Packet(str(p0.data))
@@ -335,13 +339,14 @@ class Test_vrrpv3_ipv6(unittest.TestCase):
count_ip = 1
max_adver_int = 111
checksum = 0
- ip_address = netaddr.IPAddress('2001:DB8:2000::1').packed
+ ip_address = '2001:db8:2000::1'
vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int,
[ip_address])
buf = struct.pack(vrrp.vrrpv3._PACK_STR + '16s',
vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_),
vrid, priority, count_ip,
- max_adver_int, checksum, ip_address)
+ max_adver_int, checksum,
+ addrconv.ipv6.text_to_bin(ip_address))
def setUp(self):
pass
@@ -372,7 +377,7 @@ class Test_vrrpv3_ipv6(unittest.TestCase):
eq_(self.ip_address, vrrpv3.ip_addresses[0])
def test_serialize(self):
- src_ip = netaddr.IPAddress('2001:DB8:2000::1').packed
+ src_ip = '2001:db8:2000::1'
dst_ip = vrrp.VRRP_IPV6_DST_ADDRESS
prev = ipv6.ipv6(6, 0, 0, 0, inet.IPPROTO_VRRP,
vrrp.VRRP_IPV6_HOP_LIMIT, src_ip, dst_ip)
@@ -381,7 +386,7 @@ class Test_vrrpv3_ipv6(unittest.TestCase):
vrid = 5
priority = 10
max_adver_int = 30
- ip_address = netaddr.IPAddress('2001:DB8:2000::2').packed
+ ip_address = '2001:db8:2000::2'
ip_addresses = [ip_address]
vrrp_ = vrrp.vrrpv3.create(
@@ -398,13 +403,15 @@ class Test_vrrpv3_ipv6(unittest.TestCase):
eq_(res[3], len(ip_addresses))
eq_(res[4], max_adver_int)
# res[5] is checksum
- eq_(res[6], ip_address)
+ eq_(addrconv.ipv6.bin_to_text(res[6]), ip_address)
eq_(len(buf), pack_len)
print(res)
# checksum
ph = struct.pack('!16s16sI3xB',
- src_ip, dst_ip, pack_len, inet.IPPROTO_VRRP)
+ addrconv.ipv6.text_to_bin(src_ip),
+ addrconv.ipv6.text_to_bin(dst_ip),
+ pack_len, inet.IPPROTO_VRRP)
s = packet_utils.checksum(ph + buf)
eq_(0, s)
@@ -414,7 +421,7 @@ class Test_vrrpv3_ipv6(unittest.TestCase):
vrrp.vrrp.parser(m_short_buf)
def test_create_packet(self):
- primary_ip = netaddr.IPAddress('2001:DB8:2000::3').packed
+ primary_ip = '2001:db8:2000::3'
p0 = self.vrrpv3.create_packet(primary_ip)
p0.serialize()
print(len(p0.data), p0.data)