[ovs-dev] [PATCH] ovn-controller: Fix duplicated flows in table 32.

Han Zhou zhouhan at gmail.com
Wed Dec 14 04:18:05 UTC 2016


In commit 475f0a2c it introduced a priority 150 flow for skipping
VXLAN traffic. However, it added the flow for every remote port
processing, which results in duplicated flows and failures seen
in ovn-controller logs. This fix moves the logic to global so that
the flow is added only once.

Signed-off-by: Han Zhou <zhouhan at gmail.com>
---
 ovn/controller/physical.c | 47 ++++++++++++++++++++++++-----------------------
 1 file changed, 24 insertions(+), 23 deletions(-)

diff --git a/ovn/controller/physical.c b/ovn/controller/physical.c
index 48adb78..3b653dd 100644
--- a/ovn/controller/physical.c
+++ b/ovn/controller/physical.c
@@ -465,33 +465,16 @@ consider_port_binding(enum mf_field_id mff_ovn_geneve,
     } else {
         /* Remote port connected by tunnel */
 
-        /* Table 32, priority 150 and 100.
+        /* Table 32, priority 100.
          * ===============================
          *
-         * Priority 150 is for packets received from a VXLAN tunnel
-         * which get resubmitted to OFTABLE_LOG_INGRESS_PIPELINE due to
-         * lack of needed metadata in VXLAN, explicitly skip sending
-         * back out any tunnels and resubmit to table 33 for local
-         * delivery.
-         *
-         * Priority 100 is for all other traffic which need to be sent
-         * to a remote hypervisor.  Each flow matches an output port
-         * that includes a logical port on a remote hypervisor, and
-         * tunnels the packet to that hypervisor.
+         * Priority 100 is for traffic that needs to be sent to a remote
+         * hypervisor.  Each flow matches an output port that includes a
+         * logical port on a remote hypervisor, and tunnels the packet to
+         * that hypervisor.
          */
         match_init_catchall(&match);
         ofpbuf_clear(ofpacts_p);
-        match_set_reg_masked(&match, MFF_LOG_FLAGS - MFF_REG0,
-                             MLF_RCV_FROM_VXLAN, MLF_RCV_FROM_VXLAN);
-
-        /* Resubmit to table 33. */
-        put_resubmit(OFTABLE_LOCAL_OUTPUT, ofpacts_p);
-        ofctrl_add_flow(flow_table, OFTABLE_REMOTE_OUTPUT, 150, &match,
-                        ofpacts_p);
-
-
-        match_init_catchall(&match);
-        ofpbuf_clear(ofpacts_p);
 
         /* Match MFF_LOG_DATAPATH, MFF_LOG_OUTPORT. */
         match_set_metadata(&match, htonll(dp_key));
@@ -870,12 +853,30 @@ physical_run(struct controller_ctx *ctx, enum mf_field_id mff_ovn_geneve,
         }
     }
 
+    /* Table 32, priority 150.
+     * ===============================
+     *
+     * Priority 150 is for packets received from a VXLAN tunnel
+     * which get resubmitted to OFTABLE_LOG_INGRESS_PIPELINE due to
+     * lack of needed metadata in VXLAN, explicitly skip sending
+     * back out any tunnels and resubmit to table 33 for local
+     * delivery.
+     */
+    struct match match;
+    match_init_catchall(&match);
+    ofpbuf_clear(&ofpacts);
+    match_set_reg_masked(&match, MFF_LOG_FLAGS - MFF_REG0,
+                         MLF_RCV_FROM_VXLAN, MLF_RCV_FROM_VXLAN);
+
+    /* Resubmit to table 33. */
+    put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
+    ofctrl_add_flow(flow_table, OFTABLE_REMOTE_OUTPUT, 150, &match, &ofpacts);
+
     /* Table 32, Priority 0.
      * =======================
      *
      * Resubmit packets that are not directed at tunnels or part of a
      * multicast group to the local output table. */
-    struct match match;
     match_init_catchall(&match);
     ofpbuf_clear(&ofpacts);
     put_resubmit(OFTABLE_LOCAL_OUTPUT, &ofpacts);
-- 
2.1.0



More information about the dev mailing list