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 <[email protected]>
---
 ryu/lib/mac.py                         |  6 ++--
 ryu/lib/packet/arp.py                  | 24 ++++++++-------
 ryu/lib/packet/ethernet.py             |  9 ++++--
 ryu/lib/packet/icmpv6.py               | 12 ++++----
 ryu/lib/packet/ipv4.py                 | 14 +++++----
 ryu/lib/packet/ipv6.py                 |  7 +++--
 ryu/lib/packet/lldp.py                 |  6 ++--
 ryu/lib/packet/packet_utils.py         |  9 ++++--
 ryu/lib/packet/slow.py                 | 23 +++++++++------
 ryu/lib/packet/vrrp.py                 | 53 ++++++++++++++++++----------------
 ryu/tests/unit/packet/test_arp.py      | 26 +++++++++--------
 ryu/tests/unit/packet/test_ethernet.py | 14 +++++----
 ryu/tests/unit/packet/test_icmpv6.py   | 36 ++++++++++++-----------
 ryu/tests/unit/packet/test_ipv4.py     | 15 +++++-----
 ryu/tests/unit/packet/test_lldp.py     | 11 ++++---
 ryu/tests/unit/packet/test_packet.py   | 43 ++++++++++++++-------------
 ryu/tests/unit/packet/test_slow.py     | 18 ++++++------
 ryu/tests/unit/packet/test_tcp.py      | 16 +++++-----
 ryu/tests/unit/packet/test_udp.py      | 12 ++++----
 ryu/tests/unit/packet/test_vlan.py     | 10 +++----
 ryu/tests/unit/packet/test_vrrp.py     | 51 ++++++++++++++++++--------------
 21 files changed, 233 insertions(+), 182 deletions(-)

diff --git a/ryu/lib/mac.py b/ryu/lib/mac.py
index ad10672..d7ec7d9 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 616ab86..2edb028 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/ethernet.py b/ryu/lib/packet/ethernet.py
index 3db0e16..c8cf951 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)
 
 
diff --git a/ryu/lib/packet/icmpv6.py b/ryu/lib/packet/icmpv6.py
index 3419108..fe16d09 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 16b4698..d80c849 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 707a3dd..f2393ef 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 0c6dc03..b668f66 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 0052335..9331472 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 7f4870b..58cfc4c 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 e79d758..772d913 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 b1f8d90..5f12ae3 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 95094b1..504a560 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 0a665c7..26b8c89 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 fe74c98..4dbc4f2 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 0d22458..7f95fb4 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 8594002..841f1c0 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 fe6a0e5..a66e663 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 fe6f88b..5618652 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 9d52eaf..6418743 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 5c31e50..6983507 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 56bb092..962d56a 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)
-- 
1.8.1.5


------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent 
caught up. So what steps can you take to put your SQL databases under 
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to