Signed-off-by: Isaku Yamahata <[email protected]>
---
 ryu/ofproto/ofproto_v1_0_parser.py |  144 ++++++++++++++++--------------------
 1 file changed, 64 insertions(+), 80 deletions(-)

diff --git a/ryu/ofproto/ofproto_v1_0_parser.py 
b/ryu/ofproto/ofproto_v1_0_parser.py
index 95c60b7..7081c31 100644
--- a/ryu/ofproto/ofproto_v1_0_parser.py
+++ b/ryu/ofproto/ofproto_v1_0_parser.py
@@ -476,17 +476,17 @@ class NXActionHeader(OFPActionVendor):
     _NX_ACTION_SUBTYPES = {}
 
     @staticmethod
-    def register_nx_action_subtype(subtype):
+    def register_nx_action_subtype(subtype, len_):
         def _register_nx_action_subtype(cls):
+            cls.cls_action_len = len_
             cls.cls_subtype = subtype
             NXActionHeader._NX_ACTION_SUBTYPES[cls.cls_subtype] = cls
             return cls
         return _register_nx_action_subtype
 
-    def __init__(self, subtype_, len_):
+    def __init__(self):
         super(NXActionHeader, self).__init__()
-        self.len = len_
-        self.subtype = subtype_
+        self.subtype = self.cls_subtype
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.OFP_ACTION_HEADER_PACK_STR,
@@ -501,11 +501,10 @@ class NXActionHeader(OFPActionVendor):
 
 
 class NXActionResubmitBase(NXActionHeader):
-    def __init__(self, subtype, in_port, table):
-        assert subtype in (ofproto_v1_0.NXAST_RESUBMIT,
-                           ofproto_v1_0.NXAST_RESUBMIT_TABLE)
-        super(NXActionResubmitBase, self).__init__(
-            subtype, ofproto_v1_0.NX_ACTION_RESUBMIT_SIZE)
+    def __init__(self, in_port, table):
+        super(NXActionResubmitBase, self).__init__()
+        assert self.subtype in (ofproto_v1_0.NXAST_RESUBMIT,
+                                ofproto_v1_0.NXAST_RESUBMIT_TABLE)
         self.in_port = in_port
         self.table = table
 
@@ -515,11 +514,11 @@ class NXActionResubmitBase(NXActionHeader):
                       self.in_port, self.table)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_RESUBMIT)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_RESUBMIT, ofproto_v1_0.NX_ACTION_RESUBMIT_SIZE)
 class NXActionResubmit(NXActionResubmitBase):
     def __init__(self, in_port=ofproto_v1_0.OFPP_IN_PORT):
-        super(NXActionResubmit, self).__init__(
-            ofproto_v1_0.NXAST_RESUBMIT, in_port, 0)
+        super(NXActionResubmit, self).__init__(in_port, 0)
 
     @classmethod
     def parser(cls, buf, offset):
@@ -528,11 +527,11 @@ class NXActionResubmit(NXActionResubmitBase):
         return cls(in_port)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_RESUBMIT_TABLE)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_RESUBMIT_TABLE, ofproto_v1_0.NX_ACTION_RESUBMIT_SIZE)
 class NXActionResubmitTable(NXActionResubmitBase):
     def __init__(self, in_port=ofproto_v1_0.OFPP_IN_PORT, table=0xff):
-        super(NXActionResubmitTable, self).__init__(
-            ofproto_v1_0.NXAST_RESUBMIT_TABLE, in_port, table)
+        super(NXActionResubmitTable, self).__init__(in_port, table)
 
     @classmethod
     def parser(cls, buf, offset):
@@ -541,13 +540,12 @@ class NXActionResubmitTable(NXActionResubmitBase):
         return cls(in_port, table)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_SET_TUNNEL)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_SET_TUNNEL, ofproto_v1_0.NX_ACTION_SET_TUNNEL_SIZE)
 class NXActionSetTunnel(NXActionHeader):
     def __init__(self, tun_id_):
+        super(NXActionSetTunnel, self).__init__()
         self.tun_id = tun_id_
-        super(NXActionSetTunnel, self).__init__(
-            ofproto_v1_0.NXAST_SET_TUNNEL,
-            ofproto_v1_0.NX_ACTION_SET_TUNNEL_SIZE)
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.NX_ACTION_SET_TUNNEL_PACK_STR, buf,
@@ -561,12 +559,11 @@ class NXActionSetTunnel(NXActionHeader):
         return cls(tun_id)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_SET_QUEUE)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_SET_QUEUE, ofproto_v1_0.NX_ACTION_SET_QUEUE_SIZE)
 class NXActionSetQueue(NXActionHeader):
     def __init__(self, queue_id):
-        super(NXActionSetQueue, self).__init__(
-            ofproto_v1_0.NXAST_SET_QUEUE,
-            ofproto_v1_0.NX_ACTION_SET_QUEUE_SIZE)
+        super(NXActionSetQueue, self).__init__()
         self.queue_id = queue_id
 
     def serialize(self, buf, offset):
@@ -581,12 +578,11 @@ class NXActionSetQueue(NXActionHeader):
         return cls(queue_id)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_POP_QUEUE)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_POP_QUEUE, ofproto_v1_0.NX_ACTION_POP_QUEUE_SIZE)
 class NXActionPopQueue(NXActionHeader):
     def __init__(self):
-        super(NXActionPopQueue, self).__init__(
-            ofproto_v1_0.NXAST_POP_QUEUE,
-            ofproto_v1_0.NX_ACTION_POP_QUEUE_SIZE)
+        super(NXActionPopQueue, self).__init__()
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.NX_ACTION_POP_QUEUE_PACK_STR, buf,
@@ -600,12 +596,11 @@ class NXActionPopQueue(NXActionHeader):
         return cls()
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_REG_MOVE)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_REG_MOVE, ofproto_v1_0.NX_ACTION_REG_MOVE_SIZE)
 class NXActionRegMove(NXActionHeader):
     def __init__(self, n_bits, src_ofs, dst_ofs, src, dst):
-        super(NXActionRegMove, self).__init__(
-            ofproto_v1_0.NXAST_REG_MOVE,
-            ofproto_v1_0.NX_ACTION_REG_MOVE_SIZE)
+        super(NXActionRegMove, self).__init__()
         self.n_bits = n_bits
         self.src_ofs = src_ofs
         self.dst_ofs = dst_ofs
@@ -626,12 +621,11 @@ class NXActionRegMove(NXActionHeader):
         return cls(n_bits, src_ofs, dst_ofs, src, dst)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_REG_LOAD)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_REG_LOAD, ofproto_v1_0.NX_ACTION_REG_LOAD_SIZE)
 class NXActionRegLoad(NXActionHeader):
     def __init__(self, ofs_nbits, dst, value):
-        super(NXActionRegLoad, self).__init__(
-            ofproto_v1_0.NXAST_REG_LOAD,
-            ofproto_v1_0.NX_ACTION_REG_LOAD_SIZE)
+        super(NXActionRegLoad, self).__init__()
         self.ofs_nbits = ofs_nbits
         self.dst = dst
         self.value = value
@@ -649,13 +643,12 @@ class NXActionRegLoad(NXActionHeader):
         return cls(ofs_nbits, dst, value)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_SET_TUNNEL64)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_SET_TUNNEL64, ofproto_v1_0.NX_ACTION_SET_TUNNEL64_SIZE)
 class NXActionSetTunnel64(NXActionHeader):
     def __init__(self, tun_id_):
+        super(NXActionSetTunnel64, self).__init__()
         self.tun_id = tun_id_
-        super(NXActionSetTunnel64, self).__init__(
-            ofproto_v1_0.NXAST_SET_TUNNEL64,
-            ofproto_v1_0.NX_ACTION_SET_TUNNEL64_SIZE)
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.NX_ACTION_SET_TUNNEL64_PACK_STR, buf,
@@ -669,13 +662,12 @@ class NXActionSetTunnel64(NXActionHeader):
         return cls(tun_id)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_MULTIPATH)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_MULTIPATH, ofproto_v1_0.NX_ACTION_MULTIPATH_SIZE)
 class NXActionMultipath(NXActionHeader):
     def __init__(self, fields, basis, algorithm, max_link, arg,
                  ofs_nbits, dst):
