summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ryu/ofproto/oxm_fields.py7
-rw-r--r--ryu/ofproto/oxs_fields.py5
-rw-r--r--ryu/ofproto/oxx_fields.py5
3 files changed, 13 insertions, 4 deletions
diff --git a/ryu/ofproto/oxm_fields.py b/ryu/ofproto/oxm_fields.py
index e30f0005..0c5e4597 100644
--- a/ryu/ofproto/oxm_fields.py
+++ b/ryu/ofproto/oxm_fields.py
@@ -38,6 +38,10 @@
# | experimenter ID |
# +---------------------------------------------------------------+
+# NOTE: OpenFlow Spec 1.5 mandates that Experimenter OXMs encode
+# the experimenter type in the oxm_field field of the OXM header
+# (EXT-380).
+
# NOTE: EXT-256 had a variation of experimenter OXM header.
# It has been rectified since then. Currently this implementation
# supports only the old version.
@@ -106,6 +110,7 @@ class _Experimenter(_OxmClass):
def __init__(self, name, num, type_):
super(_Experimenter, self).__init__(name, num, type_)
self.num = (self.experimenter_id, self.oxm_type)
+ self.exp_type = self.oxm_field
class ONFExperimenter(_Experimenter):
@@ -119,7 +124,7 @@ class OldONFExperimenter(_Experimenter):
def __init__(self, name, num, type_):
super(OldONFExperimenter, self).__init__(name, 0, type_)
self.num = (self.experimenter_id, num)
- self.exp_type = num
+ self.exp_type = 2560
class NiciraExperimenter(_Experimenter):
diff --git a/ryu/ofproto/oxs_fields.py b/ryu/ofproto/oxs_fields.py
index 4169d3ad..fc4c9489 100644
--- a/ryu/ofproto/oxs_fields.py
+++ b/ryu/ofproto/oxs_fields.py
@@ -50,6 +50,10 @@
# | length | 8 | Length of OXS payload |
# +----------------------+-------+--------------------------------------------+
+# Assumption: The followings can be applied for OXSs too.
+# OpenFlow Spec 1.5 mandates that Experimenter OXMs encode the experimenter
+# type in the oxm_field field of the OXM header (EXT-380).
+
from ryu.ofproto.oxx_fields import (
_from_user,
_from_user_header,
@@ -94,6 +98,7 @@ class _Experimenter(_OxsClass):
def __init__(self, name, num, type_):
super(_Experimenter, self).__init__(name, num, type_)
self.num = (self.experimenter_id, self.oxs_type)
+ self.exp_type = self.oxs_field
def generate(modname):
diff --git a/ryu/ofproto/oxx_fields.py b/ryu/ofproto/oxx_fields.py
index be41a531..1e4c7c55 100644
--- a/ryu/ofproto/oxx_fields.py
+++ b/ryu/ofproto/oxx_fields.py
@@ -212,15 +212,14 @@ def _make_exp_hdr(oxx, mod, n):
(exp_id, exp_type) = n
assert desc.experimenter_id == exp_id
oxx_type = getattr(desc, oxx + '_type')
- if hasattr(desc, 'exp_type'): # XXX
+ if desc.exp_type == 2560:
# XXX
# This block implements EXT-256 style experimenter OXM.
- assert desc.exp_type == 2560
exp_hdr_pack_str = '!IH' # experimenter_id, exp_type
msg_pack_into(exp_hdr_pack_str, exp_hdr, 0,
desc.experimenter_id, desc.exp_type)
else:
- assert oxx_type == exp_type
+ assert oxx_type == exp_type | (OFPXXC_EXPERIMENTER << 7)
exp_hdr_pack_str = '!I' # experimenter_id
msg_pack_into(exp_hdr_pack_str, exp_hdr, 0,
desc.experimenter_id)