Patch "selftests/bpf: Fix the flaky tc_redirect_dtime test" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    selftests/bpf: Fix the flaky tc_redirect_dtime test

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     selftests-bpf-fix-the-flaky-tc_redirect_dtime-test.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b782426d9113f0000aac89138c6173a4a45e5972
Author: Martin KaFai Lau <martin.lau@xxxxxxxxxx>
Date:   Fri Jan 19 22:05:17 2024 -0800

    selftests/bpf: Fix the flaky tc_redirect_dtime test
    
    [ Upstream commit 177f1d083a19af58f4b1206d299ed73689249fd8 ]
    
    BPF CI has been reporting the tc_redirect_dtime test failing
    from time to time:
    
    test_inet_dtime:PASS:setns src 0 nsec
    (network_helpers.c:253: errno: No route to host) Failed to connect to server
    close_netns:PASS:setns 0 nsec
    test_inet_dtime:FAIL:connect_to_fd unexpected connect_to_fd: actual -1 < expected 0
    test_tcp_clear_dtime:PASS:tcp ip6 clear dtime ingress_fwdns_p100 0 nsec
    
    The connect_to_fd failure (EHOSTUNREACH) is from the
    test_tcp_clear_dtime() test and it is the very first IPv6 traffic
    after setting up all the links, addresses, and routes.
    
    The symptom is this first connect() is always slow. In my setup, it
    could take ~3s.
    
    After some tracing and tcpdump, the slowness is mostly spent in
    the neighbor solicitation in the "ns_fwd" namespace while
    the "ns_src" and "ns_dst" are fine.
    
    I forced the kernel to drop the neighbor solicitation messages.
    I can then reproduce EHOSTUNREACH. What actually happen could be:
    - the neighbor advertisement came back a little slow.
    - the "ns_fwd" namespace concluded a neighbor discovery failure
      and triggered the ndisc_error_report() => ip6_link_failure() =>
      icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0)
    - the client's connect() reports EHOSTUNREACH after receiving
      the ICMPV6_DEST_UNREACH message.
    
    The neigh table of both "ns_src" and "ns_dst" namespace has already
    been manually populated but not the "ns_fwd" namespace. This patch
    fixes it by manually populating the neigh table also in the "ns_fwd"
    namespace.
    
    Although the namespace configuration part had been existed before
    the tc_redirect_dtime test, still Fixes-tagging the patch when
    the tc_redirect_dtime test was added since it is the only test
    hitting it so far.
    
    Fixes: c803475fd8dd ("bpf: selftests: test skb->tstamp in redirect_neigh")
    Signed-off-by: Martin KaFai Lau <martin.lau@xxxxxxxxxx>
    Signed-off-by: Andrii Nakryiko <andrii@xxxxxxxxxx>
    Link: https://lore.kernel.org/bpf/20240120060518.3604920-1-martin.lau@xxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/testing/selftests/bpf/prog_tests/tc_redirect.c b/tools/testing/selftests/bpf/prog_tests/tc_redirect.c
index 518f143c5b0fe..610887157fd85 100644
--- a/tools/testing/selftests/bpf/prog_tests/tc_redirect.c
+++ b/tools/testing/selftests/bpf/prog_tests/tc_redirect.c
@@ -188,6 +188,7 @@ static int netns_setup_links_and_routes(struct netns_setup_result *result)
 {
 	struct nstoken *nstoken = NULL;
 	char src_fwd_addr[IFADDR_STR_LEN+1] = {};
+	char src_addr[IFADDR_STR_LEN + 1] = {};
 	int err;
 
 	if (result->dev_mode == MODE_VETH) {
@@ -208,6 +209,9 @@ static int netns_setup_links_and_routes(struct netns_setup_result *result)
 	if (get_ifaddr("src_fwd", src_fwd_addr))
 		goto fail;
 
+	if (get_ifaddr("src", src_addr))
+		goto fail;
+
 	result->ifindex_src = if_nametoindex("src");
 	if (!ASSERT_GT(result->ifindex_src, 0, "ifindex_src"))
 		goto fail;
@@ -270,6 +274,13 @@ static int netns_setup_links_and_routes(struct netns_setup_result *result)
 	SYS(fail, "ip route add " IP4_DST "/32 dev dst_fwd scope global");
 	SYS(fail, "ip route add " IP6_DST "/128 dev dst_fwd scope global");
 
+	if (result->dev_mode == MODE_VETH) {
+		SYS(fail, "ip neigh add " IP4_SRC " dev src_fwd lladdr %s", src_addr);
+		SYS(fail, "ip neigh add " IP6_SRC " dev src_fwd lladdr %s", src_addr);
+		SYS(fail, "ip neigh add " IP4_DST " dev dst_fwd lladdr %s", MAC_DST);
+		SYS(fail, "ip neigh add " IP6_DST " dev dst_fwd lladdr %s", MAC_DST);
+	}
+
 	close_netns(nstoken);
 
 	/** setup in 'dst' namespace */




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux