The mac_cache_use would have flows for ARP replies to bump the
timestamp when we receive a reply to our probe. However, simple
ARP request from the MAC binding IP+MAC should be enough to indicate
that the entry is alive. Remove the response match and use plain
ARP with proper source MAC address and SPA.

Fixes: 9fc291c889bb ("controller: Update OFTABLE_MAC_CACHE_USE for ARP reply 
generated by the tracked device.")
Fixes: c23059318cb7 ("northd, controller: Use the MAC cache table")
Signed-off-by: Ales Musil <[email protected]>
---
 controller/neighbor-of.c |  1 -
 tests/ovn.at             | 42 +++++++++++++++++++++++++++-------------
 tests/system-ovn.at      | 30 ++++++++++++++--------------
 3 files changed, 44 insertions(+), 29 deletions(-)

diff --git a/controller/neighbor-of.c b/controller/neighbor-of.c
index 5985114ba..d48fe4422 100644
--- a/controller/neighbor-of.c
+++ b/controller/neighbor-of.c
@@ -50,7 +50,6 @@ consider_neighbor_flow(const struct sbrec_port_binding *pb,
         match_set_dl_type(&mb_cache_use_match, htons(ETH_TYPE_IP));
         match_set_nw_src(&mb_cache_use_match, ip_addr);
 
-        match_set_arp_opcode_masked(&lookup_arp_for_stats_match, 2, 0xff);
         match_set_arp_spa_masked(&lookup_arp_for_stats_match, ip_addr,
                                  htonl(0xffffffff));
     } else {
diff --git a/tests/ovn.at b/tests/ovn.at
index c8a27fcf6..024f56e02 100644
--- a/tests/ovn.at
+++ b/tests/ovn.at
@@ -37006,10 +37006,10 @@ port_key_1=$(printf "0x%x" $(as hv1 fetch_column 
port_binding tunnel_key logical
 dp_key_2=$(printf "0x%x" $(as hv1 fetch_column datapath tunnel_key 
external_ids:name=gw-2))
 port_key_2=$(printf "0x%x" $(as hv1 fetch_column port_binding tunnel_key 
logical_port=gw-2-public))
 
-table=" table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10,arp_op=2
 actions=drop
- table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20,arp_op=2
 actions=drop
- table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10,arp_op=2
 actions=drop
- table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20,arp_op=2
 actions=drop
+table=" table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10
 actions=drop
+ table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20
 actions=drop
+ table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10
 actions=drop
+ table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20
 actions=drop
  table=OFTABLE_MAC_CACHE_USE, 
priority=100,ip,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:10,nw_src=192.168.10.10
 actions=drop
  table=OFTABLE_MAC_CACHE_USE, 
priority=100,ip,reg14=${port_key_1},metadata=${dp_key_1},dl_src=00:00:00:00:10:20,nw_src=192.168.10.20
 actions=drop
  table=OFTABLE_MAC_CACHE_USE, 
priority=100,ip,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,nw_src=192.168.10.10
 actions=drop
@@ -37058,8 +37058,8 @@ OVS_WAIT_UNTIL([
 ])
 
 AT_CHECK_UNQUOTED([as hv1 ovs-ofctl dump-flows br-int 
table=OFTABLE_MAC_CACHE_USE --no-stats | strip_cookie | sort], [0], [dnl
- table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10,arp_op=2
 actions=drop
- table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20,arp_op=2
 actions=drop
+ table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,arp_spa=192.168.10.10
 actions=drop
+ table=OFTABLE_MAC_CACHE_USE, 
priority=100,arp,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:20,arp_spa=192.168.10.20
 actions=drop
  table=OFTABLE_MAC_CACHE_USE, 
priority=100,ip,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:10,nw_src=192.168.10.10
 actions=drop
  table=OFTABLE_MAC_CACHE_USE, 
priority=100,ip,reg14=${port_key_2},metadata=${dp_key_2},dl_src=00:00:00:00:10:20,nw_src=192.168.10.20
 actions=drop
 ])
@@ -37282,22 +37282,29 @@ ovn-appctl -t ovn-controller vlog/set 
mac_cache:file:dbg pinctrl:file:dbg
 check ovn-nbctl                                                     \
     -- ls-add ls1                                                   \
     -- ls-add ls2                                                   \
+    -- ls-add ls3                                                   \
     -- lr-add lr                                                    \
     -- set logical_router lr options:mac_binding_age_threshold=4    \
     -- lrp-add lr lr-ls1 00:00:00:00:10:00 192.168.10.1/24          \
     -- lrp-add lr lr-ls2 00:00:00:00:20:00 192.168.20.1/24          \
+    -- lrp-add lr lr-ls3 00:00:00:00:30:00 192.168.30.1/24          \
     -- lsp-add-router-port ls1 ls1-lr lr-ls1                        \
     -- lsp-add ls1 vif1                                             \
     -- lsp-set-addresses vif1 "00:00:00:00:10:10 192.168.10.10"     \
     -- lsp-add-router-port ls2 ls2-lr lr-ls2                        \
     -- lsp-add ls2 vif2                                             \
-    -- lsp-set-addresses vif2 "00:00:00:00:20:10 192.168.20.10"
+    -- lsp-set-addresses vif2 "00:00:00:00:20:10 192.168.20.10"     \
+    -- lsp-add-router-port ls3 ls3-lr lr-ls3                        \
+    -- lsp-add ls3 vif3                                             \
+    -- lsp-set-addresses vif3 "00:00:00:00:30:10 192.168.30.10"
 
 check ovs-vsctl                                      \
     -- add-port br-int vif1                          \
     -- set interface vif1 external-ids:iface-id=vif1 \
     -- add-port br-int vif2                          \
-    -- set interface vif2 external-ids:iface-id=vif2
+    -- set interface vif2 external-ids:iface-id=vif2 \
+    -- add-port br-int vif3                          \
+    -- set interface vif3 external-ids:iface-id=vif3
 
 OVN_POPULATE_ARP
 wait_for_ports_up
@@ -37314,23 +37321,32 @@ sleep 2
 send_garp hv1 vif1 2 00:00:00:00:10:10 ff:ff:ff:ff:ff:ff 192.168.10.10 
192.168.10.10
 wait_row_count mac_binding 1 ip="192.168.10.10" logical_port="lr-ls1"
 
-uuid=$(fetch_column mac_binding _uuid ip="192.168.10.10" logical_port="lr-ls1")
+send_garp hv1 vif3 2 00:00:00:00:30:10 ff:ff:ff:ff:ff:ff 192.168.30.10 
192.168.30.10
+wait_row_count mac_binding 1 ip="192.168.30.10" logical_port="lr-ls3"
+
+uuid_ls1=$(fetch_column mac_binding _uuid ip="192.168.10.10" 
logical_port="lr-ls1")
+uuid_ls3=$(fetch_column mac_binding _uuid ip="192.168.30.10" 
logical_port="lr-ls3")
 for i in $(seq 12); do
-    # Keep one entry alive by sending traffic that uses it.
+    # Keep two entries alive by sending traffic that uses them.
     send_udp hv1 vif1 00:00:00:00:10:00 00:00:00:00:10:10 192.168.20.10 
192.168.10.10
+    send_garp hv1 vif3 1 00:00:00:00:30:10 ff:ff:ff:ff:ff:ff 192.168.30.10 
192.168.20.100
     sleep 1
     # The entry must not expire.
     check_row_count mac_binding 1 ip="192.168.10.10" logical_port="lr-ls1"
+    check_row_count mac_binding 1 ip="192.168.30.10" logical_port="lr-ls3"
     as hv1 ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE
 done
 # Check that it's the same entry.
-uuid2=$(fetch_column mac_binding _uuid ip="192.168.10.10" 
logical_port="lr-ls1")
-check test "$uuid" = "$uuid2"
+uuid2_ls1=$(fetch_column mac_binding _uuid ip="192.168.10.10" 
logical_port="lr-ls1")
+uuid2_ls3=$(fetch_column mac_binding _uuid ip="192.168.30.10" 
logical_port="lr-ls3")
+check test "$uuid_ls1" = "$uuid2_ls1"
+check test "$uuid_ls3" = "$uuid2_ls3"
 
 # The other entry must have expired by now.
 check_row_count mac_binding 0 ip="192.168.20.10" logical_port="lr-ls2"
-# Wait for the alive one to expire as well.
+# Wait for the alive ones to expire as well.
 wait_row_count mac_binding 0 ip="192.168.10.10" logical_port="lr-ls1"
+wait_row_count mac_binding 0 ip="192.168.30.10" logical_port="lr-ls3"
 
 OVN_CLEANUP([hv1])
 AT_CLEANUP
diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index 799779276..26b56ac3b 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -18643,10 +18643,10 @@ 
priority=100,icmp6,reg0=0x1720016,reg1=0,reg2=0,reg3=0x70,reg14=0x$rtr_port_key,
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,nw_src=172.16.1.50
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,nw_src=172.16.1.60
 actions=drop
@@ -18840,7 +18840,7 @@ 
priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 ])
 
@@ -19322,10 +19322,10 @@ 
priority=100,icmp6,reg0=0x1720016,reg1=0,reg2=0,reg3=0x70,reg14=0x$rtr_port_key,
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,nw_src=172.16.1.50
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,nw_src=172.16.1.60
 actions=drop
@@ -19377,7 +19377,7 @@ 
priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 ])
 
@@ -19898,10 +19898,10 @@ 
priority=100,icmp6,reg0=0x1720016,reg1=0,reg2=0,reg3=0x70,reg14=0x$rtr_port_key,
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60,arp_op=2
 actions=drop
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,arp_spa=172.16.1.50
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,arp_spa=172.16.1.60
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:70,arp_spa=172.16.1.70
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:50,nw_src=172.16.1.50
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:10:60,nw_src=172.16.1.60
 actions=drop
@@ -19953,7 +19953,7 @@ 
priority=100,arp,reg0=0xac10010a,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl
 
 AT_CHECK_UNQUOTED([ovs-ofctl dump-flows br-int table=OFTABLE_MAC_CACHE_USE | 
grep priority | \
                    awk '{print $[7], $[8]}' | sort], [0], [dnl
-priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10,arp_op=2
 actions=drop
+priority=100,arp,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,arp_spa=172.16.1.10
 actions=drop
 
priority=100,ip,reg14=0x$rtr_port_key,metadata=0x$rtr_dp_key,dl_src=f0:00:0f:16:01:10,nw_src=172.16.1.10
 actions=drop
 ])
 
-- 
2.55.0

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

Reply via email to