Based on the OpenFlow 1.5 draft.

ONF-JIRA: EXT-425
Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 lib/ofp-actions.c    |    2 +-
 lib/ofp-errors.h     |    4 ++++
 tests/ofp-actions.at |   12 +++++++++---
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c
index 8f3af19..cdcd72d 100644
--- a/lib/ofp-actions.c
+++ b/lib/ofp-actions.c
@@ -1965,7 +1965,7 @@ decode_OFPAT_RAW12_SET_FIELD(const struct 
ofp12_action_set_field *oasf,
     }
 
     if (NXM_HASMASK(oxm_header)) {
-        return OFPERR_OFPBAC_BAD_SET_TYPE;
+        return OFPERR_OFPBAC_BAD_SET_MASK;
     }
     mf = mf_from_nxm_header(oxm_header);
     if (!mf) {
diff --git a/lib/ofp-errors.h b/lib/ofp-errors.h
index d5c767b..e32b751 100644
--- a/lib/ofp-errors.h
+++ b/lib/ofp-errors.h
@@ -222,6 +222,10 @@ enum ofperr {
      * unsupported value, or modifies a read-only field. */
     OFPERR_OFPBAC_BAD_SET_ARGUMENT,
 
+    /* NX1.3-1.4(14), OF1.5+(2,16).  Field in Set-Field action has Has-Mask bit
+     * set to 1. */
+    OFPERR_OFPBAC_BAD_SET_MASK,
+
     /* NX1.0-1.1(2,256), NX1.2+(11).  Must-be-zero action argument had nonzero
      * value. */
     OFPERR_NXBAC_MUST_BE_ZERO,
diff --git a/tests/ofp-actions.at b/tests/ofp-actions.at
index 569f4ae..e9bd69a 100644
--- a/tests/ofp-actions.at
+++ b/tests/ofp-actions.at
@@ -502,9 +502,8 @@ AT_CHECK(
   [0], [expout], [experr])
 AT_CLEANUP
 
-dnl Our primary goal here is to verify that the copy_field action gets
-dnl used instead of the Nicira extension reg_move in OpenFlow 1.5, so
-dnl the list of action tests is very short.
+dnl Our primary goal here is to verify that OpenFlow 1.5-specific changes,
+dnl so the list of tests is short.
 AT_SETUP([OpenFlow 1.5 action translation])
 AT_KEYWORDS([ofp-actions OF1.5])
 AT_DATA([test-data], [dnl
@@ -514,6 +513,13 @@ AT_DATA([test-data], [dnl
 # actions=move:NXM_OF_IN_PORT[]->NXM_OF_VLAN_TCI[]
 001c 0018 0010 0000 0000 0008 00000002 00000802 00000000
 
+dnl This action has a lot more wrong with it than the hasmask bit, but
+dnl the current OVS implementation checks for that first.
+# bad OpenFlow15 actions: OFPBAC_BAD_SET_MASK
+& ofp_actions|WARN|bad action at offset 0 (OFPBAC_BAD_SET_MASK):
+& 00000000  00 19 00 08 00 00 01 00-
+0019 0008 0000 0100
+
 ])
 sed '/^[[#&]]/d' < test-data > input.txt
 sed -n 's/^# //p; /^$/p' < test-data > expout
-- 
1.7.10.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to