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