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