-        super(NXActionMultipath, self).__init__(
-            ofproto_v1_0.NXAST_MULTIPATH,
-            ofproto_v1_0.NX_ACTION_MULTIPATH_SIZE)
+        super(NXActionMultipath, self).__init__()
         self.fields = fields
         self.basis = basis
         self.algorithm = algorithm
@@ -699,17 +691,16 @@ class NXActionMultipath(NXActionHeader):
                    dst)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_NOTE)
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_NOTE, 0)
 class NXActionNote(NXActionHeader):
     def __init__(self, note):
+        super(NXActionNote, self).__init__()
         # should check here if the note is valid (only hex values)
         pad = (len(note) + 10) % 8
         if pad:
             note += [0x0 for i in range(8 - pad)]
         self.note = note
-        _len = len(note) + 10
-        super(NXActionNote, self).__init__(
-            ofproto_v1_0.NXAST_NOTE, _len)
+        self.len = len(note) + 10
 
     def serialize(self, buf, offset):
         note = self.note
@@ -741,11 +732,12 @@ class NXActionNote(NXActionHeader):
 
 
 class NXActionBundleBase(NXActionHeader):
-    def __init__(self, subtype, algorithm, fields, basis, slave_type, n_slaves,
+    def __init__(self, algorithm, fields, basis, slave_type, n_slaves,
                  ofs_nbits, dst, slaves):
+        super(NXActionBundleBase, self).__init__()
         _len = ofproto_v1_0.NX_ACTION_BUNDLE_SIZE + len(slaves) * 2
         _len += (_len % 8)
-        super(NXActionBundleBase, self).__init__(subtype, _len)
+        self.len = _len
 
         self.algorithm = algorithm
         self.fields = fields
@@ -792,12 +784,11 @@ class NXActionBundleBase(NXActionHeader):
                           n_slaves, ofs_nbits, dst, slaves)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_BUNDLE)
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_BUNDLE, 0)
 class NXActionBundle(NXActionBundleBase):
     def __init__(self, algorithm, fields, basis, slave_type, n_slaves,
                  ofs_nbits, dst, slaves):
         super(NXActionBundle, self).__init__(
-            ofproto_v1_0.NXAST_BUNDLE,
             algorithm, fields, basis, slave_type, n_slaves,
             ofs_nbits, dst, slaves)
 
@@ -806,12 +797,11 @@ class NXActionBundle(NXActionBundleBase):
         return NXActionBundleBase.parser(NXActionBundle, buf, offset)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_BUNDLE_LOAD)
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_BUNDLE_LOAD, 0)
 class NXActionBundleLoad(NXActionBundleBase):
     def __init__(self, algorithm, fields, basis, slave_type, n_slaves,
                  ofs_nbits, dst, slaves):
         super(NXActionBundleLoad, self).__init__(
-            ofproto_v1_0.NXAST_BUNDLE_LOAD,
             algorithm, fields, basis, slave_type, n_slaves,
             ofs_nbits, dst, slaves)
 
@@ -820,12 +810,11 @@ class NXActionBundleLoad(NXActionBundleBase):
         return NXActionBundleBase.parser(NXActionBundleLoad, buf, offset)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_AUTOPATH)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_AUTOPATH, ofproto_v1_0.NX_ACTION_AUTOPATH_SIZE)
 class NXActionAutopath(NXActionHeader):
     def __init__(self, ofs_nbits, dst, id_):
-        super(NXActionAutopath, self).__init__(
-            ofproto_v1_0.NXAST_AUTOPATH,
-            ofproto_v1_0.NX_ACTION_AUTOPATH_SIZE)
+        super(NXActionAutopath, self).__init__()
         self.ofs_nbits = ofs_nbits
         self.dst = dst
         self.id = id_
@@ -843,12 +832,11 @@ class NXActionAutopath(NXActionHeader):
         return cls(ofs_nbits, dst, id_)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_OUTPUT_REG)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_OUTPUT_REG, ofproto_v1_0.NX_ACTION_OUTPUT_REG_SIZE)
 class NXActionOutputReg(NXActionHeader):
     def __init__(self, ofs_nbits, src, max_len):
-        super(NXActionOutputReg, self).__init__(
-            ofproto_v1_0.NXAST_OUTPUT_REG,
-            ofproto_v1_0.NX_ACTION_OUTPUT_REG_SIZE)
+        super(NXActionOutputReg, self).__init__()
         self.ofs_nbits = ofs_nbits
         self.src = src
         self.max_len = max_len
