On Wed, 29 Jan 2014 12:05:49 +0900
Simon Horman <[email protected]> wrote:
> Prior to this patch the code serialises an OFPMatch as:
>
> "OFPMatch": {
> "oxm_fields": {
> "arp_op": 1,
> ...
> }
> }
>
> But the parser fails, complaining that "oxm_fields" is an unknown field name.
>
> Resolve this by using the same JSON format as OF1.3:
>
> "OFPMatch": {
> "length": 329,
> "oxm_fields": [
> {
> "OXMTlv": {
> "field": "in_port",
> "mask": null,
> "value": 84281096
> }
> },
> ...
> }
> }
>
> Signed-off-by: Simon Horman <[email protected]>
> ---
> ryu/ofproto/ofproto_v1_4_parser.py | 27 +++++++++++++++++++++++++++
> 1 file changed, 27 insertions(+)
>
> diff --git a/ryu/ofproto/ofproto_v1_4_parser.py
> b/ryu/ofproto/ofproto_v1_4_parser.py
> index 616e0f5..980f201 100644
> --- a/ryu/ofproto/ofproto_v1_4_parser.py
> +++ b/ryu/ofproto/ofproto_v1_4_parser.py
> @@ -478,6 +478,33 @@ class OFPMatch(StringifyMixin):
> def stringify_attrs(self):
> yield "oxm_fields", dict(self._fields2)
>
> + def to_jsondict(self):
> + """
> + Returns a dict expressing the flow match.
> + """
> + body = {"oxm_fields": [ofproto.oxm_to_jsondict(k, uv) for k, uv
> + in self._fields2],
> + "length": self.length,
> + "type": self.type}
> + return {self.__class__.__name__: body}
> +
> + @classmethod
> + def from_jsondict(cls, dict_):
> + """
> + Returns an object which is generated from a dict.
> +
> + Exception raises:
> + KeyError -- Unknown match field is defined in dict
> + """
> + fields = [ofproto.oxm_from_jsondict(f) for f
> + in dict_['oxm_fields']]
> + o = OFPMatch()
> + # XXX old api compat
> + # serialize and parse to fill OFPMatch.fields
> + buf = bytearray()
> + o.serialize(buf, 0)
> + return OFPMatch.parser(str(buf), 0)
Looks like from_jsondict() is broken. fields is not used to create
OFPmatch object. Here's a fix. We can avoid calling parser since we
dropped the old API.
=
>From 36d15083685a342a7cff635ba3fb677a2d857bc8 Mon Sep 17 00:00:00 2001
From: FUJITA Tomonori <[email protected]>
Date: Wed, 29 Jan 2014 15:09:06 +0900
Subject: [PATCH] of14: fix OFPMatch from_jsondict method
Signed-off-by: FUJITA Tomonori <[email protected]>
---
ryu/ofproto/ofproto_v1_4_parser.py | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/ryu/ofproto/ofproto_v1_4_parser.py
b/ryu/ofproto/ofproto_v1_4_parser.py
index c067bb3..4a4a0d8 100644
--- a/ryu/ofproto/ofproto_v1_4_parser.py
+++ b/ryu/ofproto/ofproto_v1_4_parser.py
@@ -738,12 +738,7 @@ class OFPMatch(StringifyMixin):
"""
fields = [ofproto.oxm_from_jsondict(f) for f
in dict_['oxm_fields']]
- o = OFPMatch()
- # XXX old api compat
- # serialize and parse to fill OFPMatch.fields
- buf = bytearray()
- o.serialize(buf, 0)
- return OFPMatch.parser(str(buf), 0)
+ return OFPMatch(**dict(fields))
class OFPPortDescPropUnknown(StringifyMixin):
--
1.8.3.4 (Apple Git-47)
------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable
security intelligence. It gives you real-time visual feedback on key
security issues and trends. Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel