Skip to content

Commit eedbc68

Browse files
Paolo Abenidavem330
authored andcommitted
selftests: add PM netlink functional tests
This introduces basic self-tests for the PM netlink, checking the basic APIs and possible exceptional values. Signed-off-by: Paolo Abeni <[email protected]> Signed-off-by: Mat Martineau <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 01cacb0 commit eedbc68

File tree

4 files changed

+751
-3
lines changed

4 files changed

+751
-3
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
mptcp_connect
2+
pm_nl_ctl
23
*.pcap

tools/testing/selftests/net/mptcp/Makefile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
# SPDX-License-Identifier: GPL-2.0
22

33
top_srcdir = ../../../../..
4+
KSFT_KHDR_INSTALL := 1
45

5-
CFLAGS = -Wall -Wl,--no-as-needed -O2 -g
6+
CFLAGS = -Wall -Wl,--no-as-needed -O2 -g -I$(top_srcdir)/usr/include
67

7-
TEST_PROGS := mptcp_connect.sh
8+
TEST_PROGS := mptcp_connect.sh pm_netlink.sh
89

9-
TEST_GEN_FILES = mptcp_connect
10+
TEST_GEN_FILES = mptcp_connect pm_nl_ctl
1011

1112
TEST_FILES := settings
1213

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
#!/bin/bash
2+
# SPDX-License-Identifier: GPL-2.0
3+
4+
ksft_skip=4
5+
ret=0
6+
7+
usage() {
8+
echo "Usage: $0 [ -h ]"
9+
}
10+
11+
12+
while getopts "$optstring" option;do
13+
case "$option" in
14+
"h")
15+
usage $0
16+
exit 0
17+
;;
18+
"?")
19+
usage $0
20+
exit 1
21+
;;
22+
esac
23+
done
24+
25+
sec=$(date +%s)
26+
rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
27+
ns1="ns1-$rndh"
28+
err=$(mktemp)
29+
ret=0
30+
31+
cleanup()
32+
{
33+
rm -f $out
34+
ip netns del $ns1
35+
}
36+
37+
ip -Version > /dev/null 2>&1
38+
if [ $? -ne 0 ];then
39+
echo "SKIP: Could not run test without ip tool"
40+
exit $ksft_skip
41+
fi
42+
43+
trap cleanup EXIT
44+
45+
ip netns add $ns1 || exit $ksft_skip
46+
ip -net $ns1 link set lo up
47+
ip netns exec $ns1 sysctl -q net.mptcp.enabled=1
48+
49+
check()
50+
{
51+
local cmd="$1"
52+
local expected="$2"
53+
local msg="$3"
54+
local out=`$cmd 2>$err`
55+
local cmd_ret=$?
56+
57+
printf "%-50s %s" "$msg"
58+
if [ $cmd_ret -ne 0 ]; then
59+
echo "[FAIL] command execution '$cmd' stderr "
60+
cat $err
61+
ret=1
62+
elif [ "$out" = "$expected" ]; then
63+
echo "[ OK ]"
64+
else
65+
echo -n "[FAIL] "
66+
echo "expected '$expected' got '$out'"
67+
ret=1
68+
fi
69+
}
70+
71+
check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list"
72+
check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
73+
subflows 0" "defaults limits"
74+
75+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
76+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo
77+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup
78+
check "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags 10.0.1.1 " "simple add/get addr"
79+
80+
check "ip netns exec $ns1 ./pm_nl_ctl dump" \
81+
"id 1 flags 10.0.1.1
82+
id 2 flags subflow dev lo 10.0.1.2
83+
id 3 flags signal,backup 10.0.1.3 " "dump addrs"
84+
85+
ip netns exec $ns1 ./pm_nl_ctl del 2
86+
check "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr"
87+
check "ip netns exec $ns1 ./pm_nl_ctl dump" \
88+
"id 1 flags 10.0.1.1
89+
id 3 flags signal,backup 10.0.1.3 " "dump addrs after del"
90+
91+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3
92+
check "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr"
93+
94+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 id 10 flags signal
95+
check "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4 " "id addr increment"
96+
97+
for i in `seq 5 9`; do
98+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1
99+
done
100+
check "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9 " "hard addr limit"
101+
check "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit"
102+
103+
for i in `seq 9 256`; do
104+
ip netns exec $ns1 ./pm_nl_ctl del $i
105+
ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9
106+
done
107+
check "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags 10.0.1.1
108+
id 3 flags signal,backup 10.0.1.3
109+
id 4 flags signal 10.0.1.4
110+
id 5 flags signal 10.0.1.5
111+
id 6 flags signal 10.0.1.6
112+
id 7 flags signal 10.0.1.7
113+
id 8 flags signal 10.0.1.8 " "id limit"
114+
115+
ip netns exec $ns1 ./pm_nl_ctl flush
116+
check "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs"
117+
118+
ip netns exec $ns1 ./pm_nl_ctl limits 9 1
119+
check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
120+
subflows 0" "rcv addrs above hard limit"
121+
122+
ip netns exec $ns1 ./pm_nl_ctl limits 1 9
123+
check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
124+
subflows 0" "subflows above hard limit"
125+
126+
ip netns exec $ns1 ./pm_nl_ctl limits 8 8
127+
check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8
128+
subflows 8" "set limits"
129+
130+
exit $ret

0 commit comments

Comments
 (0)