secchan: Clarify logic in add_output_action().
authorBen Pfaff <blp@nicira.com>
Fri, 2 Oct 2009 23:01:36 +0000 (16:01 -0700)
committerBen Pfaff <blp@nicira.com>
Sat, 3 Oct 2009 00:12:31 +0000 (17:12 -0700)
The code and the logic here was too terse for anyone to reasonably
understand it.  Add some comments.

This should not cause any behavioral change.

CC: Jean Tourrilhes <jt@hpl.hp.com>
secchan/ofproto.c

index de1252a36d1d2b9bdc1a72185c73e71481b1aa0d..9836e0f8306306f8dcd3d97cabeb5d54f1173d36 100644 (file)
@@ -1930,9 +1930,21 @@ static void
 add_output_action(struct action_xlate_ctx *ctx, uint16_t port)
 {
     const struct ofport *ofport = port_array_get(&ctx->ofproto->ports, port);
-    if (!ofport || !(ofport->opp.config & OFPPC_NO_FWD)) {
-        odp_actions_add(ctx->out, ODPAT_OUTPUT)->output.port = port;
+
+    if (ofport) {
+        if (ofport->opp.config & OFPPC_NO_FWD) {
+            /* Forwarding disabled on port. */
+            return;
+        }
+    } else {
+        /*
+         * We don't have an ofport record for this port, but it doesn't hurt to
+         * allow forwarding to it anyhow.  Maybe such a port will appear later
+         * and we're pre-populating the flow table.
+         */
     }
+
+    odp_actions_add(ctx->out, ODPAT_OUTPUT)->output.port = port;
 }
 
 static struct rule *