summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSimon Horman <horms@verge.net.au>2014-02-04 13:27:51 +0900
committerFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>2014-02-04 18:41:32 +0900
commit03a9196e4366458c436fe29dade25b4ff78c54c3 (patch)
tree440dc5cea624303da8c4e4df6fbcdbe9ec92890c
parentc8d6444e0c75cd4c6e8116df684836fcd55321bb (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.py26
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):