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