On Wed, 29 Jan 2014 15:13:46 +0900 FUJITA Tomonori <[email protected]> wrote:
> 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)) Oops, somehow I misunderstood that you ack'ed this and merged. ------------------------------------------------------------------------------ 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
