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