lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 751/849] selftests/bpf/xdp_redirect_multi: Limit the tests in netns
    Date
    From: Hangbin Liu <liuhangbin@gmail.com>

    [ Upstream commit 8955c1a329873385775081e029d9a7c6aa9037e1 ]

    As I want to test both DEVMAP and DEVMAP_HASH in XDP multicast redirect, I
    limited DEVMAP max entries to a small value for performace. When the test
    runs after amount of interface creating/deleting tests. The interface index
    will exceed the map max entries and xdp_redirect_multi will error out with
    "Get interfacesInterface index to large".

    Fix this issue by limit the tests in netns and specify the ifindex when
    creating interfaces.

    Fixes: d23292476297 ("selftests/bpf: Add xdp_redirect_multi test")
    Reported-by: Jiri Benc <jbenc@redhat.com>
    Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
    Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
    Link: https://lore.kernel.org/bpf/20211027033553.962413-5-liuhangbin@gmail.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    .../selftests/bpf/test_xdp_redirect_multi.sh | 23 ++++++++++++-------
    .../selftests/bpf/xdp_redirect_multi.c | 4 ++--
    2 files changed, 17 insertions(+), 10 deletions(-)

    diff --git a/tools/testing/selftests/bpf/test_xdp_redirect_multi.sh b/tools/testing/selftests/bpf/test_xdp_redirect_multi.sh
    index 37e347159ab44..bedff7aa7023f 100755
    --- a/tools/testing/selftests/bpf/test_xdp_redirect_multi.sh
    +++ b/tools/testing/selftests/bpf/test_xdp_redirect_multi.sh
    @@ -2,11 +2,11 @@
    # SPDX-License-Identifier: GPL-2.0
    #
    # Test topology:
    -# - - - - - - - - - - - - - - - - - - - - - - - - -
    -# | veth1 veth2 veth3 | ... init net
    +# - - - - - - - - - - - - - - - - - - -
    +# | veth1 veth2 veth3 | ns0
    # - -| - - - - - - | - - - - - - | - -
    # --------- --------- ---------
    -# | veth0 | | veth0 | | veth0 | ...
    +# | veth0 | | veth0 | | veth0 |
    # --------- --------- ---------
    # ns1 ns2 ns3
    #
    @@ -51,6 +51,7 @@ clean_up()
    ip link del veth$i 2> /dev/null
    ip netns del ns$i 2> /dev/null
    done
    + ip netns del ns0 2> /dev/null
    }

    # Kselftest framework requirement - SKIP code is 4.
    @@ -78,10 +79,12 @@ setup_ns()
    mode="xdpdrv"
    fi

    + ip netns add ns0
    for i in $(seq $NUM); do
    ip netns add ns$i
    - ip link add veth$i type veth peer name veth0 netns ns$i
    - ip link set veth$i up
    + ip -n ns$i link add veth0 index 2 type veth \
    + peer name veth$i netns ns0 index $((1 + $i))
    + ip -n ns0 link set veth$i up
    ip -n ns$i link set veth0 up

    ip -n ns$i addr add 192.0.2.$i/24 dev veth0
    @@ -92,7 +95,7 @@ setup_ns()
    xdp_dummy.o sec xdp_dummy &> /dev/null || \
    { test_fail "Unable to load dummy xdp" && exit 1; }
    IFACES="$IFACES veth$i"
    - veth_mac[$i]=$(ip link show veth$i | awk '/link\/ether/ {print $2}')
    + veth_mac[$i]=$(ip -n ns0 link show veth$i | awk '/link\/ether/ {print $2}')
    done
    }

    @@ -177,9 +180,13 @@ do_tests()
    xdpgeneric) drv_p="-S";;
    esac

    - ./xdp_redirect_multi $drv_p $IFACES &> ${LOG_DIR}/xdp_redirect_${mode}.log &
    + ip netns exec ns0 ./xdp_redirect_multi $drv_p $IFACES &> ${LOG_DIR}/xdp_redirect_${mode}.log &
    xdp_pid=$!
    sleep 1
    + if ! ps -p $xdp_pid > /dev/null; then
    + test_fail "$mode xdp_redirect_multi start failed"
    + return 1
    + fi

    if [ "$mode" = "xdpegress" ]; then
    do_egress_tests $mode
    @@ -190,7 +197,7 @@ do_tests()
    kill $xdp_pid
    }

    -trap clean_up 0 2 3 6 9
    +trap clean_up EXIT

    check_env

    diff --git a/tools/testing/selftests/bpf/xdp_redirect_multi.c b/tools/testing/selftests/bpf/xdp_redirect_multi.c
    index 3696a8f32c235..f5ffba341c174 100644
    --- a/tools/testing/selftests/bpf/xdp_redirect_multi.c
    +++ b/tools/testing/selftests/bpf/xdp_redirect_multi.c
    @@ -129,7 +129,7 @@ int main(int argc, char **argv)
    goto err_out;
    }

    - printf("Get interfaces");
    + printf("Get interfaces:");
    for (i = 0; i < MAX_IFACE_NUM && argv[optind + i]; i++) {
    ifaces[i] = if_nametoindex(argv[optind + i]);
    if (!ifaces[i])
    @@ -139,7 +139,7 @@ int main(int argc, char **argv)
    goto err_out;
    }
    if (ifaces[i] > MAX_INDEX_NUM) {
    - printf("Interface index to large\n");
    + printf(" interface index too large\n");
    goto err_out;
    }
    printf(" %d", ifaces[i]);
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 00:40    [W:2.965 / U:1.540 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site