In build_lrouter_flows, it says that:" Drop ip traffic to this router, unless the router ip is used as SNAT ip. " But there is a bug, the "continue" only effect the inner loop, dropping flows is still built.

Example: Dropping flow c8726aed-0dd0-41b6-bb8c-13ca1e2164c9 should not be exist for "ct_snat(192.168.246.200);". _uuid actions external_ids logical_datapath match pipeline priority table_id a29d2785-af1d-45ec-ae60-677356c48f24 "drop;" {stage-name=lr_in_ip_input} 1915535e-7738-43db-8341-2306221b0691 "ip4.dst == {169.254.128.1}" ingress 60 1 c8726aed-0dd0-41b6-bb8c-13ca1e2164c9 "drop;" {stage-name=lr_in_ip_input} 1915535e-7738-43db-8341-2306221b0691 "ip4.dst == {192.168.246.200}" ingress 60 1 0dd66b7e-d11b-4d13-86d1-55ebe9d7e85f "ct_snat(192.168.246.200);" {stage-name=lr_out_snat} 1915535e-7738-43db-8341-2306221b0691 "ip && ip4.src == 101.0.0.0/24" egress 25 0 c3d56ca6-38c6-4943-8d89-2c39cbc3cd9b "next;" {stage-name=lr_out_snat} 1915535e-7738-43db-8341-2306221b0691 "1" egress 0 0

This commit fixed this bug.
NAT configured, the flows:
a29d2785-af1d-45ec-ae60-677356c48f24 "drop;" {stage-name=lr_in_ip_input} 1915535e-7738-43db-8341-2306221b0691 "ip4.dst == {169.254.128.1}" ingress 60 1 0dd66b7e-d11b-4d13-86d1-55ebe9d7e85f "ct_snat(192.168.246.200);" {stage-name=lr_out_snat} 1915535e-7738-43db-8341-2306221b0691 "ip && ip4.src == 101.0.0.0/24" egress 25 0 c3d56ca6-38c6-4943-8d89-2c39cbc3cd9b "next;" {stage-name=lr_out_snat} 1915535e-7738-43db-8341-2306221b0691 "1" egress 0 0
NAT not configured, the flows:
a29d2785-af1d-45ec-ae60-677356c48f24 "drop;" {stage-name=lr_in_ip_input} 1915535e-7738-43db-8341-2306221b0691 "ip4.dst == {169.254.128.1}" ingress 60 1 c8726aed-0dd0-41b6-bb8c-13ca1e2164c9 "drop;" {stage-name=lr_in_ip_input} 1915535e-7738-43db-8341-2306221b0691 "ip4.dst == {192.168.246.200}" ingress 60 1 c3d56ca6-38c6-4943-8d89-2c39cbc3cd9b "next;" {stage-name=lr_out_snat} 1915535e-7738-43db-8341-2306221b0691 "1" egress 0 0


Signed-off-by: Dongjun <do...@dtdream.com>

diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c
old mode 100644
new mode 100755
index a3d1672..0e4fc93
--- a/ovn/northd/ovn-northd.c
+++ b/ovn/northd/ovn-northd.c
@@ -2324,6 +2324,16 @@ op_put_networks(struct ds *ds, const struct ovn_port *op, bool add_bcast)
     ds_put_cstr(ds, "}");
 }

+static bool
+has_ip(ovs_be32 *ips, size_t size, ovs_be32 ip){
+    for (int i = 0; i < size; i++) {
+        if (ip == ips[i]) {
+            return true;
+        }
+    }
+    return false;
+}
+
 static void
 build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
                     struct hmap *lflows)
@@ -2543,10 +2553,8 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
         ds_put_cstr(&match, "ip4.dst == {");
         bool has_drop_ips = false;
         for (int i = 0; i < op->lrp_networks.n_ipv4_addrs; i++) {
-            for (int j = 0; j < n_nat_ips; j++) {
-                if (op->lrp_networks.ipv4_addrs[i].addr == nat_ips[j]) {
-                    continue;
-                }
+ if(has_ip(nat_ips, n_nat_ips, op->lrp_networks.ipv4_addrs[i].addr)){
+                continue;
             }
             ds_put_format(&match, "%s, ",
op->lrp_networks.ipv4_addrs[i].addr_s);

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

Reply via email to