18c2ecf20Sopenharmony_ci#!/bin/bash 28c2ecf20Sopenharmony_ci# SPDX-License-Identifier: GPL-2.0 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci. "$(dirname "${0}")/mptcp_lib.sh" 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_cirndh=$(printf %x $sec)-$(mktemp -u XXXXXX) 78c2ecf20Sopenharmony_cins="ns1-$rndh" 88c2ecf20Sopenharmony_ciksft_skip=4 98c2ecf20Sopenharmony_citest_cnt=1 108c2ecf20Sopenharmony_ciret=0 118c2ecf20Sopenharmony_cipids=() 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ciflush_pids() 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci # mptcp_connect in join mode will sleep a bit before completing, 168c2ecf20Sopenharmony_ci # give it some time 178c2ecf20Sopenharmony_ci sleep 1.1 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci for pid in ${pids[@]}; do 208c2ecf20Sopenharmony_ci [ -d /proc/$pid ] && kill -SIGUSR1 $pid >/dev/null 2>&1 218c2ecf20Sopenharmony_ci done 228c2ecf20Sopenharmony_ci pids=() 238c2ecf20Sopenharmony_ci} 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_cicleanup() 268c2ecf20Sopenharmony_ci{ 278c2ecf20Sopenharmony_ci ip netns del $ns 288c2ecf20Sopenharmony_ci for pid in ${pids[@]}; do 298c2ecf20Sopenharmony_ci [ -d /proc/$pid ] && kill -9 $pid >/dev/null 2>&1 308c2ecf20Sopenharmony_ci done 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_cimptcp_lib_check_mptcp 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ciip -Version > /dev/null 2>&1 368c2ecf20Sopenharmony_ciif [ $? -ne 0 ];then 378c2ecf20Sopenharmony_ci echo "SKIP: Could not run test without ip tool" 388c2ecf20Sopenharmony_ci exit $ksft_skip 398c2ecf20Sopenharmony_cifi 408c2ecf20Sopenharmony_ciss -h | grep -q MPTCP 418c2ecf20Sopenharmony_ciif [ $? -ne 0 ];then 428c2ecf20Sopenharmony_ci echo "SKIP: ss tool does not support MPTCP" 438c2ecf20Sopenharmony_ci exit $ksft_skip 448c2ecf20Sopenharmony_cifi 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci__chk_nr() 478c2ecf20Sopenharmony_ci{ 488c2ecf20Sopenharmony_ci local condition="$1" 498c2ecf20Sopenharmony_ci local expected=$2 508c2ecf20Sopenharmony_ci local msg nr 518c2ecf20Sopenharmony_ci 528c2ecf20Sopenharmony_ci shift 2 538c2ecf20Sopenharmony_ci msg=$* 548c2ecf20Sopenharmony_ci nr=$(ss -inmHMN $ns | $condition) 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci printf "%-50s" "$msg" 578c2ecf20Sopenharmony_ci if [ $nr != $expected ]; then 588c2ecf20Sopenharmony_ci echo "[ fail ] expected $expected found $nr" 598c2ecf20Sopenharmony_ci ret=$test_cnt 608c2ecf20Sopenharmony_ci else 618c2ecf20Sopenharmony_ci echo "[ ok ]" 628c2ecf20Sopenharmony_ci fi 638c2ecf20Sopenharmony_ci test_cnt=$((test_cnt+1)) 648c2ecf20Sopenharmony_ci} 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_cichk_msk_nr() 678c2ecf20Sopenharmony_ci{ 688c2ecf20Sopenharmony_ci __chk_nr "grep -c token:" $* 698c2ecf20Sopenharmony_ci} 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_cichk_msk_fallback_nr() 728c2ecf20Sopenharmony_ci{ 738c2ecf20Sopenharmony_ci __chk_nr "grep -c fallback" $* 748c2ecf20Sopenharmony_ci} 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_cichk_msk_remote_key_nr() 778c2ecf20Sopenharmony_ci{ 788c2ecf20Sopenharmony_ci __chk_nr "grep -c remote_key" $* 798c2ecf20Sopenharmony_ci} 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_ci 828c2ecf20Sopenharmony_citrap cleanup EXIT 838c2ecf20Sopenharmony_ciip netns add $ns 848c2ecf20Sopenharmony_ciip -n $ns link set dev lo up 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ciecho "a" | ip netns exec $ns ./mptcp_connect -p 10000 -l 0.0.0.0 -t 100 >/dev/null & 878c2ecf20Sopenharmony_cisleep 0.1 888c2ecf20Sopenharmony_cipids[0]=$! 898c2ecf20Sopenharmony_cichk_msk_nr 0 "no msk on netns creation" 908c2ecf20Sopenharmony_ci 918c2ecf20Sopenharmony_ciecho "b" | ip netns exec $ns ./mptcp_connect -p 10000 127.0.0.1 -j -t 100 >/dev/null & 928c2ecf20Sopenharmony_cisleep 0.1 938c2ecf20Sopenharmony_cipids[1]=$! 948c2ecf20Sopenharmony_cichk_msk_nr 2 "after MPC handshake " 958c2ecf20Sopenharmony_cichk_msk_remote_key_nr 2 "....chk remote_key" 968c2ecf20Sopenharmony_cichk_msk_fallback_nr 0 "....chk no fallback" 978c2ecf20Sopenharmony_ciflush_pids 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ciecho "a" | ip netns exec $ns ./mptcp_connect -p 10001 -s TCP -l 0.0.0.0 -t 100 >/dev/null & 1018c2ecf20Sopenharmony_cipids[0]=$! 1028c2ecf20Sopenharmony_cisleep 0.1 1038c2ecf20Sopenharmony_ciecho "b" | ip netns exec $ns ./mptcp_connect -p 10001 127.0.0.1 -j -t 100 >/dev/null & 1048c2ecf20Sopenharmony_cipids[1]=$! 1058c2ecf20Sopenharmony_cisleep 0.1 1068c2ecf20Sopenharmony_cichk_msk_fallback_nr 1 "check fallback" 1078c2ecf20Sopenharmony_ciflush_pids 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ciNR_CLIENTS=100 1108c2ecf20Sopenharmony_cifor I in `seq 1 $NR_CLIENTS`; do 1118c2ecf20Sopenharmony_ci echo "a" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) -l 0.0.0.0 -t 100 -w 10 >/dev/null & 1128c2ecf20Sopenharmony_ci pids[$((I*2))]=$! 1138c2ecf20Sopenharmony_cidone 1148c2ecf20Sopenharmony_cisleep 0.1 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_cifor I in `seq 1 $NR_CLIENTS`; do 1178c2ecf20Sopenharmony_ci echo "b" | ip netns exec $ns ./mptcp_connect -p $((I+10001)) 127.0.0.1 -t 100 -w 10 >/dev/null & 1188c2ecf20Sopenharmony_ci pids[$((I*2 + 1))]=$! 1198c2ecf20Sopenharmony_cidone 1208c2ecf20Sopenharmony_cisleep 1.5 1218c2ecf20Sopenharmony_ci 1228c2ecf20Sopenharmony_cichk_msk_nr $((NR_CLIENTS*2)) "many msk socket present" 1238c2ecf20Sopenharmony_ciflush_pids 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ciexit $ret 126