Add Switch to Controller Vendor message support

This enabls a vendor to register vendor's specific parser to handle
Switch to Controller Vendor messages.

An object that vendor's parser returns is placed at msg.data.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
This commit is contained in:
FUJITA Tomonori
2012-05-28 17:11:17 +09:00
parent 840aea5d39
commit 0c74a7755c

View File

@@ -1048,6 +1048,15 @@ class OFPEchoReply(MsgBase):
@_register_parser
@_set_msg_type(ofproto_v1_0.OFPT_VENDOR)
class OFPVendor(MsgBase):
_VENDORS = {}
@staticmethod
def register_vendor(id_):
def _register_vendor(cls):
OFPVendor._VENDORS[id_] = cls
return cls
return _register_vendor
def __init__(self, datapath):
super(OFPVendor, self).__init__(datapath)
self.data = None
@@ -1060,7 +1069,13 @@ class OFPVendor(MsgBase):
(msg.vendor,) = struct.unpack_from(
ofproto_v1_0.OFP_VENDOR_HEADER_PACK_STR, msg.buf,
ofproto_v1_0.OFP_HEADER_SIZE)
msg.data = msg.buf[ofproto_v1_0.OFP_VENDOR_HEADER_SIZE:]
cls_ = cls._VENDORS.get(msg.vendor)
if cls_:
msg.data = cls_.parser(datapath, msg.buf, 0)
else:
msg.data = msg.buf[ofproto_v1_0.OFP_VENDOR_HEADER_SIZE:]
return msg
def serialize_header(self):