diff options
author | Simon Horman <horms@verge.net.au> | 2014-01-29 12:06:09 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-01-29 12:42:56 +0900 |
commit | 845333136f7d7c1cd4fa830f01d4024e73274420 (patch) | |
tree | c3271af36a079d6c87f5805d32697736752bb5ce | |
parent | 0d0bd4592fa4b4368011723249f06b04c97dec7b (diff) |
Add OF1.4 experimenter message support
Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | ryu/ofproto/ofproto_v1_4.py | 5 | ||||
-rw-r--r-- | ryu/ofproto/ofproto_v1_4_parser.py | 40 |
2 files changed, 45 insertions, 0 deletions
diff --git a/ryu/ofproto/ofproto_v1_4.py b/ryu/ofproto/ofproto_v1_4.py index fcb1f053..48526bf1 100644 --- a/ryu/ofproto/ofproto_v1_4.py +++ b/ryu/ofproto/ofproto_v1_4.py @@ -917,6 +917,11 @@ OFP_ERROR_EXPERIMENTER_MSG_SIZE = 16 assert (calcsize(OFP_ERROR_EXPERIMENTER_MSG_PACK_STR) + OFP_HEADER_SIZE) == OFP_ERROR_EXPERIMENTER_MSG_SIZE +# struct ofp_experimenter_header +OFP_EXPERIMENTER_HEADER_PACK_STR = '!II' +OFP_EXPERIMENTER_HEADER_SIZE = 16 +assert (calcsize(OFP_EXPERIMENTER_HEADER_PACK_STR) + OFP_HEADER_SIZE + == OFP_EXPERIMENTER_HEADER_SIZE) # enum ofp_multipart_type OFPMP_DESC = 0 diff --git a/ryu/ofproto/ofproto_v1_4_parser.py b/ryu/ofproto/ofproto_v1_4_parser.py index 9abb1137..b2987058 100644 --- a/ryu/ofproto/ofproto_v1_4_parser.py +++ b/ryu/ofproto/ofproto_v1_4_parser.py @@ -360,6 +360,46 @@ class OFPFeaturesRequest(MsgBase): @_register_parser +@_set_msg_type(ofproto.OFPT_EXPERIMENTER) +class OFPExperimenter(MsgBase): + """ + Experimenter extension message + + ============= ========================================================= + Attribute Description + ============= ========================================================= + experimenter Experimenter ID + exp_type Experimenter defined + data Experimenter defined arbitrary additional data + ============= ========================================================= + """ + def __init__(self, datapath, experimenter=None, exp_type=None, data=None): + super(OFPExperimenter, self).__init__(datapath) + self.experimenter = experimenter + self.exp_type = exp_type + self.data = data + + @classmethod + def parser(cls, datapath, version, msg_type, msg_len, xid, buf): + msg = super(OFPExperimenter, cls).parser(datapath, version, + msg_type, msg_len, + xid, buf) + (msg.experimenter, msg.exp_type) = struct.unpack_from( + ofproto.OFP_EXPERIMENTER_HEADER_PACK_STR, msg.buf, + ofproto.OFP_HEADER_SIZE) + msg.data = msg.buf[ofproto.OFP_EXPERIMENTER_HEADER_SIZE:] + + return msg + + def _serialize_body(self): + assert self.data is not None + msg_pack_into(ofproto.OFP_EXPERIMENTER_HEADER_PACK_STR, + self.buf, ofproto.OFP_HEADER_SIZE, + self.experimenter, self.exp_type) + self.buf += self.data + + +@_register_parser @_set_msg_type(ofproto.OFPT_FEATURES_REPLY) class OFPSwitchFeatures(MsgBase): """ |