[ovs-dev] [PATCH 1/2] ovs-fields: Correct ideas about which OXM classes are official.
Ben Pfaff
blp at ovn.org
Fri May 18 17:16:40 UTC 2018
The purpose of including an OpenFlow version in the notes in meta-flow.h
and ovs-fields.7 is to explain what version of OpenFlow standardized a
given field. NXOXM_* are not standardized so they should not have an
OpenFlow version. This commit corrects it.
Signed-off-by: Ben Pfaff <blp at ovn.org>
---
build-aux/extract-ofp-fields | 36 +++++++++++++++++++++---------------
include/openvswitch/meta-flow.h | 22 +++++++++++-----------
2 files changed, 32 insertions(+), 26 deletions(-)
diff --git a/build-aux/extract-ofp-fields b/build-aux/extract-ofp-fields
index 184b75e36bef..359259432225 100755
--- a/build-aux/extract-ofp-fields
+++ b/build-aux/extract-ofp-fields
@@ -65,20 +65,19 @@ PREREQS = {"none": "MFP_NONE",
# - Experimenter OXM classes are written as (<oxm_vender>, 0xffff)
#
# If a name matches more than one prefix, the longest one is used.
-OXM_CLASSES = {"NXM_OF_": (0, 0x0000),
- "NXM_NX_": (0, 0x0001),
- "NXOXM_NSH_": (0x005ad650, 0xffff),
- "OXM_OF_": (0, 0x8000),
- "OXM_OF_PKT_REG": (0, 0x8001),
- "ONFOXM_ET_": (0x4f4e4600, 0xffff),
+OXM_CLASSES = {"NXM_OF_": (0, 0x0000, 'extension'),
+ "NXM_NX_": (0, 0x0001, 'extension'),
+ "NXOXM_NSH_": (0x005ad650, 0xffff, 'extension'),
+ "OXM_OF_": (0, 0x8000, 'standard'),
+ "OXM_OF_PKT_REG": (0, 0x8001, 'standard'),
+ "ONFOXM_ET_": (0x4f4e4600, 0xffff, 'standard'),
# This is the experimenter OXM class for Nicira, which is the
# one that OVS would be using instead of NXM_OF_ and NXM_NX_
# if OVS didn't have those grandfathered in. It is currently
# used only to test support for experimenter OXM, since there
# are barely any real uses of experimenter OXM in the wild.
- "NXOXM_ET_": (0x00002320, 0xffff)}
-
+ "NXOXM_ET_": (0x00002320, 0xffff, 'extension')}
def oxm_name_to_class(name):
prefix = ''
@@ -90,6 +89,11 @@ def oxm_name_to_class(name):
return class_
+def is_standard_oxm(name):
+ oxm_vendor, oxm_class, oxm_class_type = oxm_name_to_class(name)
+ return oxm_class_type == 'standard'
+
+
def decode_version_range(range):
if range in VERSION:
return (VERSION[range], VERSION[range])
@@ -167,7 +171,7 @@ def parse_oxm(s, prefix, n_bytes):
class_ = oxm_name_to_class(name)
if class_ is None:
fatal("unknown OXM class for %s" % name)
- oxm_vendor, oxm_class = class_
+ oxm_vendor, oxm_class, oxm_class_type = class_
if class_ in match_types:
if oxm_type in match_types[class_]:
@@ -186,14 +190,16 @@ def parse_oxm(s, prefix, n_bytes):
header = (oxm_vendor, oxm_class, int(oxm_type), oxm_length)
if of_version:
+ if oxm_class_type == 'extension':
+ fatal("%s: OXM extension can't have OpenFlow version" % name)
if of_version not in VERSION:
fatal("%s: unknown OpenFlow version %s" % (name, of_version))
of_version_nr = VERSION[of_version]
if of_version_nr < VERSION['1.2']:
fatal("%s: claimed version %s predates OXM" % (name, of_version))
- elif prefix == 'OXM':
- fatal("%s: missing OpenFlow version number" % name)
else:
+ if oxm_class_type == 'standard':
+ fatal("%s: missing OpenFlow version number" % name)
of_version_nr = 0
return (header, name, of_version_nr, ovs_version)
@@ -539,7 +545,7 @@ def field_to_xml(field_node, f, body, summary):
min_of_version = None
min_ovs_version = None
for header, name, of_version_nr, ovs_version_s in f['OXM']:
- if (not name.startswith('NXM')
+ if (is_standard_oxm(name)
and (min_ovs_version is None or of_version_nr < min_of_version)):
min_of_version = of_version_nr
ovs_version = [int(x) for x in ovs_version_s.split('.')]
@@ -612,7 +618,7 @@ l lx.
body += ["OpenFlow 1.1:;%s\n" % of11[f["OF1.1"]]]
oxms = []
- for header, name, of_version_nr, ovs_version in [x for x in sorted(f['OXM'], key=lambda x: x[2]) if not x[1].startswith('NXM')]:
+ for header, name, of_version_nr, ovs_version in [x for x in sorted(f['OXM'], key=lambda x: x[2]) if is_standard_oxm(x[1])]:
of_version = VERSION_REVERSE[of_version_nr]
oxms += [r"\fB%s\fR (%d) since OpenFlow %s and Open vSwitch %s" % (name, header[2], of_version, ovs_version)]
if not oxms:
@@ -620,7 +626,7 @@ l lx.
body += ['OXM:;T{\n%s\nT}\n' % r'\[char59] '.join(oxms)]
nxms = []
- for header, name, of_version_nr, ovs_version in [x for x in sorted(f['OXM'], key=lambda x: x[2]) if x[1].startswith('NXM')]:
+ for header, name, of_version_nr, ovs_version in [x for x in sorted(f['OXM'], key=lambda x: x[2]) if not is_standard_oxm(x[1])]:
nxms += [r"\fB%s\fR (%d) since Open vSwitch %s" % (name, header[2], ovs_version)]
if not nxms:
nxms = ['none']
@@ -664,7 +670,7 @@ Prefix;Vendor;Class
\_;\_;\_
'''
for key in sorted(OXM_CLASSES, key=OXM_CLASSES.get):
- vendor, class_ = OXM_CLASSES.get(key)
+ vendor, class_, class_type = OXM_CLASSES.get(key)
s += r"\fB%s\fR;" % key.rstrip('_')
if vendor:
s += r"\fL0x%08x\fR;" % vendor
diff --git a/include/openvswitch/meta-flow.h b/include/openvswitch/meta-flow.h
index 98c9e1cb5a76..e36f9d568c88 100644
--- a/include/openvswitch/meta-flow.h
+++ b/include/openvswitch/meta-flow.h
@@ -239,7 +239,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: none.
* Access: read-only.
* NXM: NXM_NX_DP_HASH(35) since v2.2.
- * OXM: NXOXM_ET_DP_HASH(0) since OF1.5 and v2.4.
+ * OXM: NXOXM_ET_DP_HASH(0) since v2.4.
*/
MFF_DP_HASH,
@@ -1754,7 +1754,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read/write.
* NXM: none.
- * OXM: NXOXM_NSH_FLAGS(1) since OF1.3 and v2.8.
+ * OXM: NXOXM_NSH_FLAGS(1) since v2.8.
*/
MFF_NSH_FLAGS,
@@ -1768,7 +1768,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read-only.
* NXM: none.
- * OXM: NXOXM_NSH_MDTYPE(2) since OF1.3 and v2.8.
+ * OXM: NXOXM_NSH_MDTYPE(2) since v2.8.
*/
MFF_NSH_MDTYPE,
@@ -1782,7 +1782,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read-only.
* NXM: none.
- * OXM: NXOXM_NSH_NP(3) since OF1.3 and v2.8.
+ * OXM: NXOXM_NSH_NP(3) since v2.8.
*/
MFF_NSH_NP,
@@ -1796,7 +1796,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read/write.
* NXM: none.
- * OXM: NXOXM_NSH_SPI(4) since OF1.3 and v2.8.
+ * OXM: NXOXM_NSH_SPI(4) since v2.8.
*/
MFF_NSH_SPI,
@@ -1810,7 +1810,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read/write.
* NXM: none.
- * OXM: NXOXM_NSH_SI(5) since OF1.3 and v2.8.
+ * OXM: NXOXM_NSH_SI(5) since v2.8.
*/
MFF_NSH_SI,
@@ -1824,10 +1824,10 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read/write.
* NXM: none.
- * OXM: NXOXM_NSH_C1(6) since OF1.3 and v2.8. <1>
- * OXM: NXOXM_NSH_C2(7) since OF1.3 and v2.8. <2>
- * OXM: NXOXM_NSH_C3(8) since OF1.3 and v2.8. <3>
- * OXM: NXOXM_NSH_C4(9) since OF1.3 and v2.8. <4>
+ * OXM: NXOXM_NSH_C1(6) since v2.8. <1>
+ * OXM: NXOXM_NSH_C2(7) since v2.8. <2>
+ * OXM: NXOXM_NSH_C3(8) since v2.8. <3>
+ * OXM: NXOXM_NSH_C4(9) since v2.8. <4>
*/
MFF_NSH_C1,
MFF_NSH_C2,
@@ -1844,7 +1844,7 @@ enum OVS_PACKED_ENUM mf_field_id {
* Prerequisites: NSH.
* Access: read/write.
* NXM: none.
- * OXM: NXOXM_NSH_TTL(10) since OF1.3 and v2.9.
+ * OXM: NXOXM_NSH_TTL(10) since v2.9.
*/
MFF_NSH_TTL,
--
2.16.1
More information about the dev
mailing list