Allow CMS to create multiple bfd sessions with the same nexthop but
different outports:

ovn-nbctl --bfd --policy=src-ip --ecmp-symmetric-reply lr-route-add 
GR_ovn-worker 10.244.0.5/32 172.18.0.4 rtoe-GR_ovn-worker
ovn-nbctl --bfd --policy=src-ip --ecmp-symmetric-reply lr-route-add 
GR_ovn-worker2 10.244.2.5/32 172.18.0.4 rtoe-GR_ovn-worker2

https://bugzilla.redhat.com/show_bug.cgi?id=2007549
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
 tests/ovn-northd.at   | 12 ++++++++++--
 utilities/ovn-nbctl.c | 31 +++++++++++++++++++------------
 2 files changed, 29 insertions(+), 14 deletions(-)

diff --git a/tests/ovn-northd.at b/tests/ovn-northd.at
index 5de554455..c5400d806 100644
--- a/tests/ovn-northd.at
+++ b/tests/ovn-northd.at
@@ -3011,7 +3011,7 @@ AT_KEYWORDS([northd-bfd])
 ovn_start
 
 check ovn-nbctl --wait=sb lr-add r0
-for i in $(seq 1 5); do
+for i in $(seq 1 7); do
     check ovn-nbctl --wait=sb lrp-add r0 r0-sw$i 00:00:00:00:00:0$i 
192.168.$i.1/24
     check ovn-nbctl --wait=sb ls-add sw$i
     check ovn-nbctl --wait=sb lsp-add sw$i sw$i-r0
@@ -3052,12 +3052,20 @@ check ovn-nbctl --bfd lr-route-add r0 240.0.0.0/8 
192.168.5.2 r0-sw5
 wait_column down bfd status logical_port=r0-sw5
 AT_CHECK([ovn-nbctl lr-route-list r0 | grep 192.168.5.2 | grep -q bfd],[0])
 
+check ovn-nbctl --bfd --policy=src-ip lr-route-add r0 192.168.6.1/32 
192.168.10.10 r0-sw6
+wait_column down bfd status logical_port=r0-sw6
+AT_CHECK([ovn-nbctl lr-route-list r0 | grep 192.168.6.1 | grep -q bfd],[0])
+
+check ovn-nbctl --bfd --policy=src-ip lr-route-add r0 192.168.7.1/32 
192.168.10.10 r0-sw7
+wait_column down bfd status logical_port=r0-sw7
+AT_CHECK([ovn-nbctl lr-route-list r0 | grep 192.168.7.1 | grep -q bfd],[0])
+
 route_uuid=$(fetch_column nb:logical_router_static_route _uuid 
ip_prefix="100.0.0.0/8")
 check ovn-nbctl clear logical_router_static_route $route_uuid bfd
 wait_column admin_down bfd status logical_port=r0-sw1
 
 ovn-nbctl destroy bfd $uuid
-wait_row_count bfd 3
+wait_row_count bfd 5
 
 AT_CLEANUP
 ])
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index 10217dcd5..e34bb65f7 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -4121,6 +4121,15 @@ nbctl_lr_route_add(struct ctl_context *ctx)
         }
     }
 
+    if (ctx->argc == 5) {
+        /* validate output port. */
+        error = lrp_by_name_or_uuid(ctx, ctx->argv[4], true, &out_lrp);
+        if (error) {
+            ctx->error = error;
+            goto cleanup;
+        }
+    }
+
     struct shash_node *bfd = shash_find(&ctx->options, "--bfd");
     const struct nbrec_bfd *nb_bt = NULL;
     if (bfd) {
@@ -4136,20 +4145,18 @@ nbctl_lr_route_add(struct ctl_context *ctx)
         } else {
             const struct nbrec_bfd *iter;
             NBREC_BFD_FOR_EACH (iter, ctx->idl) {
-                if (!strcmp(iter->dst_ip, next_hop)) {
-                    nb_bt = iter;
-                    break;
+                /* match endpoint ip. */
+                if (strcmp(iter->dst_ip, next_hop)) {
+                    continue;
+                }
+                /* match outport. */
+                if (out_lrp && strcmp(iter->logical_port, out_lrp->name)) {
+                    continue;
                 }
-            }
-        }
-    }
 
-    if (ctx->argc == 5) {
-        /* validate output port. */
-        error = lrp_by_name_or_uuid(ctx, ctx->argv[4], true, &out_lrp);
-        if (error) {
-            ctx->error = error;
-            goto cleanup;
+                nb_bt = iter;
+                break;
+            }
         }
     }
 
-- 
2.31.1

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to