• Felix Maurer's avatar
    selftests/bpf: Make test_lwt_ip_encap more stable and faster · d23a8720
    Felix Maurer authored
    In test_lwt_ip_encap, the ingress IPv6 encap test failed from time to
    time. The failure occured when an IPv4 ping through the IPv6 GRE
    encapsulation did not receive a reply within the timeout. The IPv4 ping
    and the IPv6 ping in the test used different timeouts (1 sec for IPv4
    and 6 sec for IPv6), probably taking into account that IPv6 might need
    longer to successfully complete. However, when IPv4 pings (with the
    short timeout) are encapsulated into the IPv6 tunnel, the delays of IPv6
    apply.
    
    The actual reason for the long delays with IPv6 was that the IPv6
    neighbor discovery sometimes did not complete in time. This was caused
    by the outgoing interface only having a tentative link local address,
    i.e., not having completed DAD for that lladdr. The ND was successfully
    retried after 1 sec but that was too late for the ping timeout.
    
    The IPv6 addresses for the test were already added with nodad. However,
    for the lladdrs, DAD was still performed. We now disable DAD in the test
    netns completely and just assume that the two lladdrs on each veth pair
    do not collide. This removes all the delays for IPv6 traffic in the
    test.
    
    Without the delays, we can now also reduce the delay of the IPv6 ping to
    1 sec. This makes the whole test complete faster because we don't need
    to wait for the excessive timeout for each IPv6 ping that is supposed
    to fail.
    
    Fixes: 0fde56e4 ("selftests: bpf: add test_lwt_ip_encap selftest")
    Signed-off-by: default avatarFelix Maurer <fmaurer@redhat.com>
    Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/4987d549d48b4e316cd5b3936de69c8d4bc75a4f.1646305899.git.fmaurer@redhat.com
    d23a8720
test_lwt_ip_encap.sh 14.6 KB