Check wildcards for in_port != out_port output validation.
authorJustin Pettit <jpettit@nicira.com>
Wed, 14 Jan 2009 22:52:59 +0000 (14:52 -0800)
committerJustin Pettit <jpettit@nicira.com>
Wed, 14 Jan 2009 22:52:59 +0000 (14:52 -0800)
OpenFlow requires that traffic that is to be sent out the interface it
came in on use the OFPP_IN_PORT virtual port.  The action validation
code that enforces this ignored the wildcards field, which meant it was
using the garbage 'in_port' value for this check.

datapath/dp_act.c

index 56104506077e851c802ae1f30bd5ea5815992e2f..379af11700064f564afb09cd6736a0133f242a7d 100644 (file)
@@ -26,7 +26,8 @@ validate_output(struct datapath *dp, const struct sw_flow_key *key,
 {
        struct ofp_action_output *oa = (struct ofp_action_output *)ah;
 
-       if (oa->port == htons(OFPP_NONE) || oa->port == key->in_port)
+       if (oa->port == htons(OFPP_NONE) || 
+                       (!(key->wildcards & OFPFW_IN_PORT) && oa->port == key->in_port)) 
                return OFPBAC_BAD_OUT_PORT;
 
        return ACT_VALIDATION_OK;