@@ -866,12 +854,11 @@ class NXActionOutputReg(NXActionHeader):
         return cls(ofs_nbits, src, max_len)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_EXIT)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_EXIT, ofproto_v1_0.NX_ACTION_HEADER_SIZE)
 class NXActionExit(NXActionHeader):
     def __init__(self):
-        super(NXActionExit, self).__init__(
-            ofproto_v1_0.NXAST_EXIT,
-            ofproto_v1_0.NX_ACTION_HEADER_SIZE)
+        super(NXActionExit, self).__init__()
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.NX_ACTION_HEADER_PACK_STR, buf, offset,
@@ -884,12 +871,11 @@ class NXActionExit(NXActionHeader):
         return cls()
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_DEC_TTL)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_DEC_TTL, ofproto_v1_0.NX_ACTION_HEADER_SIZE)
 class NXActionDecTtl(NXActionHeader):
     def __init__(self):
-        super(NXActionDecTtl, self).__init__(
-            ofproto_v1_0.NXAST_DEC_TTL,
-            ofproto_v1_0.NX_ACTION_HEADER_SIZE)
+        super(NXActionDecTtl, self).__init__()
 
     def serialize(self, buf, offset):
         msg_pack_into(ofproto_v1_0.NX_ACTION_HEADER_PACK_STR, buf, offset,
@@ -902,15 +888,15 @@ class NXActionDecTtl(NXActionHeader):
         return cls()
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_LEARN)
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_LEARN, 0)
 class NXActionLearn(NXActionHeader):
     def __init__(self, idle_timeout, hard_timeout, priority, cookie, flags,
                  table_id, fin_idle_timeout, fin_hard_timeout, spec):
+        super(NXActionLearn, self).__init__()
         len_ = len(spec) + ofproto_v1_0.NX_ACTION_LEARN_SIZE
         pad_len = 8 - (len_ % 8)
+        self.len = len_ + pad_len
 
-        super(NXActionLearn, self).__init__(
-            ofproto_v1_0.NXAST_LEARN, len_ + pad_len)
         self.idle_timeout = idle_timeout
         self.hard_timeout = hard_timeout
         self.priority = priority
@@ -941,12 +927,11 @@ class NXActionLearn(NXActionHeader):
                    fin_hard_timeout, spec)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_CONTROLLER)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_CONTROLLER, ofproto_v1_0.NX_ACTION_CONTROLLER_SIZE)
 class NXActionController(NXActionHeader):
     def __init__(self, max_len, controller_id, reason):
-        super(NXActionController, self).__init__(
-            ofproto_v1_0.NXAST_CONTROLLER,
-            ofproto_v1_0.NX_ACTION_CONTROLLER_SIZE)
+        super(NXActionController, self).__init__()
         self.max_len = max_len
         self.controller_id = controller_id
         self.reason = reason
@@ -964,12 +949,11 @@ class NXActionController(NXActionHeader):
         return cls(max_len, controller_id, reason)
 
 
[email protected]_nx_action_subtype(ofproto_v1_0.NXAST_FIN_TIMEOUT)
[email protected]_nx_action_subtype(
+    ofproto_v1_0.NXAST_FIN_TIMEOUT, ofproto_v1_0.NX_ACTION_FIN_TIMEOUT_SIZE)
 class NXActionFinTimeout(NXActionHeader):
     def __init__(self, fin_idle_timeout, fin_hard_timeout):
-        super(NXActionFinTimeout, self).__init__(
-            ofproto_v1_0.NXAST_FIN_TIMEOUT,
-            ofproto_v1_0.NX_ACTION_FIN_TIMEOUT_SIZE)
+        super(NXActionFinTimeout, self).__init__()
         self.fin_idle_timeout = fin_idle_timeout
         self.fin_hard_timeout = fin_hard_timeout
 
-- 
1.7.10.4


------------------------------------------------------------------------------
Learn Graph Databases - Download FREE O'Reilly Book
"Graph Databases" is the definitive new guide to graph databases and 
their applications. This 200-page book is written by three acclaimed 
leaders in the field. The early access version is available now. 
Download your free book today! http://p.sf.net/sfu/neotech_d2d_may
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to