diff options
author | Simon Horman <horms@verge.net.au> | 2014-02-04 13:27:51 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2014-02-04 18:41:32 +0900 |
commit | 03a9196e4366458c436fe29dade25b4ff78c54c3 (patch) | |
tree | 440dc5cea624303da8c4e4df6fbcdbe9ec92890c | |
parent | c8d6444e0c75cd4c6e8116df684836fcd55321bb (diff) |
of14: Add _ordered_fields to .4 OFPMatch
This appears to be necessary for wire tests
to pass if matches are in an order different
from that defined by Ryu.
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_parser.py | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/ryu/ofproto/ofproto_v1_4_parser.py b/ryu/ofproto/ofproto_v1_4_parser.py index b53589d5..567051c6 100644 --- a/ryu/ofproto/ofproto_v1_4_parser.py +++ b/ryu/ofproto/ofproto_v1_4_parser.py @@ -641,17 +641,25 @@ class OFPMatch(StringifyMixin): ('2001:db8:bd05:1d2:288a:1fc0:1:10ee', 'ffff:ffff:ffff:ffff::') """ - def __init__(self, type_=None, length=None, **kwargs): + def __init__(self, type_=None, length=None, _ordered_fields=None, + **kwargs): super(OFPMatch, self).__init__() self.type = ofproto.OFPMT_OXM self.length = length - kwargs = dict(ofproto.oxm_normalize_user(k, v) for - (k, v) in kwargs.iteritems()) - fields = [ofproto.oxm_from_user(k, v) for (k, v) - in kwargs.iteritems()] - fields.sort() - self._fields2 = [ofproto.oxm_to_user(n, v, m) for (n, v, m) - in fields] + + if not _ordered_fields is None: + assert not kwargs + self._fields2 = _ordered_fields + else: + kwargs = dict(ofproto.oxm_normalize_user(k, v) for + (k, v) in kwargs.iteritems()) + fields = [ofproto.oxm_from_user(k, v) for (k, v) + in kwargs.iteritems()] + # assumption: sorting by OXM type values makes fields + # meet ordering requirements (eg. eth_type before ipv4_src) + fields.sort() + self._fields2 = [ofproto.oxm_to_user(n, v, m) for (n, v, m) + in fields] @classmethod def parser(cls, buf, offset): @@ -738,7 +746,7 @@ class OFPMatch(StringifyMixin): """ fields = [ofproto.oxm_from_jsondict(f) for f in dict_['oxm_fields']] - return OFPMatch(**dict(fields)) + return OFPMatch(_ordered_fields=fields) class OFPPortDescPropUnknown(StringifyMixin): |