[ovs-dev] [PATCH ovn] pinctrl: Honor always_learn_from_arp_request for self created MAC_Bindings.

Dumitru Ceara dceara at redhat.com
Tue Dec 1 10:29:51 UTC 2020


Reported-at: https://mail.openvswitch.org/pipermail/ovs-dev/2020-November/377876.html
Reported-by: Renat Nurgaliyev <impleman at gmail.com>
Suggested-by: Han Zhou <hzhou at ovn.org>
Fixes: a2b88dc51365 ("pinctrl: Directly update MAC_Bindings created by self originated GARPs.")
Signed-off-by: Dumitru Ceara <dceara at redhat.com>
---
 controller/pinctrl.c |  7 +++++++
 northd/ovn-northd.c  |  7 +++++++
 tests/ovn.at         | 19 +++++++++++++++++++
 3 files changed, 33 insertions(+)

diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 291202c..c6540c1 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -3907,6 +3907,13 @@ send_garp_locally(struct ovsdb_idl_txn *ovnsb_idl_txn,
             continue;
         }
 
+        /* Skip datapaths that don't automatically learn ARPs from requests. */
+        if (!smap_get_bool(&remote->datapath->external_ids,
+                           "always_learn_from_arp_request",
+                           true)) {
+            continue;
+        }
+
         struct ds ip_s = DS_EMPTY_INITIALIZER;
 
         ip_format_masked(ip, OVS_BE32_MAX, &ip_s);
diff --git a/northd/ovn-northd.c b/northd/ovn-northd.c
index 47a177c..4ca0271 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -1189,6 +1189,13 @@ ovn_datapath_update_external_ids(struct ovn_datapath *od)
         if (nat_default_ct >= 0) {
             smap_add_format(&ids, "snat-ct-zone", "%d", nat_default_ct);
         }
+
+        bool learn_from_arp_request =
+            smap_get_bool(&od->nbr->options, "always_learn_from_arp_request",
+                          true);
+        if (!learn_from_arp_request) {
+            smap_add(&ids, "always_learn_from_arp_request", "false");
+        }
     }
 
     sbrec_datapath_binding_set_external_ids(od->sb, &ids);
diff --git a/tests/ovn.at b/tests/ovn.at
index 5b7a64c..97e3e49 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -15962,6 +15962,25 @@ fffffffffffff0000000010108060001080006040001f00000000101ac1804c8000000000000ac18
 fffffffffffff0000000010108060001080006040001f00000000101ac1804dd000000000000ac1804dd
 ])
 
+# Now make sure that always_learn_from_arp_request=false is also honored
+# for locally injected mac bindings.
+check ovn-nbctl set logical_router lr0 options:always_learn_from_arp_request=false
+check ovn-nbctl set logical_router lr1 options:always_learn_from_arp_request=false
+check ovn-nbctl --wait=hv sync
+
+# Recreate two floating IPs, one for each VIF.
+check ovn-nbctl lr-nat-del lr0 dnat_and_snat 172.24.4.100
+check ovn-nbctl lr-nat-del lr1 dnat_and_snat 172.24.4.200
+
+check ovn-sbctl --all destroy mac_binding
+
+check ovn-nbctl lr-nat-add lr0 dnat_and_snat 172.24.4.100 10.0.0.10
+check ovn-nbctl lr-nat-add lr1 dnat_and_snat 172.24.4.200 20.0.0.10
+check ovn-nbctl --wait=hv sync
+
+check_row_count MAC_Binding 0 logical_port=lr0-pub ip=172.24.4.200
+check_row_count MAC_Binding 0 logical_port=lr1-pub ip=172.24.4.100
+
 OVN_CLEANUP([hv1])
 AT_CLEANUP
 
-- 
1.8.3.1



More information about the dev mailing list