• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1#!/bin/bash
2# SPDX-License-Identifier: GPL-2.0
3
4. "$(dirname "${0}")/mptcp_lib.sh"
5
6rndh=$(printf %x $sec)-$(mktemp -u XXXXXX)
7ns="ns1-$rndh"
8ksft_skip=4
9test_cnt=1
10ret=0
11pids=()
12
13flush_pids()
14{
15	# mptcp_connect in join mode will sleep a bit before completing,
16	# give it some time
17	sleep 1.1
18
19	for pid in ${pids[@]}; do
20		[ -d /proc/$pid ] && kill -SIGUSR1 $pid >/dev/null 2>&1
21	done
22	pids=()
23}
24
25cleanup()
26{
27	ip netns del $ns
28	for pid in ${pids[@]}; do
29		[ -d /proc/$pid ] && kill -9 $pid >/dev/null 2>&1
30	done
31}
32
33mptcp_lib_check_mptcp
34
35ip -Version > /dev/null 2>&1
36if [ $? -ne 0 ];then
37	echo "SKIP: Could not run test without ip tool"
38	exit $ksft_skip
39fi
40ss -h | grep -q MPTCP
41if [ $? -ne 0 ];then
42	echo "SKIP: ss tool does not support MPTCP"
43	exit $ksft_skip
44fi
45
46__chk_nr()
47{
48	local condition="$1"
49	local expected=$2
50	local msg nr
51
52	shift 2
53	msg=$*
54	nr=$(ss -inmHMN $ns | $condition)
55
56	printf "%-50s" "$msg"
57	if [ $nr != $expected ]; then
58		echo "[ fail ] expected $expected found $nr"
59		ret=$test_cnt
60	else
61		echo "[  ok  ]"
62	fi
63	test_cnt=$((test_cnt+1))
64}
65
66chk_msk_nr()
67{
68	__chk_nr "grep -c token:" $*
69}
70
71chk_msk_fallback_nr()
72{
73		__chk_nr "grep -c fallback" $*
74}
75
76chk_msk_remote_key_nr()
77{
78		__chk_nr "grep -c remote_key" $*
79}
80
81
82trap cleanup EXIT
83ip netns add $ns
84ip -n $ns link set dev lo up
85
86echo "a" | ip netns exec $ns ./mptcp_connect -p 10000 -l 0.0.0.0 -t 100 >/dev/null &
87sleep 0.1
88pids[0]=$!
89chk_msk_nr 0 "no msk on netns creation"
90
91echo "b" | ip netns exec $ns ./mptcp_connect -p 10000 127.0.0.1 -j -t 100 >/dev/null &
92sleep 0.1
93pids[1]=$!
94chk_msk_nr 2 "after MPC handshake "
95chk_msk_remote_key_nr 2 "....chk remote_key"
96chk_msk_fallback_nr 0 "....chk no fallback"
97flush_pids
98
99
100echo "a" | ip netns exec $ns ./mptcp_connect -p 10001 -s TCP -l 0.0.0.0 -t 100 >/dev/null &
101pids[0]=$!
102sleep 0.1
103echo "b" | ip netns exec $ns ./mptcp_connect -p 10001 127.0.0.1 -j -t 100 >/dev/null &
104pids[1]=$!
105sleep 0.1
106chk_msk_fallback_nr 1 "check fallback"
107flush_pids
108
109NR_CLIENTS=100
110for I in `seq 1 $NR_CLIENTS`; do
111	echo "a" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) -l 0.0.0.0 -t 100 -w 10 >/dev/null  &
112	pids[$((I*2))]=$!
113done
114sleep 0.1
115
116for I in `seq 1 $NR_CLIENTS`; do
117	echo "b" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) 127.0.0.1 -t 100 -w 10 >/dev/null &
118	pids[$((I*2 + 1))]=$!
119done
120sleep 1.5
121
122chk_msk_nr $((NR_CLIENTS*2)) "many msk socket present"
123flush_pids
124
125exit $ret
126