Report logical router port addresses running lsp-get-addresses if the
logical switch port address is set to "router".

Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=2028040
Signed-off-by: Lorenzo Bianconi <[email protected]>
---
 tests/ovn-nbctl.at    | 10 ++++++++++
 utilities/ovn-nbctl.c | 26 ++++++++++++++++++++++++++
 2 files changed, 36 insertions(+)

diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
index a43a1ce8f..539a121c0 100644
--- a/tests/ovn-nbctl.at
+++ b/tests/ovn-nbctl.at
@@ -181,6 +181,16 @@ unknown
 
 AT_CHECK([ovn-nbctl lsp-set-addresses lp0])
 AT_CHECK([ovn-nbctl lsp-get-addresses lp0], [0], [dnl
+])
+
+AT_CHECK([ovn-nbctl lr-add lr0])
+AT_CHECK([ovn-nbctl lrp-add lr0 rp-ls0 aa:bb:bb:00:00:01 192.168.0.1/24])
+AT_CHECK([ovn-nbctl lsp-add ls0 ls0-rp])
+AT_CHECK([ovn-nbctl lsp-set-addresses ls0-rp router])
+AT_CHECK([ovn-nbctl lsp-set-type ls0-rp router])
+AT_CHECK([ovn-nbctl lsp-set-options ls0-rp router-port=rp-ls0])
+AT_CHECK([ovn-nbctl lsp-get-addresses ls0-rp], [0], [dnl
+aa:bb:bb:00:00:01 192.168.0.1/24
 ])])
 
 dnl ---------------------------------------------------------------------
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index 55b0f5124..4c252fdde 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -1494,6 +1494,12 @@ nbctl_pre_lsp_get_addresses(struct ctl_context *ctx)
 {
     ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_port_col_name);
     ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_port_col_addresses);
+    ovsdb_idl_add_column(ctx->idl, &nbrec_logical_switch_port_col_options);
+
+    ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_col_ports);
+    ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_port_col_name);
+    ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_port_col_mac);
+    ovsdb_idl_add_column(ctx->idl, &nbrec_logical_router_port_col_networks);
 }
 
 static void
@@ -1511,6 +1517,26 @@ nbctl_lsp_get_addresses(struct ctl_context *ctx)
         return;
     }
 
+    const char *router_port = smap_get(&lsp->options, "router-port");
+    if (lsp->n_addresses == 1 && !strcmp(lsp->addresses[0], "router") &&
+        router_port) {
+        const struct nbrec_logical_router *lr;
+        NBREC_LOGICAL_ROUTER_FOR_EACH (lr, ctx->idl) {
+            for (i = 0; i < lr->n_ports; i++) {
+                const struct nbrec_logical_router_port *lrp = lr->ports[i];
+                if (strcmp(lrp->name, router_port)) {
+                    continue;
+                }
+                ds_put_format(&ctx->output, "%s", lrp->mac);
+                for (size_t j = 0; j < lrp->n_networks; j++) {
+                    ds_put_format(&ctx->output, " %s", lrp->networks[j]);
+                }
+                ds_put_cstr(&ctx->output, "\n");
+                return;
+            }
+        }
+    }
+
     svec_init(&addresses);
     for (i = 0; i < lsp->n_addresses; i++) {
         svec_add(&addresses, lsp->addresses[i]);
-- 
2.33.1

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

Reply via email to