In bpdu.py only one version was permitted with one type, before.
This patch improves parser so that it may be based on multiple versions and 
types.


Signed-off-by: WATANABE Fumitaka <[email protected]>
---
 ryu/lib/packet/bpdu.py |   12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/ryu/lib/packet/bpdu.py b/ryu/lib/packet/bpdu.py
index 8c39ec5..a98d35d 100644
--- a/ryu/lib/packet/bpdu.py
+++ b/ryu/lib/packet/bpdu.py
@@ -171,7 +171,8 @@ class bpdu(packet_base.PacketBase):

     @staticmethod
     def register_bpdu_type(sub_cls):
-        bpdu._BPDU_TYPES[sub_cls.BPDU_TYPE] = sub_cls
+        bpdu._BPDU_TYPES.setdefault(sub_cls.VERSION_ID, {})
+        bpdu._BPDU_TYPES[sub_cls.VERSION_ID][sub_cls.BPDU_TYPE] = sub_cls
         return sub_cls

     def __init__(self):
@@ -194,14 +195,13 @@ class bpdu(packet_base.PacketBase):
          bpdu_type) = struct.unpack_from(cls._PACK_STR, buf)
         assert protocol_id == PROTOCOL_IDENTIFIER

-        bpdu_cls = cls._BPDU_TYPES.get(bpdu_type, None)
-
-        if bpdu_cls:
-            assert version_id == bpdu_cls.VERSION_ID
+        if (version_id in cls._BPDU_TYPES
+                and bpdu_type in cls._BPDU_TYPES[version_id]):
+            bpdu_cls = cls._BPDU_TYPES[version_id][bpdu_type]
             assert len(buf[cls._PACK_LEN:]) >= bpdu_cls.PACK_LEN
             return bpdu_cls.parser(buf[cls._PACK_LEN:])
         else:
-            # Unknown bdpu type.
+            # Unknown bpdu version/type.
             return buf, None, None

     def serialize(self, payload, prev):
-- 
1.7.10.4


------------------------------------------------------------------------------
Rapidly troubleshoot problems before they affect your business. Most IT 
organizations don't have a clear picture of how application performance 
affects their revenue. With AppDynamics, you get 100% visibility into your 
Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro!
http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to