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