On 8/16/24 20:43, Frode Nordahl wrote:
> The "ping6 between two ports with header modify" test currently
> fails 1 in 25 times on an idle system, and apparently 100% of the
> time on a more busy system.
> 
> The failure appears to be caused by the very first packet to a
> new destination being dropped.
> 
> Log excerpt:
>  ping6 -q -c 3 -i 0.3 -W 2 fc00::3 \
>      | grep "transmitted" | sed 's/time.*ms$/time 0ms/'
>  -3 packets transmitted, 3 received, 0% packet loss, time 0ms
>  +3 packets transmitted, 2 received, 33.3333% packet loss, time 0ms
> 
> The test already primes the neighbour table by waiting for the
> first ping to two of the destinations used in the test.
> 
> This patch adds the same wait condition for the third destination
> used in the test.

Hmm.  I'm not sure this analysis is correct.  The fc00::3 address
in the test is fully virtual, so it doesn't depend on the kernel
networking stack or anything like that.  As Paolo pointed out in
his reply, we do wait for IP addresses on kernel interfaces mostly
because of DAD.  However, there should be no DAD for fc00::3 as it
is not assigned to any interface.  And we're pre-populating the
neighbor cache manually for this address as well.  So, the ping
should actually always come through on a first attempt.

The issue with this test might be with the revalidation cycle.
We first send a few packets with action NORMAL that installs a few
datapath flows that match on MAC addresses only.  Then we change
OpenFlow rules to match on IPs, but we're not waiting for datapath
flows to be updated.  The ping may still be hitting the previous
datapath flow and being forwarded without the address modification.

So, my guess is that we should add a revalidator/wait call instead.
We do so in a few other tests that change OF rules.  This way old
datapath flows will be removed and the first ping packet should hit
the new OpenFlow rules with the header modification.

Could you try that in your setup?

Best regards, Ilya Maximets.

> 
> Having run the test in an endless successful loop for a while
> makes it highly probable to have fixed the issue.
> 
> Reported-at: https://launchpad.net/bugs/2077157
> Signed-off-by: Frode Nordahl <fnord...@ubuntu.com>
> ---
>  tests/system-traffic.at | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/tests/system-traffic.at b/tests/system-traffic.at
> index 202ff0492..bb52d2cfb 100644
> --- a/tests/system-traffic.at
> +++ b/tests/system-traffic.at
> @@ -253,6 +253,8 @@ priority=0,actions=NORMAL
>  AT_CHECK([ovs-ofctl del-flows br0])
>  AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
>  
> +OVS_WAIT_UNTIL([ip netns exec at_ns0 ping6 -c 1 fc00::3])
> +
>  NS_CHECK_EXEC([at_ns0], [ping6 -q -c 3 -i 0.3 -W 2 fc00::3 | FORMAT_PING], 
> [0], [dnl
>  3 packets transmitted, 3 received, 0% packet loss, time 0ms
>  ])

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to