Reported-at:
https://mail.openvswitch.org/pipermail/ovs-dev/2020-November/377876.html
Reported-by: Renat Nurgaliyev <[email protected]>
Suggested-by: Han Zhou <[email protected]>
Fixes: a2b88dc51365 ("pinctrl: Directly update MAC_Bindings created by self
originated GARPs.")
Signed-off-by: Dumitru Ceara <[email protected]>
(cherry-picked from master commit fdf295d5eb3af74ffb0c5ef950d6b1ad3902599a)
---
controller/pinctrl.c | 7 +++++++
northd/ovn-northd.c | 10 ++++++++++
tests/ovn.at | 19 +++++++++++++++++++
3 files changed, 36 insertions(+)
diff --git a/controller/pinctrl.c b/controller/pinctrl.c
index 9eee432..8372da2 100644
--- a/controller/pinctrl.c
+++ b/controller/pinctrl.c
@@ -3757,6 +3757,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 ff3de89..40caed5 100644
--- a/northd/ovn-northd.c
+++ b/northd/ovn-northd.c
@@ -1138,6 +1138,16 @@ ovn_datapath_update_external_ids(struct ovn_datapath *od)
smap_add(&ids, "interconn-ts", ts);
}
}
+
+ if (od->nbr) {
+ 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);
smap_destroy(&ids);
}
diff --git a/tests/ovn.at b/tests/ovn.at
index 0ad5dc3..1bd546c 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -15784,6 +15784,25 @@ echo
"fffffffffffff0000000010108060001080006040001f00000000101ac1804dd0000000000
AT_CHECK([sort hv1/br-phys-tx4.pcap], [0], [expout])
#OVN_CHECK_PACKETS([hv1/br-phys-tx4.pcap], [br-phys.expected])
+# 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
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev