[ovs-dev] [PATCH ovn] Disable IPv6 prefix reporting if IPv6 PD is disabled

Lorenzo Bianconi lorenzo.bianconi at redhat.com
Wed Apr 22 14:13:03 UTC 2020


Disable IPv6 prefix delegation reporting in Logical_Router_Port table if
IPv6 prefix delegation state machine has been disabled for the related
logical router port

Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi at redhat.com>
---
 northd/ovn-northd.c | 28 ++++++++++++++++------------
 tests/system-ovn.at |  7 +++++++
 2 files changed, 23 insertions(+), 12 deletions(-)

diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index f02dc5d5e..074beeb50 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -2701,6 +2701,10 @@ ovn_update_ipv6_prefix(struct hmap *ports)
             continue;
         }
 
+        if (!smap_get_bool(&op->nbrp->options, "prefix", false)) {
+            continue;
+        }
+
         char prefix[IPV6_SCAN_LEN + 6];
         unsigned aid;
         const char *ipv6_pd_list = smap_get(&op->sb->options,
@@ -9346,22 +9350,22 @@ build_lrouter_flows(struct hmap *datapaths, struct hmap *ports,
         }
 
         struct smap options;
+        smap_clone(&options, &op->sb->options);
+
         /* enable IPv6 prefix delegation */
         bool prefix_delegation = smap_get_bool(&op->nbrp->options,
                                                "prefix_delegation", false);
-        if (prefix_delegation) {
-            smap_clone(&options, &op->sb->options);
-            smap_add(&options, "ipv6_prefix_delegation", "true");
-            sbrec_port_binding_set_options(op->sb, &options);
-            smap_destroy(&options);
-        }
+        smap_add(&options, "ipv6_prefix_delegation",
+                 prefix_delegation ? "true" : "false");
+        sbrec_port_binding_set_options(op->sb, &options);
 
-        if (smap_get_bool(&op->nbrp->options, "prefix", false)) {
-            smap_clone(&options, &op->sb->options);
-            smap_add(&options, "ipv6_prefix", "true");
-            sbrec_port_binding_set_options(op->sb, &options);
-            smap_destroy(&options);
-        }
+        bool ipv6_prefix = smap_get_bool(&op->nbrp->options,
+                                         "prefix", false);
+        smap_add(&options, "ipv6_prefix",
+                 ipv6_prefix ? "true" : "false");
+        sbrec_port_binding_set_options(op->sb, &options);
+
+        smap_destroy(&options);
 
         const char *address_mode = smap_get(
             &op->nbrp->ipv6_ra_configs, "address_mode");
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index bdb9768d2..485ad087d 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -3920,6 +3920,13 @@ OVS_WAIT_UNTIL([
     test "${total_pkts}" = "1"
 ])
 
+ovn-nbctl set logical_router_port rp-sw0 options:prefix=false
+ovn-nbctl clear logical_router_port rp-sw0 ipv6_prefix
+OVS_WAIT_WHILE([test "$(ovn-nbctl get logical_router_port rp-sw0 ipv6_prefix | cut -c3-16)" = "[2001:1db8:3333]"])
+AT_CHECK([ovn-nbctl get logical_router_port rp-sw0 ipv6_prefix | cut -c3-16], [0], [dnl
+[]
+])
+
 kill $(pidof tcpdump)
 kill $(pidof ovn-controller)
 
-- 
2.25.3



More information about the dev mailing list