18c2ecf20Sopenharmony_ci#!/bin/bash
28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci. "$(dirname "${0}")/mptcp_lib.sh"
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ciksft_skip=4
78c2ecf20Sopenharmony_ciret=0
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ciusage() {
108c2ecf20Sopenharmony_ci	echo "Usage: $0 [ -h ]"
118c2ecf20Sopenharmony_ci}
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ciwhile getopts "$optstring" option;do
158c2ecf20Sopenharmony_ci	case "$option" in
168c2ecf20Sopenharmony_ci	"h")
178c2ecf20Sopenharmony_ci		usage $0
188c2ecf20Sopenharmony_ci		exit 0
198c2ecf20Sopenharmony_ci		;;
208c2ecf20Sopenharmony_ci	"?")
218c2ecf20Sopenharmony_ci		usage $0
228c2ecf20Sopenharmony_ci		exit 1
238c2ecf20Sopenharmony_ci		;;
248c2ecf20Sopenharmony_ci	esac
258c2ecf20Sopenharmony_cidone
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cisec=$(date +%s)
288c2ecf20Sopenharmony_cirndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
298c2ecf20Sopenharmony_cins1="ns1-$rndh"
308c2ecf20Sopenharmony_cierr=$(mktemp)
318c2ecf20Sopenharmony_ciret=0
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cicleanup()
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_ci	rm -f $err
368c2ecf20Sopenharmony_ci	ip netns del $ns1
378c2ecf20Sopenharmony_ci}
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_cimptcp_lib_check_mptcp
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciip -Version > /dev/null 2>&1
428c2ecf20Sopenharmony_ciif [ $? -ne 0 ];then
438c2ecf20Sopenharmony_ci	echo "SKIP: Could not run test without ip tool"
448c2ecf20Sopenharmony_ci	exit $ksft_skip
458c2ecf20Sopenharmony_cifi
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_citrap cleanup EXIT
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ciip netns add $ns1 || exit $ksft_skip
508c2ecf20Sopenharmony_ciip -net $ns1 link set lo up
518c2ecf20Sopenharmony_ciip netns exec $ns1 sysctl -q net.mptcp.enabled=1
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_cicheck()
548c2ecf20Sopenharmony_ci{
558c2ecf20Sopenharmony_ci	local cmd="$1"
568c2ecf20Sopenharmony_ci	local expected="$2"
578c2ecf20Sopenharmony_ci	local msg="$3"
588c2ecf20Sopenharmony_ci	local out=`$cmd 2>$err`
598c2ecf20Sopenharmony_ci	local cmd_ret=$?
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci	printf "%-50s %s" "$msg"
628c2ecf20Sopenharmony_ci	if [ $cmd_ret -ne 0 ]; then
638c2ecf20Sopenharmony_ci		echo "[FAIL] command execution '$cmd' stderr "
648c2ecf20Sopenharmony_ci		cat $err
658c2ecf20Sopenharmony_ci		ret=1
668c2ecf20Sopenharmony_ci	elif [ "$out" = "$expected" ]; then
678c2ecf20Sopenharmony_ci		echo "[ OK ]"
688c2ecf20Sopenharmony_ci	else
698c2ecf20Sopenharmony_ci		echo -n "[FAIL] "
708c2ecf20Sopenharmony_ci		echo "expected '$expected' got '$out'"
718c2ecf20Sopenharmony_ci		ret=1
728c2ecf20Sopenharmony_ci	fi
738c2ecf20Sopenharmony_ci}
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "defaults addr list"
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_cidefault_limits="$(ip netns exec $ns1 ./pm_nl_ctl limits)"
788c2ecf20Sopenharmony_ciif mptcp_lib_expect_all_features; then
798c2ecf20Sopenharmony_ci	check "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 0
808c2ecf20Sopenharmony_cisubflows 0" "defaults limits"
818c2ecf20Sopenharmony_cifi
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.1
848c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.2 flags subflow dev lo
858c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3 flags signal,backup
868c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 1" "id 1 flags  10.0.1.1" "simple add/get addr"
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" \
898c2ecf20Sopenharmony_ci"id 1 flags  10.0.1.1
908c2ecf20Sopenharmony_ciid 2 flags subflow dev lo 10.0.1.2
918c2ecf20Sopenharmony_ciid 3 flags signal,backup 10.0.1.3" "dump addrs"
928c2ecf20Sopenharmony_ci
938c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl del 2
948c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 2" "" "simple del addr"
958c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" \
968c2ecf20Sopenharmony_ci"id 1 flags  10.0.1.1
978c2ecf20Sopenharmony_ciid 3 flags signal,backup 10.0.1.3" "dump addrs after del"
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.3
1008c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "" "duplicate addr"
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl add 10.0.1.4 id 10 flags signal
1038c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 4" "id 4 flags signal 10.0.1.4" "id addr increment"
1048c2ecf20Sopenharmony_ci
1058c2ecf20Sopenharmony_cifor i in `seq 5 9`; do
1068c2ecf20Sopenharmony_ci	ip netns exec $ns1 ./pm_nl_ctl add 10.0.1.$i flags signal >/dev/null 2>&1
1078c2ecf20Sopenharmony_cidone
1088c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 9" "id 9 flags signal 10.0.1.9" "hard addr limit"
1098c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl get 10" "" "above hard addr limit"
1108c2ecf20Sopenharmony_ci
1118c2ecf20Sopenharmony_cifor i in `seq 9 256`; do
1128c2ecf20Sopenharmony_ci	ip netns exec $ns1 ./pm_nl_ctl del $i
1138c2ecf20Sopenharmony_ci	ip netns exec $ns1 ./pm_nl_ctl add 10.0.0.9
1148c2ecf20Sopenharmony_cidone
1158c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "id 1 flags  10.0.1.1
1168c2ecf20Sopenharmony_ciid 3 flags signal,backup 10.0.1.3
1178c2ecf20Sopenharmony_ciid 4 flags signal 10.0.1.4
1188c2ecf20Sopenharmony_ciid 5 flags signal 10.0.1.5
1198c2ecf20Sopenharmony_ciid 6 flags signal 10.0.1.6
1208c2ecf20Sopenharmony_ciid 7 flags signal 10.0.1.7
1218c2ecf20Sopenharmony_ciid 8 flags signal 10.0.1.8" "id limit"
1228c2ecf20Sopenharmony_ci
1238c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl flush
1248c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl dump" "" "flush addrs"
1258c2ecf20Sopenharmony_ci
1268c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 9 1
1278c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "rcv addrs above hard limit"
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 1 9
1308c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "$default_limits" "subflows above hard limit"
1318c2ecf20Sopenharmony_ci
1328c2ecf20Sopenharmony_ciip netns exec $ns1 ./pm_nl_ctl limits 8 8
1338c2ecf20Sopenharmony_cicheck "ip netns exec $ns1 ./pm_nl_ctl limits" "accept 8
1348c2ecf20Sopenharmony_cisubflows 8" "set limits"
1358c2ecf20Sopenharmony_ci
1368c2ecf20Sopenharmony_ciexit $ret
137