Signed-off-by: itoyuichi <[email protected]>
---
 ryu/lib/packet/bgp.py         |    9 +++++----
 ryu/lib/packet/dhcp.py        |    7 ++++---
 ryu/lib/packet/icmp.py        |   10 ++++++----
 ryu/lib/packet/icmpv6.py      |   19 ++++++++++++-------
 ryu/lib/packet/ipv6.py        |    9 ++++++---
 ryu/lib/packet/llc.py         |    8 ++++----
 ryu/lib/packet/lldp.py        |    6 ++++--
 ryu/lib/packet/packet_base.py |   12 +++++++++++-
 8 files changed, 52 insertions(+), 28 deletions(-)

diff --git a/ryu/lib/packet/bgp.py b/ryu/lib/packet/bgp.py
index 4c2119c..731ffac 100644
--- a/ryu/lib/packet/bgp.py
+++ b/ryu/lib/packet/bgp.py
@@ -32,7 +32,6 @@ RFC 4271 BGP-4
 import struct

 from ryu.ofproto.ofproto_parser import msg_pack_into
-from ryu.lib.stringify import StringifyMixin
 from ryu.lib.packet import packet_base
 from ryu.lib.packet import stream_parser
 from ryu.lib import addrconv
@@ -78,7 +77,7 @@ def pad(bin, len_):
     return bin + (len_ - len(bin)) * '\0'


-class _IPAddrPrefix(StringifyMixin):
+class _IPAddrPrefix(packet_base.StringifyMixin):
     _PACK_STR = '!B'  # length

     def __init__(self, length, ip_addr):
@@ -113,7 +112,7 @@ class _IPAddrPrefix(StringifyMixin):
         return buf + bytes(bin_ip_addr)


-class BGPOptParam(StringifyMixin):
+class BGPOptParam(packet_base.StringifyMixin):
     _PACK_STR = '!BB'  # type, length

     def __init__(self, type_, value, length=None):
@@ -142,7 +141,7 @@ class BGPWithdrawnRoute(_IPAddrPrefix):
     pass


-class BGPPathAttribute(StringifyMixin):
+class BGPPathAttribute(packet_base.StringifyMixin):
     _PACK_STR = '!BB'  # flags, type
     _PACK_STR_LEN = '!B'  # length
     _PACK_STR_EXT_LEN = '!H'  # length w/ BGP_ATTR_FLAG_EXTENDED_LENGTH
@@ -287,6 +286,7 @@ class BGPOpen(BGPMessage):

     _PACK_STR = '!BHH4sB'
     _MIN_LEN = BGPMessage._HDR_LEN + struct.calcsize(_PACK_STR)
