OpenFlow 1.1 through 1.4 say that the out_group in a flow_mod, for commands
other than OFPFC_DELETE or OFPFC_DELETE_STRICT, should be ignored.  OVS
actually reported an error.  This fixes the problem.

Reported-by: chen zhang <3zhangchen9...@gmail.com>
Signed-off-by: Ben Pfaff <b...@nicira.com>
---
 AUTHORS        |    1 +
 lib/ofp-util.c |   10 ++++------
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 1c2d9ea..b1333ef 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -238,6 +238,7 @@ Yeming Zhao             zhaoyem...@gmail.com
 Ying Chen               yingc...@vmware.com
 Yongqiang Liu           liuyq7...@gmail.com
 ankur dwivedi           ankurengg2...@gmail.com
+chen zhang              3zhangchen9...@gmail.com
 kk yap                  yap...@stanford.edu
 likunyun                kunyu...@hotmail.com
 rahim entezari          rahim.entez...@gmail.com
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index 7fc4c7c..709d85a 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -1559,13 +1559,11 @@ ofputil_decode_flow_mod(struct ofputil_flow_mod *fm,
         if (error) {
             return error;
         }
-        fm->out_group = ntohl(ofm->out_group);
 
-        if ((ofm->command == OFPFC_DELETE
-             || ofm->command == OFPFC_DELETE_STRICT)
-            && ofm->out_group != htonl(OFPG_ANY)) {
-            return OFPERR_OFPFMFC_UNKNOWN;
-        }
+        fm->out_group = (ofm->command == OFPFC_DELETE ||
+                         ofm->command == OFPFC_DELETE_STRICT
+                         ? ntohl(ofm->out_group)
+                         : OFPG11_ANY);
         raw_flags = ofm->flags;
     } else {
         uint16_t command;
-- 
1.7.10.4

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

Reply via email to