[Ryu-devel] [PATCH 10/10] test_oxm: Add UTs for 64-bit experimenter OXMs
Brought to you by:
nz_gizmoguy
|
From: YAMAMOTO T. <yam...@va...> - 2015-01-16 08:20:24
|
Following Open vSwitch, introduce "dp_hash" OXM for testing.
>From their commit log: (commit 508a933809f8a8ede4fb93f1c1e3212799efc16a)
> Testing experimenter OXM is tricky because I do not know of any in
> widespread use. Two ONF proposals use experimenter OXMs: EXT-256 and
> EXT-233. EXT-256 is not suitable to implement for testing because its use
> of experimenter OXM is wrong and will be changed. EXT-233 is not suitable
> to implement for testing because it requires adding a new field to struct
> flow and I am not yet convinced that that field and the feature that it
> supports is worth having in Open vSwitch. Thus, this commit assigns an
> experimenter OXM code point to an existing OVS field that is currently
> restricted from use by controllers, "dp_hash", and uses that for testing.
> Because controllers cannot use it, this leaves future versions of OVS free
> to drop the support for the experimenter OXM for this field without causing
> backward compatibility problems.
Signed-off-by: YAMAMOTO Takashi <yam...@va...>
---
ryu/ofproto/ofproto_v1_3.py | 6 ++++++
ryu/ofproto/oxm_fields.py | 4 ++++
ryu/tests/unit/ofproto/test_oxm.py | 19 +++++++++++++++++++
3 files changed, 29 insertions(+)
diff --git a/ryu/ofproto/ofproto_v1_3.py b/ryu/ofproto/ofproto_v1_3.py
index 16c4797..4a6dcfe 100644
--- a/ryu/ofproto/ofproto_v1_3.py
+++ b/ryu/ofproto/ofproto_v1_3.py
@@ -1179,6 +1179,12 @@ oxm_types = [
oxm_fields.ONFExperimenter('pbb_uca', 2560, oxm_fields.Int1),
oxm_fields.NiciraExtended1('tun_ipv4_src', 31, oxm_fields.IPv4Addr),
oxm_fields.NiciraExtended1('tun_ipv4_dst', 32, oxm_fields.IPv4Addr),
+
+ # The following definition is merely for testing 64-bit experimenter OXMs.
+ # Following Open vSwitch, we use dp_hash for this purpose.
+ # Prefix the name with '_' to indicate this is not intended to be used
+ # in wild.
+ oxm_fields.NiciraExperimenter('_dp_hash', 0, oxm_fields.Int4),
]
oxm_fields.generate(__name__)
diff --git a/ryu/ofproto/oxm_fields.py b/ryu/ofproto/oxm_fields.py
index ab33cdd..0004f86 100644
--- a/ryu/ofproto/oxm_fields.py
+++ b/ryu/ofproto/oxm_fields.py
@@ -150,6 +150,10 @@ class ONFExperimenter(_Experimenter):
self.exp_type = num
+class NiciraExperimenter(_Experimenter):
+ experimenter_id = ofproto_common.NX_EXPERIMENTER_ID
+
+
class NiciraExtended0(_OxmClass):
"""Nicira Extended Match (NXM_0)
diff --git a/ryu/tests/unit/ofproto/test_oxm.py b/ryu/tests/unit/ofproto/test_oxm.py
index b333667..a2047f8 100644
--- a/ryu/tests/unit/ofproto/test_oxm.py
+++ b/ryu/tests/unit/ofproto/test_oxm.py
@@ -75,6 +75,25 @@ class Test_OXM(unittest.TestCase):
)
self._test(user, on_wire, 4)
+ def test_exp_nomask(self):
+ user = ('_dp_hash', 0x12345678)
+ on_wire = (
+ b'\xff\xff\x00\x08'
+ b'\x00\x00\x23\x20' # Nicira
+ b'\x12\x34\x56\x78'
+ )
+ self._test(user, on_wire, 8)
+
+ def test_exp_mask(self):
+ user = ('_dp_hash', (0x12345678, 0x7fffffff))
+ on_wire = (
+ b'\xff\xff\x01\x0c'
+ b'\x00\x00\x23\x20' # Nicira
+ b'\x12\x34\x56\x78'
+ b'\x7f\xff\xff\xff'
+ )
+ self._test(user, on_wire, 8)
+
def test_nxm_1_nomask(self):
user = ('tun_ipv4_src', '192.0.2.1')
on_wire = (
--
2.1.0
|