Replace hard AT_CHECK assertions on conntrack state after CT
flush operations with OVS_WAIT_FOR_OUTPUT/OVS_WAIT_UNTIL.

The CT flush triggered by ECMP route deletion races with
in-flight TCP packets from still-closing nc -z connections.
When the flush deletes a conntrack entry in LAST_ACK state,
a trailing ACK packet can re-create the entry as ESTABLISHED
via nf_conntrack_tcp_loose, causing the immediate AT_CHECK
to find unexpected entries.

While at it fix ipv4 address used in ipv6 test.

Signed-off-by: Xavier Simonart <[email protected]>
---
 tests/system-ovn.at | 28 ++++++++--------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/tests/system-ovn.at b/tests/system-ovn.at
index 8387b4440..7d98661e8 100644
--- a/tests/system-ovn.at
+++ b/tests/system-ovn.at
@@ -15076,7 +15076,7 @@ check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 1
 check_column 'f0:00:00:01:02:05' ECMP_Nexthop mac nexthop='172.16.1.3'
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) | \
+OVS_WAIT_FOR_OUTPUT([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) 
| \
 sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
 sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
 
icmp,orig=(src=172.16.2.10,dst=192.168.1.2,id=<cleared>,type=8,code=0),reply=(src=192.168.1.2,dst=172.16.2.10,id=<cleared>,type=0,code=0),zone=<cleared>,mark=<cleared>,labels=0xf0000001020500000000
@@ -15114,10 +15114,7 @@ check ovn-nbctl lr-route-del R1 172.16.2.0/24 
172.16.1.2
 check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 1
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
-sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
-])
+OVS_WAIT_UNTIL([test "$(ovs-appctl dpctl/dump-conntrack | 
FORMAT_CT(172.16.2.10) | wc -l)" = "0"])
 
 # Remove second ECMP route
 check ovn-nbctl lr-route-del R1
@@ -15165,7 +15162,7 @@ wait_row_count ECMP_Nexthop 2
 wait_column 'f0:00:00:01:02:06' ECMP_Nexthop mac nexthop='172.16.1.2'
 wait_column 'f0:00:00:01:02:05' ECMP_Nexthop mac nexthop='172.16.1.3'
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) | \
+OVS_WAIT_FOR_OUTPUT([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) 
| \
 sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
 sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
 
icmp,orig=(src=172.16.2.10,dst=192.168.2.2,id=<cleared>,type=8,code=0),reply=(src=192.168.2.2,dst=172.16.2.10,id=<cleared>,type=0,code=0),zone=<cleared>,mark=<cleared>,labels=0xf0000001020600000000
@@ -15175,10 +15172,7 @@ 
tcp,orig=(src=172.16.2.10,dst=192.168.2.2,sport=<cleared>,dport=<cleared>),reply
 check ovn-nbctl lr-route-del R2
 check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 0
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
-sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
-])
+OVS_WAIT_UNTIL([test "$(ovs-appctl dpctl/dump-conntrack | 
FORMAT_CT(172.16.2.10) | wc -l)" = "0"])
 
 OVN_CLEANUP_CONTROLLER([hv1])
 
@@ -15332,7 +15326,7 @@ check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 1
 check_column 'f0:00:00:01:02:05' ECMP_Nexthop mac nexthop='"fd12::3"'
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | \
+OVS_WAIT_FOR_OUTPUT([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | \
 sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
 sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
 
icmpv6,orig=(src=fd13::a,dst=fd11::2,id=<cleared>,type=128,code=0),reply=(src=fd11::2,dst=fd13::a,id=<cleared>,type=129,code=0),zone=<cleared>,mark=<cleared>,labels=0xf0000001020500000000
@@ -15370,10 +15364,7 @@ check ovn-nbctl lr-route-del R1 fd13::/64 fd12::2
 check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 1
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
-sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
-])
+OVS_WAIT_UNTIL([test "$(ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | 
wc -l)" = "0"])
 
 # Remove second ECMP route
 check ovn-nbctl lr-route-del R1
@@ -15422,7 +15413,7 @@ wait_row_count ECMP_Nexthop 2
 wait_column 'f0:00:00:01:02:06' ECMP_Nexthop mac nexthop='"fd12::2"'
 wait_column 'f0:00:00:01:02:05' ECMP_Nexthop mac nexthop='"fd12::3"'
 
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | \
+OVS_WAIT_FOR_OUTPUT([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | \
 sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
 sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
 
icmpv6,orig=(src=fd13::a,dst=fd14::2,id=<cleared>,type=128,code=0),reply=(src=fd14::2,dst=fd13::a,id=<cleared>,type=129,code=0),zone=<cleared>,mark=<cleared>,labels=0xf0000001020600000000
@@ -15432,10 +15423,7 @@ 
tcp,orig=(src=fd13::a,dst=fd14::2,sport=<cleared>,dport=<cleared>),reply=(src=fd
 check ovn-nbctl lr-route-del R2
 check ovn-nbctl --wait=hv sync
 wait_row_count ECMP_Nexthop 0
-AT_CHECK([ovs-appctl dpctl/dump-conntrack | FORMAT_CT(172.16.2.10) | \
-sed -e 's/zone=[[0-9]]*/zone=<cleared>/' |
-sed -e 's/mark=[[0-9]]*/mark=<cleared>/' | sort], [0], [dnl
-])
+OVS_WAIT_UNTIL([test "$(ovs-appctl dpctl/dump-conntrack | FORMAT_CT(fd13::a) | 
wc -l)" = "0"])
 
 OVN_CLEANUP_CONTROLLER([hv1])
 
-- 
2.47.1

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

Reply via email to