+    _class_prefixes = ['BGPOptParam']

     def __init__(self, my_as, bgp_identifier, type_=BGP_MSG_OPEN,
                  opt_param_len=0, opt_param=[],
@@ -368,6 +368,7 @@ class BGPUpdate(BGPMessage):
                                The default is [].
     ========================== ===============================================
     """
+    _class_prefixes = ['BGPWithdrawnRoute', 'BGPPathAttribute', 'BGPNLRI']

     def __init__(self, type_=BGP_MSG_UPDATE,
                  withdrawn_routes_len=None,
diff --git a/ryu/lib/packet/dhcp.py b/ryu/lib/packet/dhcp.py
index 3b2b97b..257d174 100644
--- a/ryu/lib/packet/dhcp.py
+++ b/ryu/lib/packet/dhcp.py
@@ -58,7 +58,6 @@ import struct

 from . import packet_base
 from ryu.lib import addrconv
-from ryu.lib import stringify


 DHCP_BOOT_REQUEST = 1
@@ -139,6 +138,7 @@ class dhcp(packet_base.PacketBase):
     _DHCP_PACK_STR = '!BBBBIHH4s4s4s4s16s64s128s'
     _DHCP_CHADDR_LEN = 16
     _HARDWARE_TYPE_ETHERNET = 1
+    _class_prefixes = ['options']

     def __init__(self, op, chaddr, options, htype=_HARDWARE_TYPE_ETHERNET,
                  hlen=0, hops=0, xid=None, secs=0, flags=0,
@@ -203,7 +203,7 @@ class dhcp(packet_base.PacketBase):
                            self.sname, self.boot_file, seri_opt)


-class options(stringify.StringifyMixin):
+class options(packet_base.StringifyMixin):
     """DHCP (RFC 2132) options encoder/decoder class.

     This is used with ryu.lib.packet.dhcp.dhcp.
@@ -230,6 +230,7 @@ class options(stringify.StringifyMixin):
     # same magic cookie as is defined in RFC 1497
     _MAGIC_COOKIE = '99.130.83.99'
     _OPT_TAG_LEN_BYTE = 2
+    _class_prefixes = ['option']

     def __init__(self, option_list=None, options_len=0,
                  magic_cookie=_MAGIC_COOKIE):
@@ -266,7 +267,7 @@ class options(stringify.StringifyMixin):
         return seri_opt


-class option(stringify.StringifyMixin):
+class option(packet_base.StringifyMixin):
     """DHCP (RFC 2132) options encoder/decoder class.

     This is used with ryu.lib.packet.dhcp.dhcp.options.
diff --git a/ryu/lib/packet/icmp.py b/ryu/lib/packet/icmp.py
index a07a5c7..352b92f 100644
--- a/ryu/lib/packet/icmp.py
+++ b/ryu/lib/packet/icmp.py
@@ -17,7 +17,6 @@ import struct

 from . import packet_base
 from . import packet_utils
-from ryu.lib import stringify


 ICMP_ECHO_REPLY = 0
@@ -117,7 +116,7 @@ class icmp(packet_base.PacketBase):


 @icmp.register_icmp_type(ICMP_ECHO_REPLY, ICMP_ECHO_REQUEST)
-class echo(stringify.StringifyMixin):
+class echo(packet_base.StringifyMixin):
     """ICMP sub encoder/decoder class for Echo and Echo Reply messages.

     This is used with ryu.lib.packet.icmp.icmp for
@@ -169,7 +168,7 @@ class echo(stringify.StringifyMixin):


 @icmp.register_icmp_type(ICMP_DEST_UNREACH)
-class dest_unreach(stringify.StringifyMixin):
+class dest_unreach(packet_base.StringifyMixin):
     """ICMP sub encoder/decoder class for Destination Unreachable Message.

     This is used with ryu.lib.packet.icmp.icmp for
@@ -229,7 +228,7 @@ class dest_unreach(stringify.StringifyMixin):


 @icmp.register_icmp_type(ICMP_TIME_EXCEEDED)
-class TimeExceeded(stringify.StringifyMixin):
+class TimeExceeded(packet_base.StringifyMixin):
     """ICMP sub encoder/decoder class for Time Exceeded Message.

     This is used with ryu.lib.packet.icmp.icmp for
@@ -276,3 +275,6 @@ class TimeExceeded(stringify.StringifyMixin):
             hdr += self.data

         return hdr
+
+
+icmp.set_classes(icmp._ICMP_TYPES)
diff --git a/ryu/lib/packet/icmpv6.py b/ryu/lib/packet/icmpv6.py
index f9049f6..9c3872f 100644
--- a/ryu/lib/packet/icmpv6.py
+++ b/ryu/lib/packet/icmpv6.py
@@ -21,7 +21,6 @@ import binascii
 from . import packet_base
 from . import packet_utils
 from ryu.lib import addrconv
-from ryu.lib import stringify

 ICMPV6_DST_UNREACH = 1       # dest unreachable, codes:
 ICMPV6_PACKET_TOO_BIG = 2       # packet too big
@@ -129,7 +128,7 @@ class icmpv6(packet_base.PacketBase):


 @icmpv6.register_icmpv6_type(ND_NEIGHBOR_SOLICIT, ND_NEIGHBOR_ADVERT)
-class nd_neighbor(stringify.StringifyMixin):
+class nd_neighbor(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Neighbor Solicitation and
     Neighbor Advertisement messages. (RFC 4861)

@@ -215,7 +214,7 @@ class nd_neighbor(stringify.StringifyMixin):


 @icmpv6.register_icmpv6_type(ND_ROUTER_SOLICIT)
-class nd_router_solicit(stringify.StringifyMixin):
+class nd_router_solicit(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Router Solicitation messages.
     (RFC 4861)

@@ -293,7 +292,7 @@ class nd_router_solicit(stringify.StringifyMixin):


 @icmpv6.register_icmpv6_type(ND_ROUTER_ADVERT)
-class nd_router_advert(stringify.StringifyMixin):
+class nd_router_advert(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Router Advertisement messages.
     (RFC 4861)

@@ -400,7 +399,7 @@ class nd_router_advert(stringify.StringifyMixin):
                                      nd_neighbor.ND_OPTION_TLA)
 @nd_router_solicit.register_nd_option_type(nd_router_solicit.ND_OPTION_SLA)
 @nd_router_advert.register_nd_option_type(nd_router_advert.ND_OPTION_SLA)
-class nd_option_la(stringify.StringifyMixin):
+class nd_option_la(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Neighbor discovery
     Source/Target Link-Layer Address Option. (RFC 4861)

@@ -457,7 +456,7 @@ class nd_option_la(stringify.StringifyMixin):


 @nd_router_advert.register_nd_option_type(nd_router_advert.ND_OPTION_PI)
-class nd_option_pi(stringify.StringifyMixin):
+class nd_option_pi(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Neighbor discovery
     Prefix Information Option. (RFC 4861)

@@ -514,7 +513,7 @@ class nd_option_pi(stringify.StringifyMixin):


 @icmpv6.register_icmpv6_type(ICMPV6_ECHO_REPLY, ICMPV6_ECHO_REQUEST)
-class echo(stringify.StringifyMixin):
+class echo(packet_base.StringifyMixin):
     """ICMPv6 sub encoder/decoder class for Echo Request and Echo Reply
     messages.

@@ -560,3 +559,9 @@ class echo(stringify.StringifyMixin):
             hdr += bytearray(self.data)

         return hdr
+
+
+icmpv6.set_classes(icmpv6._ICMPV6_TYPES)
+nd_neighbor.set_classes(nd_neighbor._ND_OPTION_TYPES)
+nd_router_solicit.set_classes(nd_router_solicit._ND_OPTION_TYPES)
+nd_router_advert.set_classes(nd_router_advert._ND_OPTION_TYPES)
diff --git a/ryu/lib/packet/ipv6.py b/ryu/lib/packet/ipv6.py
index 4131491..59316ef 100644
--- a/ryu/lib/packet/ipv6.py
+++ b/ryu/lib/packet/ipv6.py
@@ -21,7 +21,6 @@ from . import tcp
 from . import udp
 from ryu.ofproto import inet
 from ryu.lib import addrconv
-from ryu.lib import stringify


 IPV6_ADDRESS_PACK_STR = '!16s'
@@ -133,7 +132,7 @@ ipv6.register_packet_type(tcp.tcp, inet.IPPROTO_TCP)
 ipv6.register_packet_type(udp.udp, inet.IPPROTO_UDP)


-class header(stringify.StringifyMixin):
+class header(packet_base.StringifyMixin):
     """extension header abstract class."""

     __metaclass__ = abc.ABCMeta
@@ -164,6 +163,7 @@ class opt_header(header):
     _PACK_STR = '!BB'
     _MIN_LEN = struct.calcsize(_PACK_STR)
     _FIX_SIZE = 8
+    _class_prefixes = ['option']

     @abc.abstractmethod
     def __init__(self, nxt, size, data):
@@ -254,7 +254,7 @@ class dst_opts(opt_header):
         super(dst_opts, self).__init__(nxt, size, data)


-class option(stringify.StringifyMixin):
+class option(packet_base.StringifyMixin):
     """IPv6 (RFC 2460) Options header encoder/decoder class.

     This is used with ryu.lib.packet.ipv6.hop_opts or
@@ -420,3 +420,6 @@ class auth(header):

     def __len__(self):
         return auth._get_size(self.size)
+
+
+ipv6.set_classes(ipv6._IPV6_EXT_HEADER_TYPE)
diff --git a/ryu/lib/packet/llc.py b/ryu/lib/packet/llc.py
index 7601dce..87bc85b 100644
--- a/ryu/lib/packet/llc.py
+++ b/ryu/lib/packet/llc.py
@@ -90,7 +90,6 @@ Control field
 import struct
 from . import bpdu
 from . import packet_base
-from ryu.lib import stringify


 SAP_BPDU = 0x42
@@ -167,7 +166,7 @@ class llc(packet_base.PacketBase):


 @llc.register_control_type
-class ControlFormatI(stringify.StringifyMixin):
+class ControlFormatI(packet_base.StringifyMixin):
     """LLC sub encoder/decoder class for control I-format field.

     An instance has the following attributes at least.
@@ -216,7 +215,7 @@ class ControlFormatI(stringify.StringifyMixin):


 @llc.register_control_type
-class ControlFormatS(stringify.StringifyMixin):
+class ControlFormatS(packet_base.StringifyMixin):
     """LLC sub encoder/decoder class for control S-format field.

     An instance has the following attributes at least.
@@ -268,7 +267,7 @@ class ControlFormatS(stringify.StringifyMixin):


 @llc.register_control_type
-class ControlFormatU(stringify.StringifyMixin):
+class ControlFormatU(packet_base.StringifyMixin):
     """LLC sub encoder/decoder class for control U-format field.

     An instance has the following attributes at least.
@@ -318,3 +317,4 @@ class ControlFormatU(stringify.StringifyMixin):


 llc.register_packet_type(bpdu.bpdu, SAP_BPDU)
+llc.set_classes(llc._CTR_TYPES)
diff --git a/ryu/lib/packet/lldp.py b/ryu/lib/packet/lldp.py
index 41dc297..71b9829 100644
--- a/ryu/lib/packet/lldp.py
+++ b/ryu/lib/packet/lldp.py
@@ -41,7 +41,6 @@ optional TLV may be inserted in any order
 """

 import struct
-from ryu.lib import stringify
 from ryu.lib.packet import packet_base


@@ -71,7 +70,7 @@ LLDP_TLV_MANAGEMENT_ADDRESS = 8         # Management Address
 LLDP_TLV_ORGANIZATIONALLY_SPECIFIC = 127  # organizationally Specific TLVs


-class LLDPBasicTLV(stringify.StringifyMixin):
+class LLDPBasicTLV(packet_base.StringifyMixin):
     _LEN_MIN = 0
     _LEN_MAX = 511
     tlv_type = None
@@ -482,3 +481,6 @@ class OrganizationallySpecific(LLDPBasicTLV):

     def serialize(self):
         return struct.pack('!H3sB', self.typelen, self.oui, self.subtype)
+
+
+lldp.set_classes(lldp._tlv_parsers)
diff --git a/ryu/lib/packet/packet_base.py b/ryu/lib/packet/packet_base.py
index cbc213f..71a9d2d 100644
--- a/ryu/lib/packet/packet_base.py
+++ b/ryu/lib/packet/packet_base.py
@@ -17,7 +17,17 @@ import abc
 from ryu.lib import stringify


-class PacketBase(stringify.StringifyMixin):
+class StringifyMixin(stringify.StringifyMixin):
+
+    @classmethod
+    def set_classes(cls, registed_dict):
+        cls._class_prefixes = []
+        for cls_ in registed_dict.values():
+            cls._class_prefixes.append(cls_.__name__)
+        cls._class_prefixes = sorted(set(cls._class_prefixes))
+
+
+class PacketBase(StringifyMixin):
     """A base class for a protocol (ethernet, ipv4, ...) header."""
     __metaclass__ = abc.ABCMeta
     _TYPES = {}
-- 
1.7.10.4


------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from 
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60133471&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to