diff mbox series

[ovs-dev,v3] Allow creation of a LRP without ipv4.

Message ID 20241129160038.621040-1-mj.ponsonby@canonical.com
State Superseded
Headers show
Series [ovs-dev,v3] Allow creation of a LRP without ipv4. | expand

Checks

Context Check Description
ovsrobot/apply-robot warning apply and check: warning
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

MJ Ponsonby Nov. 29, 2024, 4 p.m. UTC
This makes it so that networks are an optional argument for lrp-add, and
in the case where no networks are provided it creates the logical router
port but doesn't add the routes that require ipv4.

This is useful as part of an effort to get OVN+BGP unnumbered working with
minimal configuration.

Signed-off-by: MJ Ponsonby <mj.ponsonby@canonical.com>
---
 NEWS                      |  2 ++
 ovn-nb.ovsschema          |  6 +++---
 ovn-nb.xml                |  1 +
 tests/ovn-nbctl.at        | 13 +++++++++++++
 utilities/ovn-nbctl.8.xml |  6 +++---
 utilities/ovn-nbctl.c     | 13 +++----------
 6 files changed, 25 insertions(+), 16 deletions(-)
diff mbox series

Patch

diff --git a/NEWS b/NEWS
index da3aba739..4cbbfa6ec 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@  Post v24.09.0
      hash (with specified hash fields) for ECMP routes
      while choosing nexthop.
    - ovn-ic: Add support for route tag to prevent route learning.
+   - ovn-nb: Changed schema of ovn-nb to make networks optional within Logical
+     Router Ports.
 
 OVN v24.09.0 - 13 Sep 2024
 --------------------------
diff --git a/ovn-nb.ovsschema b/ovn-nb.ovsschema
index c4a48183d..bda387242 100644
--- a/ovn-nb.ovsschema
+++ b/ovn-nb.ovsschema
@@ -1,7 +1,7 @@ 
 {
     "name": "OVN_Northbound",
-    "version": "7.7.0",
-    "cksum": "116357561 38626",
+    "version": "7.7.1",
+    "cksum": "3555498067 38626",
     "tables": {
         "NB_Global": {
             "columns": {
@@ -468,7 +468,7 @@ 
                              "min": 0,
                              "max": "unlimited"}},
                 "networks": {"type": {"key": "string",
-                                      "min": 1,
+                                      "min": 0,
                                       "max": "unlimited"}},
                 "mac": {"type": "string"},
                 "peer": {"type": {"key": "string", "min": 0, "max": 1}},
diff --git a/ovn-nb.xml b/ovn-nb.xml
index 5114bbc2e..fa6dc0473 100644
--- a/ovn-nb.xml
+++ b/ovn-nb.xml
@@ -3225,6 +3225,7 @@  or
         <code>192.168.0.1/24</code> indicates that the router's IP
         address is 192.168.0.1 and that packets destined to
         192.168.0.<var>x</var> should be routed to this port.
+        These are optional.
       </p>
 
       <p>
diff --git a/tests/ovn-nbctl.at b/tests/ovn-nbctl.at
index 2efa13b93..ec233a6d0 100644
--- a/tests/ovn-nbctl.at
+++ b/tests/ovn-nbctl.at
@@ -1697,6 +1697,19 @@  AT_CHECK([ovn-nbctl lrp-list lr0 | uuidfilt], [0], [dnl
 <1> (lrp1)
 ])
 
+AT_CHECK([ovn-nbctl lrp-add lr0 lrp2 00:00:00:01:02:03])
+AT_CHECK([ovn-nbctl lrp-list lr0 | uuidfilt], [0], [dnl
+<0> (lrp0)
+<1> (lrp1)
+<2> (lrp2)
+])
+
+AT_CHECK([ovn-nbctl lrp-del lrp2])
+AT_CHECK([ovn-nbctl lrp-list lr0 | uuidfilt], [0], [dnl
+<0> (lrp0)
+<1> (lrp1)
+])
+
 AT_CHECK([ovn-nbctl lr-add lr1])
 AT_CHECK([ovn-nbctl lrp-add lr0 lrp1 00:00:00:01:02:03 192.168.1.1/24], [1], [],
   [ovn-nbctl: lrp1: a port with this name already exists
diff --git a/utilities/ovn-nbctl.8.xml b/utilities/ovn-nbctl.8.xml
index e1e5b681e..cfc39021a 100644
--- a/utilities/ovn-nbctl.8.xml
+++ b/utilities/ovn-nbctl.8.xml
@@ -929,12 +929,12 @@ 
     <h2>Logical Router Port Commands</h2>
 
     <dl>
-      <dt>[<code>--may-exist</code>] <code>lrp-add</code> <var>router</var> <var>port</var> <var>mac</var> <var>network</var>... [<code>peer=</code><var>peer</var>]</dt>
+      <dt>[<code>--may-exist</code>] <code>lrp-add</code> <var>router</var> <var>port</var> <var>mac</var> [<var>network</var>]... [<code>peer=</code><var>peer</var>]</dt>
       <dd>
         <p>
           Creates on <var>router</var> a new logical router port named
-          <var>port</var> with Ethernet address <var>mac</var> and one
-          or more IP address/netmask for each <var>network</var>.
+          <var>port</var> with Ethernet address <var>mac</var> and IP
+          address/netmask for each <var>network</var>.
         </p>
 
         <p>
diff --git a/utilities/ovn-nbctl.c b/utilities/ovn-nbctl.c
index d45be75c7..42bc5b493 100644
--- a/utilities/ovn-nbctl.c
+++ b/utilities/ovn-nbctl.c
@@ -360,7 +360,7 @@  Logical router commands:\n\
   lr-list                   print the names of all logical routers\n\
 \n\
 Logical router port commands:\n\
-  lrp-add ROUTER PORT MAC NETWORK... [peer=PEER]\n\
+  lrp-add ROUTER PORT MAC [NETWORK]... [peer=PEER]\n\
                             add logical port PORT on ROUTER\n\
   lrp-set-gateway-chassis PORT CHASSIS [PRIORITY]\n\
                             set gateway chassis for port PORT\n\
@@ -6005,13 +6005,6 @@  nbctl_lrp_add(struct ctl_context *ctx)
             break;
         }
     }
-
-    if (!n_networks) {
-        ctl_error(ctx, "%s: router port requires specifying a network",
-                  lrp_name);
-        return;
-    }
-
     char **settings = (char **) &ctx->argv[n_networks + 4];
     int n_settings = ctx->argc - 4 - n_networks;
 
@@ -8057,8 +8050,8 @@  static const struct ctl_command_syntax nbctl_commands[] = {
     { "lr-list", 0, 0, "", nbctl_pre_lr_list, nbctl_lr_list, NULL, "", RO },
 
     /* logical router port commands. */
-    { "lrp-add", 4, INT_MAX,
-      "ROUTER PORT MAC NETWORK... [COLUMN[:KEY]=VALUE]...",
+    { "lrp-add", 3, INT_MAX,
+      "ROUTER PORT MAC [NETWORK]... [COLUMN[:KEY]=VALUE]...",
       nbctl_pre_lrp_add, nbctl_lrp_add, NULL, "--may-exist", RW },
     { "lrp-set-gateway-chassis", 2, 3,
       "PORT CHASSIS [PRIORITY]",