]> git.proxmox.com Git - mirror_ovs.git/commitdiff
ofp-actions: Fix translation of set_field for nw_ecn
authorEric Garver <e@erig.me>
Tue, 21 Feb 2017 19:22:53 +0000 (14:22 -0500)
committerBen Pfaff <blp@ovn.org>
Thu, 9 Mar 2017 00:44:01 +0000 (16:44 -0800)
When using set_field for nw_ecn with OF1.0 or OF1.1, you get an error
instead of a proper translation. This use to work before 4b684612d900
("ofp-actions: Translate mod_nw_ecn action to OF1.1 properly.") because
it would fallback to using NXM.

e.g.

[root@rhel7 ~]# ovs-ofctl -O OpenFlow10 add-flow br0 'ip actions=set_field:2->nw_ecn'
OFPT_ERROR (xid=0x4): OFPBAC_BAD_ARGUMENT
NXT_FLOW_MOD (xid=0x4):
...

$ ovs-ofctl -O OpenFlow11 add-flow br0 'ip actions=set_field:2->nw_ecn'
ovs-ofctl: none of the usable flow formats (NXM,OXM) is among the
allowed flow formats (OpenFlow11)

Fixes: 4b684612d900 ("ofp-actions: Translate mod_nw_ecn action to OF1.1 properly.")
Signed-off-by: Eric Garver <e@erig.me>
Signed-off-by: Ben Pfaff <blp@ovn.org>
include/openvswitch/meta-flow.h
lib/ofp-actions.c
tests/ofp-actions.at
tests/ovs-ofctl.at

index 83e2599330cee4919e609050554b1e0dd8d3099e..53d3b41b3f747e2270308e149b5509e9f6ef14bb 100644 (file)
@@ -1221,6 +1221,7 @@ enum OVS_PACKED_ENUM mf_field_id {
      * Access: read/write.
      * NXM: NXM_NX_IP_ECN(28) since v1.4.
      * OXM: OXM_OF_IP_ECN(9) since OF1.2 and v1.7.
+     * OF1.1: exact match.
      */
     MFF_IP_ECN,
 
index ab49effb64049c6d830587c468bd1a9b28a3a6f7..7a7c8b5000f718bb6ef2829fc00b0eac21475e10 100644 (file)
@@ -2805,9 +2805,11 @@ set_field_to_legacy_openflow(const struct ofpact_set_field *sf,
         put_OFPAT_SET_NW_TOS(out, ofp_version, sf->value->u8 << 2);
         break;
 
-    case MFF_IP_ECN:
-        put_OFPAT11_SET_NW_ECN(out, sf->value->u8);
+    case MFF_IP_ECN: {
+        struct ofpact_ecn ip_ecn = { .ecn = sf->value->u8 };
+        encode_SET_IP_ECN(&ip_ecn, ofp_version, out);
         break;
+    }
 
     case MFF_TCP_SRC:
     case MFF_UDP_SRC:
index 6384c48d9ed629df3d4082a1641a53bf92c82ee4..58d540afed621bc04c391d8c16636e52292049bf 100644 (file)
@@ -837,6 +837,14 @@ AT_CHECK([ovs-ofctl -O OpenFlow11 dump-flows br0 | ofctl_strip], [0], [dnl
 OFPST_FLOW reply (OF1.1):
  ip actions=mod_nw_ecn:2
 ])
+
+dnl Check that OF1.2+ set_field to set ECN is translated for earlier OF
+dnl versions.
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_CHECK([ovs-ofctl -O OpenFlow10 add-flow br0 'ip,actions=set_field:2->ip_ecn'])
+AT_CHECK([ovs-ofctl del-flows br0])
+AT_CHECK([ovs-ofctl -O OpenFlow11 add-flow br0 'ip,actions=set_field:2->ip_ecn'])
+
 OVS_VSWITCHD_STOP
 AT_CLEANUP
 
index 7e267354ea7c1428d658ebde4db2b7fb6d3f8b71..354878f61384f4085526af9c8987451b8b314713 100644 (file)
@@ -119,7 +119,7 @@ for test_case in \
     'ipv6,nw_tos=0xf0                            NXM,OXM' \
     'ip,ip_dscp=0x3c                             any' \
     'ipv6,ip_dscp=0x3c                           NXM,OXM' \
-    'ip,nw_ecn=1                                 NXM,OXM' \
+    'ip,nw_ecn=1                                 NXM,OXM,OpenFlow11' \
     'ipv6,nw_ecn=1                               NXM,OXM' \
     'ip,nw_ttl=5                                 NXM,OXM' \
     'ipv6,nw_ttl=5                               NXM,OXM' \