selftests/bpf/xdp_redirect_multi: Limit the tests in netns
[ Upstream commit8955c1a329
] 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:d232924762
("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>
This commit is contained in:
Родитель
a99e4d94df
Коммит
39db3e5681
|
@ -2,11 +2,11 @@
|
||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
#
|
#
|
||||||
# Test topology:
|
# Test topology:
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - -
|
||||||
# | veth1 veth2 veth3 | ... init net
|
# | veth1 veth2 veth3 | ns0
|
||||||
# - -| - - - - - - | - - - - - - | - -
|
# - -| - - - - - - | - - - - - - | - -
|
||||||
# --------- --------- ---------
|
# --------- --------- ---------
|
||||||
# | veth0 | | veth0 | | veth0 | ...
|
# | veth0 | | veth0 | | veth0 |
|
||||||
# --------- --------- ---------
|
# --------- --------- ---------
|
||||||
# ns1 ns2 ns3
|
# ns1 ns2 ns3
|
||||||
#
|
#
|
||||||
|
@ -51,6 +51,7 @@ clean_up()
|
||||||
ip link del veth$i 2> /dev/null
|
ip link del veth$i 2> /dev/null
|
||||||
ip netns del ns$i 2> /dev/null
|
ip netns del ns$i 2> /dev/null
|
||||||
done
|
done
|
||||||
|
ip netns del ns0 2> /dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
# Kselftest framework requirement - SKIP code is 4.
|
# Kselftest framework requirement - SKIP code is 4.
|
||||||
|
@ -78,10 +79,12 @@ setup_ns()
|
||||||
mode="xdpdrv"
|
mode="xdpdrv"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
ip netns add ns0
|
||||||
for i in $(seq $NUM); do
|
for i in $(seq $NUM); do
|
||||||
ip netns add ns$i
|
ip netns add ns$i
|
||||||
ip link add veth$i type veth peer name veth0 netns ns$i
|
ip -n ns$i link add veth0 index 2 type veth \
|
||||||
ip link set veth$i up
|
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 link set veth0 up
|
||||||
|
|
||||||
ip -n ns$i addr add 192.0.2.$i/24 dev veth0
|
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 || \
|
xdp_dummy.o sec xdp_dummy &> /dev/null || \
|
||||||
{ test_fail "Unable to load dummy xdp" && exit 1; }
|
{ test_fail "Unable to load dummy xdp" && exit 1; }
|
||||||
IFACES="$IFACES veth$i"
|
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
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,9 +180,13 @@ do_tests()
|
||||||
xdpgeneric) drv_p="-S";;
|
xdpgeneric) drv_p="-S";;
|
||||||
esac
|
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=$!
|
xdp_pid=$!
|
||||||
sleep 1
|
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
|
if [ "$mode" = "xdpegress" ]; then
|
||||||
do_egress_tests $mode
|
do_egress_tests $mode
|
||||||
|
@ -190,7 +197,7 @@ do_tests()
|
||||||
kill $xdp_pid
|
kill $xdp_pid
|
||||||
}
|
}
|
||||||
|
|
||||||
trap clean_up 0 2 3 6 9
|
trap clean_up EXIT
|
||||||
|
|
||||||
check_env
|
check_env
|
||||||
|
|
||||||
|
|
|
@ -129,7 +129,7 @@ int main(int argc, char **argv)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Get interfaces");
|
printf("Get interfaces:");
|
||||||
for (i = 0; i < MAX_IFACE_NUM && argv[optind + i]; i++) {
|
for (i = 0; i < MAX_IFACE_NUM && argv[optind + i]; i++) {
|
||||||
ifaces[i] = if_nametoindex(argv[optind + i]);
|
ifaces[i] = if_nametoindex(argv[optind + i]);
|
||||||
if (!ifaces[i])
|
if (!ifaces[i])
|
||||||
|
@ -139,7 +139,7 @@ int main(int argc, char **argv)
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
if (ifaces[i] > MAX_INDEX_NUM) {
|
if (ifaces[i] > MAX_INDEX_NUM) {
|
||||||
printf("Interface index to large\n");
|
printf(" interface index too large\n");
|
||||||
goto err_out;
|
goto err_out;
|
||||||
}
|
}
|
||||||
printf(" %d", ifaces[i]);
|
printf(" %d", ifaces[i]);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче