Loading net/ipv4/tcp.c +1 −1 Original line number Diff line number Diff line Loading @@ -978,7 +978,7 @@ int tcp_wmem_schedule(struct sock *sk, int copy) * Use whatever is left in sk->sk_forward_alloc and tcp_wmem[0] * to guarantee some progress. */ left = sock_net(sk)->ipv4.sysctl_tcp_wmem[0] - sk->sk_wmem_queued; left = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]) - sk->sk_wmem_queued; if (left > 0) sk_forced_mem_schedule(sk, min(left, copy)); return min(copy, sk->sk_forward_alloc); Loading net/mptcp/protocol.h +1 −1 Original line number Diff line number Diff line Loading @@ -855,7 +855,7 @@ static inline void __mptcp_sync_sndbuf(struct sock *sk) if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) return; new_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[0]; new_sndbuf = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]); mptcp_for_each_subflow(mptcp_sk(sk), subflow) { ssk_sndbuf = READ_ONCE(mptcp_subflow_tcp_sock(subflow)->sk_sndbuf); Loading tools/testing/selftests/net/mptcp/diag.sh +8 −11 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ . "$(dirname "${0}")/mptcp_lib.sh" ns="" test_cnt=1 timeout_poll=30 timeout_test=$((timeout_poll * 2 + 1)) ret=0 Loading Loading @@ -55,21 +54,20 @@ __chk_nr() nr=$(eval $command) printf "%-50s" "$msg" mptcp_lib_print_title "$msg" if [ "$nr" != "$expected" ]; then if [ "$nr" = "$skip" ] && ! mptcp_lib_expect_all_features; then echo "[ skip ] Feature probably not supported" mptcp_lib_pr_skip "Feature probably not supported" mptcp_lib_result_skip "${msg}" else echo "[ fail ] expected $expected found $nr" mptcp_lib_pr_fail "expected $expected found $nr" mptcp_lib_result_fail "${msg}" ret=${KSFT_FAIL} fi else echo "[ ok ]" mptcp_lib_pr_ok mptcp_lib_result_pass "${msg}" fi test_cnt=$((test_cnt+1)) } __chk_msk_nr() Loading Loading @@ -114,20 +112,19 @@ wait_msk_nr() sleep 1 done printf "%-50s" "$msg" mptcp_lib_print_title "$msg" if [ $i -ge $timeout ]; then echo "[ fail ] timeout while expecting $expected max $max last $nr" mptcp_lib_pr_fail "timeout while expecting $expected max $max last $nr" mptcp_lib_result_fail "${msg} # timeout" ret=${KSFT_FAIL} elif [ $nr != $expected ]; then echo "[ fail ] expected $expected found $nr" mptcp_lib_pr_fail "expected $expected found $nr" mptcp_lib_result_fail "${msg} # unexpected result" ret=${KSFT_FAIL} else echo "[ ok ]" mptcp_lib_pr_ok mptcp_lib_result_pass "${msg}" fi test_cnt=$((test_cnt+1)) } chk_msk_fallback_nr() Loading tools/testing/selftests/net/mptcp/mptcp_connect.sh +52 −46 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ do_tcp=0 checksum=false filesize=0 connect_per_transfer=1 port=$((10000 - 1)) if [ $tc_loss -eq 100 ];then tc_loss=1% Loading Loading @@ -64,14 +65,14 @@ while getopts "$optstring" option;do case "$option" in "h") usage $0 exit 0 exit ${KSFT_PASS} ;; "d") if [ $OPTARG -ge 0 ];then tc_delay="$OPTARG" else echo "-d requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "e") Loading @@ -95,7 +96,7 @@ while getopts "$optstring" option;do sndbuf="$OPTARG" else echo "-S requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "R") Loading @@ -103,7 +104,7 @@ while getopts "$optstring" option;do rcvbuf="$OPTARG" else echo "-R requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "m") Loading @@ -120,7 +121,7 @@ while getopts "$optstring" option;do ;; "?") usage $0 exit 1 exit ${KSFT_FAIL} ;; esac done Loading @@ -130,7 +131,6 @@ ns2="" ns3="" ns4="" TEST_COUNT=0 TEST_GROUP="" # This function is used in the cleanup trap Loading Loading @@ -218,7 +218,7 @@ set_ethtool_flags() { local flags="$3" if ip netns exec $ns ethtool -K $dev $flags 2>/dev/null; then echo "INFO: set $ns dev $dev: ethtool -K $flags" mptcp_lib_pr_info "set $ns dev $dev: ethtool -K $flags" fi } Loading Loading @@ -247,16 +247,23 @@ else set_ethtool_flags "$ns4" ns4eth3 "$ethtool_args" fi print_larger_title() { # here we don't have the time, a bit longer for the alignment MPTCP_LIB_TEST_FORMAT="%02u %-69s" \ mptcp_lib_print_title "${@}" } check_mptcp_disabled() { local disabled_ns mptcp_lib_ns_init disabled_ns print_larger_title "New MPTCP socket can be blocked via sysctl" # net.mptcp.enabled should be enabled by default if [ "$(ip netns exec ${disabled_ns} sysctl net.mptcp.enabled | awk '{ print $3 }')" -ne 1 ]; then echo -e "net.mptcp.enabled sysctl is not 1 by default\t\t[ FAIL ]" mptcp_lib_pr_fail "net.mptcp.enabled sysctl is not 1 by default" mptcp_lib_result_fail "net.mptcp.enabled sysctl is not 1 by default" ret=1 ret=${KSFT_FAIL} return 1 fi ip netns exec ${disabled_ns} sysctl -q net.mptcp.enabled=0 Loading @@ -267,13 +274,13 @@ check_mptcp_disabled() mptcp_lib_ns_exit "${disabled_ns}" if [ ${err} -eq 0 ]; then echo -e "New MPTCP socket cannot be blocked via sysctl\t\t[ FAIL ]" mptcp_lib_pr_fail "New MPTCP socket cannot be blocked via sysctl" mptcp_lib_result_fail "New MPTCP socket cannot be blocked via sysctl" ret=1 ret=${KSFT_FAIL} return 1 fi echo -e "New MPTCP socket can be blocked via sysctl\t\t[ OK ]" mptcp_lib_pr_ok mptcp_lib_result_pass "New MPTCP socket can be blocked via sysctl" return 0 } Loading @@ -294,8 +301,8 @@ do_ping() ip netns exec ${connector_ns} ping ${ping_args} $connect_addr >/dev/null || rc=1 if [ $rc -ne 0 ] ; then echo "$listener_ns -> $connect_addr connectivity [ FAIL ]" 1>&2 ret=1 mptcp_lib_pr_fail "$listener_ns -> $connect_addr connectivity" ret=${KSFT_FAIL} return 1 fi Loading @@ -313,9 +320,7 @@ do_transfer() local local_addr="$6" local extra_args="$7" local port port=$((10000+TEST_COUNT)) TEST_COUNT=$((TEST_COUNT+1)) port=$((port + 1)) if [ "$rcvbuf" -gt 0 ]; then extra_args+=" -R $rcvbuf" Loading @@ -330,7 +335,7 @@ do_transfer() fi if [ -n "$extra_args" ] && $options_log; then echo "INFO: extra options: $extra_args" mptcp_lib_pr_info "extra options: $extra_args" fi options_log=false Loading @@ -342,7 +347,7 @@ do_transfer() addr_port=$(printf "%s:%d" ${connect_addr} ${port}) local result_msg result_msg="$(printf "%.3s %-5s -> %.3s (%-20s) %-5s" ${connector_ns} ${cl_proto} ${listener_ns} ${addr_port} ${srv_proto})" printf "%s\t" "${result_msg}" mptcp_lib_print_title "${result_msg}" if $capture; then local capuser Loading Loading @@ -429,7 +434,7 @@ do_transfer() result_msg+=" # time=${duration}ms" printf "(duration %05sms) " "${duration}" if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then echo "[ FAIL ] client exit code $retc, server $rets" 1>&2 mptcp_lib_pr_fail "client exit code $retc, server $rets" echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2 ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port" cat /tmp/${listener_ns}.out Loading Loading @@ -474,14 +479,14 @@ do_transfer() fi if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then printf "[ FAIL ] lower MPC SYN rx (%d) than expected (%d)\n" \ "${stat_synrx_now_l}" "${expect_synrx}" 1>&2 mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx_now_l})" \ "than expected (${expect_synrx})" retc=1 fi if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ] && [ ${stat_ooo_now} -eq 0 ]; then if [ ${stat_ooo_now} -eq 0 ]; then printf "[ FAIL ] lower MPC ACK rx (%d) than expected (%d)\n" \ "${stat_ackrx_now_l}" "${expect_ackrx}" 1>&2 mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx_now_l})" \ "than expected (${expect_ackrx})" rets=1 else extra+=" [ Note ] fallback due to TCP OoO" Loading @@ -496,13 +501,13 @@ do_transfer() local csum_err_s_nr=$((csum_err_s - stat_csum_err_s)) if [ $csum_err_s_nr -gt 0 ]; then printf "[ FAIL ]\nserver got %d data checksum error[s]" ${csum_err_s_nr} mptcp_lib_pr_fail "server got ${csum_err_s_nr} data checksum error[s]" rets=1 fi local csum_err_c_nr=$((csum_err_c - stat_csum_err_c)) if [ $csum_err_c_nr -gt 0 ]; then printf "[ FAIL ]\nclient got %d data checksum error[s]" ${csum_err_c_nr} mptcp_lib_pr_fail "client got ${csum_err_c_nr} data checksum error[s]" retc=1 fi fi Loading Loading @@ -538,11 +543,11 @@ do_transfer() fi if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then printf "[ OK ]%s\n" "${extra}" mptcp_lib_pr_ok "${extra:1}" mptcp_lib_result_pass "${TEST_GROUP}: ${result_msg}" else if [ -n "${extra}" ]; then printf "%s\n" "${extra:1}" mptcp_lib_print_warn "${extra:1}" fi mptcp_lib_result_fail "${TEST_GROUP}: ${result_msg}" fi Loading Loading @@ -672,7 +677,7 @@ run_test_transparent() # following function has been exported (T). Not great but better than # checking for a specific kernel version. if ! mptcp_lib_kallsyms_has "T __ip_sock_set_tos$"; then echo "INFO: ${msg} not supported by the kernel: SKIP" mptcp_lib_pr_skip "${msg} not supported by the kernel" mptcp_lib_result_skip "${TEST_GROUP}" return fi Loading @@ -689,7 +694,7 @@ table inet mangle { } EOF then echo "SKIP: $msg, could not load nft ruleset" mptcp_lib_pr_skip "$msg, could not load nft ruleset" mptcp_lib_fail_if_expected_feature "nft rules" mptcp_lib_result_skip "${TEST_GROUP}" return Loading @@ -705,7 +710,7 @@ EOF if ! ip -net "$listener_ns" $r6flag rule add fwmark 1 lookup 100; then ip netns exec "$listener_ns" nft flush ruleset echo "SKIP: $msg, ip $r6flag rule failed" mptcp_lib_pr_skip "$msg, ip $r6flag rule failed" mptcp_lib_fail_if_expected_feature "ip rule" mptcp_lib_result_skip "${TEST_GROUP}" return Loading @@ -714,15 +719,15 @@ EOF if ! ip -net "$listener_ns" route add local $local_addr/0 dev lo table 100; then ip netns exec "$listener_ns" nft flush ruleset ip -net "$listener_ns" $r6flag rule del fwmark 1 lookup 100 echo "SKIP: $msg, ip route add local $local_addr failed" mptcp_lib_pr_skip "$msg, ip route add local $local_addr failed" mptcp_lib_fail_if_expected_feature "ip route" mptcp_lib_result_skip "${TEST_GROUP}" return fi echo "INFO: test $msg" mptcp_lib_pr_info "test $msg" TEST_COUNT=10000 port=$((20000 - 1)) local extra_args="-o TRANSPARENT" do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP \ ${connect_addr} ${local_addr} "${extra_args}" Loading @@ -733,12 +738,12 @@ EOF ip -net "$listener_ns" route del local $local_addr/0 dev lo table 100 if [ $lret -ne 0 ]; then echo "FAIL: $msg, mptcp connection error" 1>&2 mptcp_lib_pr_fail "$msg, mptcp connection error" ret=$lret return 1 fi echo "PASS: $msg" mptcp_lib_pr_info "$msg pass" return 0 } Loading @@ -747,7 +752,7 @@ run_tests_peekmode() local peekmode="$1" TEST_GROUP="peek mode: ${peekmode}" echo "INFO: with peek mode: ${peekmode}" mptcp_lib_pr_info "with peek mode: ${peekmode}" run_tests_lo "$ns1" "$ns1" 10.0.1.1 1 "-P ${peekmode}" run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1 "-P ${peekmode}" } Loading @@ -757,12 +762,12 @@ run_tests_mptfo() TEST_GROUP="MPTFO" if ! mptcp_lib_kallsyms_has "mptcp_fastopen_"; then echo "INFO: TFO not supported by the kernel: SKIP" mptcp_lib_pr_skip "TFO not supported by the kernel" mptcp_lib_result_skip "${TEST_GROUP}" return fi echo "INFO: with MPTFO start" mptcp_lib_pr_info "with MPTFO start" ip netns exec "$ns1" sysctl -q net.ipv4.tcp_fastopen=2 ip netns exec "$ns2" sysctl -q net.ipv4.tcp_fastopen=1 Loading @@ -774,7 +779,7 @@ run_tests_mptfo() ip netns exec "$ns1" sysctl -q net.ipv4.tcp_fastopen=0 ip netns exec "$ns2" sysctl -q net.ipv4.tcp_fastopen=0 echo "INFO: with MPTFO end" mptcp_lib_pr_info "with MPTFO end" } run_tests_disconnect() Loading @@ -785,7 +790,7 @@ run_tests_disconnect() TEST_GROUP="full disconnect" if ! mptcp_lib_kallsyms_has "mptcp_pm_data_reset$"; then echo "INFO: Full disconnect not supported: SKIP" mptcp_lib_pr_skip "Full disconnect not supported" mptcp_lib_result_skip "${TEST_GROUP}" return fi Loading @@ -798,7 +803,7 @@ run_tests_disconnect() cin_disconnect="$old_cin" connect_per_transfer=3 echo "INFO: disconnect" mptcp_lib_pr_info "disconnect" run_tests_lo "$ns1" "$ns1" 10.0.1.1 1 "-I 3 -i $old_cin" run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1 "-I 3 -i $old_cin" Loading @@ -822,10 +827,10 @@ log_if_error() local msg="$1" if [ ${ret} -ne 0 ]; then echo "FAIL: ${msg}" 1>&2 mptcp_lib_pr_fail "${msg}" final_ret=${ret} ret=0 ret=${KSFT_PASS} return ${final_ret} fi Loading @@ -847,7 +852,7 @@ check_mptcp_disabled stop_if_error "The kernel configuration is not valid for MPTCP" echo "INFO: validating network environment with pings" print_larger_title "Validating network environment with pings" for sender in "$ns1" "$ns2" "$ns3" "$ns4";do do_ping "$ns1" $sender 10.0.1.1 do_ping "$ns1" $sender dead:beef:1::1 Loading @@ -869,6 +874,7 @@ done mptcp_lib_result_code "${ret}" "ping tests" stop_if_error "Could not even run ping tests" mptcp_lib_pr_ok [ -n "$tc_loss" ] && tc -net "$ns2" qdisc add dev ns2eth3 root netem loss random $tc_loss delay ${tc_delay}ms tc_info="loss of $tc_loss " Loading @@ -893,7 +899,7 @@ elif [ "$reorder_delay" -gt 0 ];then tc_info+="$tc_reorder with delay ${reorder_delay}ms " fi echo "INFO: Using ${tc_info}on ns3eth4" mptcp_lib_pr_info "Using ${tc_info}on ns3eth4" tc -net "$ns3" qdisc add dev ns3eth4 root netem delay ${reorder_delay}ms $tc_reorder Loading tools/testing/selftests/net/mptcp/mptcp_join.sh +22 −45 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ err="" capout="" ns1="" ns2="" ksft_skip=4 iptables="iptables" ip6tables="ip6tables" timeout_poll=30 Loading @@ -48,7 +47,7 @@ declare -A all_tests declare -a only_tests_ids declare -a only_tests_names declare -A failed_tests TEST_COUNT=0 MPTCP_LIB_TEST_FORMAT="%03u %s\n" TEST_NAME="" nr_blank=6 Loading Loading @@ -170,11 +169,6 @@ cleanup() cleanup_partial } print_title() { printf "%03u %s\n" "${TEST_COUNT}" "${TEST_NAME}" } print_check() { printf "%-${nr_blank}s%-36s" " " "${*}" Loading @@ -190,17 +184,17 @@ print_info() print_ok() { mptcp_lib_print_ok "[ ok ]${1:+ ${*}}" mptcp_lib_pr_ok "${@}" } print_fail() { mptcp_lib_print_err "[fail]${1:+ ${*}}" mptcp_lib_pr_fail "${@}" } print_skip() { mptcp_lib_print_warn "[skip]${1:+ ${*}}" mptcp_lib_pr_skip "${@}" } # [ $1: fail msg ] Loading Loading @@ -233,7 +227,7 @@ skip_test() local i for i in "${only_tests_ids[@]}"; do if [ "${TEST_COUNT}" -eq "${i}" ]; then if [ "$((MPTCP_LIB_TEST_COUNTER+1))" -eq "${i}" ]; then return 1 fi done Loading Loading @@ -268,14 +262,13 @@ reset() TEST_NAME="${1}" TEST_COUNT=$((TEST_COUNT+1)) if skip_test; then MPTCP_LIB_TEST_COUNTER=$((MPTCP_LIB_TEST_COUNTER+1)) last_test_ignored=1 return 1 fi print_title mptcp_lib_print_title "${TEST_NAME}" if [ "${init}" != "1" ]; then init Loading Loading @@ -398,15 +391,15 @@ setup_fail_rules() -p tcp \ -m length --length 150:9999 \ -m statistic --mode nth --packet 1 --every 99999 \ -j MARK --set-mark 42 || return ${ksft_skip} -j MARK --set-mark 42 || return ${KSFT_SKIP} tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${ksft_skip} tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${KSFT_SKIP} tc -n $ns2 filter add dev ns2eth$i egress \ protocol ip prio 1000 \ handle 42 fw \ action pedit munge offset 148 u8 invert \ pipe csum tcp \ index 100 || return ${ksft_skip} index 100 || return ${KSFT_SKIP} } reset_with_fail() Loading @@ -420,7 +413,7 @@ reset_with_fail() local rc=0 setup_fail_rules "${@}" || rc=$? if [ ${rc} -eq ${ksft_skip} ]; then if [ ${rc} -eq ${KSFT_SKIP} ]; then mark_as_skipped "unable to set the 'fail' rules" return 1 fi Loading Loading @@ -457,13 +450,15 @@ reset_with_tcp_filter() # $1: err msg fail_test() { ret=1 ret=${KSFT_FAIL} if [ ${#} -gt 0 ]; then print_fail "${@}" fi # just in case a test is marked twice as failed if [ ${last_test_failed} -eq 0 ]; then failed_tests[${TEST_COUNT}]="${TEST_NAME}" failed_tests[${MPTCP_LIB_TEST_COUNTER}]="${TEST_NAME}" dump_stats last_test_failed=1 fi Loading Loading @@ -974,7 +969,7 @@ do_transfer() local srv_proto="$4" local connect_addr="$5" local port=$((10000 + TEST_COUNT - 1)) local port=$((10000 + MPTCP_LIB_TEST_COUNTER - 1)) local cappid local FAILING_LINKS=${FAILING_LINKS:-""} local fastclose=${fastclose:-""} Loading @@ -992,9 +987,9 @@ do_transfer() capuser="-Z $SUDO_USER" fi capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}") capfile=$(printf "mp_join-%02u-%s.pcap" "$MPTCP_LIB_TEST_COUNTER" "${listener_ns}") echo "Capturing traffic for test $TEST_COUNT into $capfile" echo "Capturing traffic for test $MPTCP_LIB_TEST_COUNTER into $capfile" ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 & cappid=$! Loading Loading @@ -2864,15 +2859,9 @@ backup_tests() verify_listener_events() { local evt=$1 local e_type=$2 local e_family=$3 local e_saddr=$4 local e_sport=$5 local type local family local saddr local sport local name if [ $e_type = $MPTCP_LIB_EVENT_LISTENER_CREATED ]; then Loading @@ -2890,23 +2879,11 @@ verify_listener_events() return fi type=$(mptcp_lib_evts_get_info type "$evt" "$e_type") family=$(mptcp_lib_evts_get_info family "$evt" "$e_type") sport=$(mptcp_lib_evts_get_info sport "$evt" "$e_type") if [ $family ] && [ $family = $AF_INET6 ]; then saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" "$e_type") else saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" "$e_type") fi if [ $type ] && [ $type = $e_type ] && [ $family ] && [ $family = $e_family ] && [ $saddr ] && [ $saddr = $e_saddr ] && [ $sport ] && [ $sport = $e_sport ]; then if mptcp_lib_verify_listener_events "${@}"; then print_ok return 0 fi fail_test "$e_type:$type $e_family:$family $e_saddr:$saddr $e_sport:$sport" fail_test } add_addr_ports_tests() Loading Loading @@ -3839,7 +3816,7 @@ usage() { if [ -n "${1}" ]; then echo "${1}" ret=1 ret=${KSFT_FAIL} fi echo "mptcp_join usage:" Loading Loading
net/ipv4/tcp.c +1 −1 Original line number Diff line number Diff line Loading @@ -978,7 +978,7 @@ int tcp_wmem_schedule(struct sock *sk, int copy) * Use whatever is left in sk->sk_forward_alloc and tcp_wmem[0] * to guarantee some progress. */ left = sock_net(sk)->ipv4.sysctl_tcp_wmem[0] - sk->sk_wmem_queued; left = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]) - sk->sk_wmem_queued; if (left > 0) sk_forced_mem_schedule(sk, min(left, copy)); return min(copy, sk->sk_forward_alloc); Loading
net/mptcp/protocol.h +1 −1 Original line number Diff line number Diff line Loading @@ -855,7 +855,7 @@ static inline void __mptcp_sync_sndbuf(struct sock *sk) if (sk->sk_userlocks & SOCK_SNDBUF_LOCK) return; new_sndbuf = sock_net(sk)->ipv4.sysctl_tcp_wmem[0]; new_sndbuf = READ_ONCE(sock_net(sk)->ipv4.sysctl_tcp_wmem[0]); mptcp_for_each_subflow(mptcp_sk(sk), subflow) { ssk_sndbuf = READ_ONCE(mptcp_subflow_tcp_sock(subflow)->sk_sndbuf); Loading
tools/testing/selftests/net/mptcp/diag.sh +8 −11 Original line number Diff line number Diff line Loading @@ -9,7 +9,6 @@ . "$(dirname "${0}")/mptcp_lib.sh" ns="" test_cnt=1 timeout_poll=30 timeout_test=$((timeout_poll * 2 + 1)) ret=0 Loading Loading @@ -55,21 +54,20 @@ __chk_nr() nr=$(eval $command) printf "%-50s" "$msg" mptcp_lib_print_title "$msg" if [ "$nr" != "$expected" ]; then if [ "$nr" = "$skip" ] && ! mptcp_lib_expect_all_features; then echo "[ skip ] Feature probably not supported" mptcp_lib_pr_skip "Feature probably not supported" mptcp_lib_result_skip "${msg}" else echo "[ fail ] expected $expected found $nr" mptcp_lib_pr_fail "expected $expected found $nr" mptcp_lib_result_fail "${msg}" ret=${KSFT_FAIL} fi else echo "[ ok ]" mptcp_lib_pr_ok mptcp_lib_result_pass "${msg}" fi test_cnt=$((test_cnt+1)) } __chk_msk_nr() Loading Loading @@ -114,20 +112,19 @@ wait_msk_nr() sleep 1 done printf "%-50s" "$msg" mptcp_lib_print_title "$msg" if [ $i -ge $timeout ]; then echo "[ fail ] timeout while expecting $expected max $max last $nr" mptcp_lib_pr_fail "timeout while expecting $expected max $max last $nr" mptcp_lib_result_fail "${msg} # timeout" ret=${KSFT_FAIL} elif [ $nr != $expected ]; then echo "[ fail ] expected $expected found $nr" mptcp_lib_pr_fail "expected $expected found $nr" mptcp_lib_result_fail "${msg} # unexpected result" ret=${KSFT_FAIL} else echo "[ ok ]" mptcp_lib_pr_ok mptcp_lib_result_pass "${msg}" fi test_cnt=$((test_cnt+1)) } chk_msk_fallback_nr() Loading
tools/testing/selftests/net/mptcp/mptcp_connect.sh +52 −46 Original line number Diff line number Diff line Loading @@ -33,6 +33,7 @@ do_tcp=0 checksum=false filesize=0 connect_per_transfer=1 port=$((10000 - 1)) if [ $tc_loss -eq 100 ];then tc_loss=1% Loading Loading @@ -64,14 +65,14 @@ while getopts "$optstring" option;do case "$option" in "h") usage $0 exit 0 exit ${KSFT_PASS} ;; "d") if [ $OPTARG -ge 0 ];then tc_delay="$OPTARG" else echo "-d requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "e") Loading @@ -95,7 +96,7 @@ while getopts "$optstring" option;do sndbuf="$OPTARG" else echo "-S requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "R") Loading @@ -103,7 +104,7 @@ while getopts "$optstring" option;do rcvbuf="$OPTARG" else echo "-R requires numeric argument, got \"$OPTARG\"" 1>&2 exit 1 exit ${KSFT_FAIL} fi ;; "m") Loading @@ -120,7 +121,7 @@ while getopts "$optstring" option;do ;; "?") usage $0 exit 1 exit ${KSFT_FAIL} ;; esac done Loading @@ -130,7 +131,6 @@ ns2="" ns3="" ns4="" TEST_COUNT=0 TEST_GROUP="" # This function is used in the cleanup trap Loading Loading @@ -218,7 +218,7 @@ set_ethtool_flags() { local flags="$3" if ip netns exec $ns ethtool -K $dev $flags 2>/dev/null; then echo "INFO: set $ns dev $dev: ethtool -K $flags" mptcp_lib_pr_info "set $ns dev $dev: ethtool -K $flags" fi } Loading Loading @@ -247,16 +247,23 @@ else set_ethtool_flags "$ns4" ns4eth3 "$ethtool_args" fi print_larger_title() { # here we don't have the time, a bit longer for the alignment MPTCP_LIB_TEST_FORMAT="%02u %-69s" \ mptcp_lib_print_title "${@}" } check_mptcp_disabled() { local disabled_ns mptcp_lib_ns_init disabled_ns print_larger_title "New MPTCP socket can be blocked via sysctl" # net.mptcp.enabled should be enabled by default if [ "$(ip netns exec ${disabled_ns} sysctl net.mptcp.enabled | awk '{ print $3 }')" -ne 1 ]; then echo -e "net.mptcp.enabled sysctl is not 1 by default\t\t[ FAIL ]" mptcp_lib_pr_fail "net.mptcp.enabled sysctl is not 1 by default" mptcp_lib_result_fail "net.mptcp.enabled sysctl is not 1 by default" ret=1 ret=${KSFT_FAIL} return 1 fi ip netns exec ${disabled_ns} sysctl -q net.mptcp.enabled=0 Loading @@ -267,13 +274,13 @@ check_mptcp_disabled() mptcp_lib_ns_exit "${disabled_ns}" if [ ${err} -eq 0 ]; then echo -e "New MPTCP socket cannot be blocked via sysctl\t\t[ FAIL ]" mptcp_lib_pr_fail "New MPTCP socket cannot be blocked via sysctl" mptcp_lib_result_fail "New MPTCP socket cannot be blocked via sysctl" ret=1 ret=${KSFT_FAIL} return 1 fi echo -e "New MPTCP socket can be blocked via sysctl\t\t[ OK ]" mptcp_lib_pr_ok mptcp_lib_result_pass "New MPTCP socket can be blocked via sysctl" return 0 } Loading @@ -294,8 +301,8 @@ do_ping() ip netns exec ${connector_ns} ping ${ping_args} $connect_addr >/dev/null || rc=1 if [ $rc -ne 0 ] ; then echo "$listener_ns -> $connect_addr connectivity [ FAIL ]" 1>&2 ret=1 mptcp_lib_pr_fail "$listener_ns -> $connect_addr connectivity" ret=${KSFT_FAIL} return 1 fi Loading @@ -313,9 +320,7 @@ do_transfer() local local_addr="$6" local extra_args="$7" local port port=$((10000+TEST_COUNT)) TEST_COUNT=$((TEST_COUNT+1)) port=$((port + 1)) if [ "$rcvbuf" -gt 0 ]; then extra_args+=" -R $rcvbuf" Loading @@ -330,7 +335,7 @@ do_transfer() fi if [ -n "$extra_args" ] && $options_log; then echo "INFO: extra options: $extra_args" mptcp_lib_pr_info "extra options: $extra_args" fi options_log=false Loading @@ -342,7 +347,7 @@ do_transfer() addr_port=$(printf "%s:%d" ${connect_addr} ${port}) local result_msg result_msg="$(printf "%.3s %-5s -> %.3s (%-20s) %-5s" ${connector_ns} ${cl_proto} ${listener_ns} ${addr_port} ${srv_proto})" printf "%s\t" "${result_msg}" mptcp_lib_print_title "${result_msg}" if $capture; then local capuser Loading Loading @@ -429,7 +434,7 @@ do_transfer() result_msg+=" # time=${duration}ms" printf "(duration %05sms) " "${duration}" if [ ${rets} -ne 0 ] || [ ${retc} -ne 0 ]; then echo "[ FAIL ] client exit code $retc, server $rets" 1>&2 mptcp_lib_pr_fail "client exit code $retc, server $rets" echo -e "\nnetns ${listener_ns} socket stat for ${port}:" 1>&2 ip netns exec ${listener_ns} ss -Menita 1>&2 -o "sport = :$port" cat /tmp/${listener_ns}.out Loading Loading @@ -474,14 +479,14 @@ do_transfer() fi if [ ${stat_synrx_now_l} -lt ${expect_synrx} ]; then printf "[ FAIL ] lower MPC SYN rx (%d) than expected (%d)\n" \ "${stat_synrx_now_l}" "${expect_synrx}" 1>&2 mptcp_lib_pr_fail "lower MPC SYN rx (${stat_synrx_now_l})" \ "than expected (${expect_synrx})" retc=1 fi if [ ${stat_ackrx_now_l} -lt ${expect_ackrx} ] && [ ${stat_ooo_now} -eq 0 ]; then if [ ${stat_ooo_now} -eq 0 ]; then printf "[ FAIL ] lower MPC ACK rx (%d) than expected (%d)\n" \ "${stat_ackrx_now_l}" "${expect_ackrx}" 1>&2 mptcp_lib_pr_fail "lower MPC ACK rx (${stat_ackrx_now_l})" \ "than expected (${expect_ackrx})" rets=1 else extra+=" [ Note ] fallback due to TCP OoO" Loading @@ -496,13 +501,13 @@ do_transfer() local csum_err_s_nr=$((csum_err_s - stat_csum_err_s)) if [ $csum_err_s_nr -gt 0 ]; then printf "[ FAIL ]\nserver got %d data checksum error[s]" ${csum_err_s_nr} mptcp_lib_pr_fail "server got ${csum_err_s_nr} data checksum error[s]" rets=1 fi local csum_err_c_nr=$((csum_err_c - stat_csum_err_c)) if [ $csum_err_c_nr -gt 0 ]; then printf "[ FAIL ]\nclient got %d data checksum error[s]" ${csum_err_c_nr} mptcp_lib_pr_fail "client got ${csum_err_c_nr} data checksum error[s]" retc=1 fi fi Loading Loading @@ -538,11 +543,11 @@ do_transfer() fi if [ $retc -eq 0 ] && [ $rets -eq 0 ]; then printf "[ OK ]%s\n" "${extra}" mptcp_lib_pr_ok "${extra:1}" mptcp_lib_result_pass "${TEST_GROUP}: ${result_msg}" else if [ -n "${extra}" ]; then printf "%s\n" "${extra:1}" mptcp_lib_print_warn "${extra:1}" fi mptcp_lib_result_fail "${TEST_GROUP}: ${result_msg}" fi Loading Loading @@ -672,7 +677,7 @@ run_test_transparent() # following function has been exported (T). Not great but better than # checking for a specific kernel version. if ! mptcp_lib_kallsyms_has "T __ip_sock_set_tos$"; then echo "INFO: ${msg} not supported by the kernel: SKIP" mptcp_lib_pr_skip "${msg} not supported by the kernel" mptcp_lib_result_skip "${TEST_GROUP}" return fi Loading @@ -689,7 +694,7 @@ table inet mangle { } EOF then echo "SKIP: $msg, could not load nft ruleset" mptcp_lib_pr_skip "$msg, could not load nft ruleset" mptcp_lib_fail_if_expected_feature "nft rules" mptcp_lib_result_skip "${TEST_GROUP}" return Loading @@ -705,7 +710,7 @@ EOF if ! ip -net "$listener_ns" $r6flag rule add fwmark 1 lookup 100; then ip netns exec "$listener_ns" nft flush ruleset echo "SKIP: $msg, ip $r6flag rule failed" mptcp_lib_pr_skip "$msg, ip $r6flag rule failed" mptcp_lib_fail_if_expected_feature "ip rule" mptcp_lib_result_skip "${TEST_GROUP}" return Loading @@ -714,15 +719,15 @@ EOF if ! ip -net "$listener_ns" route add local $local_addr/0 dev lo table 100; then ip netns exec "$listener_ns" nft flush ruleset ip -net "$listener_ns" $r6flag rule del fwmark 1 lookup 100 echo "SKIP: $msg, ip route add local $local_addr failed" mptcp_lib_pr_skip "$msg, ip route add local $local_addr failed" mptcp_lib_fail_if_expected_feature "ip route" mptcp_lib_result_skip "${TEST_GROUP}" return fi echo "INFO: test $msg" mptcp_lib_pr_info "test $msg" TEST_COUNT=10000 port=$((20000 - 1)) local extra_args="-o TRANSPARENT" do_transfer ${listener_ns} ${connector_ns} MPTCP MPTCP \ ${connect_addr} ${local_addr} "${extra_args}" Loading @@ -733,12 +738,12 @@ EOF ip -net "$listener_ns" route del local $local_addr/0 dev lo table 100 if [ $lret -ne 0 ]; then echo "FAIL: $msg, mptcp connection error" 1>&2 mptcp_lib_pr_fail "$msg, mptcp connection error" ret=$lret return 1 fi echo "PASS: $msg" mptcp_lib_pr_info "$msg pass" return 0 } Loading @@ -747,7 +752,7 @@ run_tests_peekmode() local peekmode="$1" TEST_GROUP="peek mode: ${peekmode}" echo "INFO: with peek mode: ${peekmode}" mptcp_lib_pr_info "with peek mode: ${peekmode}" run_tests_lo "$ns1" "$ns1" 10.0.1.1 1 "-P ${peekmode}" run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1 "-P ${peekmode}" } Loading @@ -757,12 +762,12 @@ run_tests_mptfo() TEST_GROUP="MPTFO" if ! mptcp_lib_kallsyms_has "mptcp_fastopen_"; then echo "INFO: TFO not supported by the kernel: SKIP" mptcp_lib_pr_skip "TFO not supported by the kernel" mptcp_lib_result_skip "${TEST_GROUP}" return fi echo "INFO: with MPTFO start" mptcp_lib_pr_info "with MPTFO start" ip netns exec "$ns1" sysctl -q net.ipv4.tcp_fastopen=2 ip netns exec "$ns2" sysctl -q net.ipv4.tcp_fastopen=1 Loading @@ -774,7 +779,7 @@ run_tests_mptfo() ip netns exec "$ns1" sysctl -q net.ipv4.tcp_fastopen=0 ip netns exec "$ns2" sysctl -q net.ipv4.tcp_fastopen=0 echo "INFO: with MPTFO end" mptcp_lib_pr_info "with MPTFO end" } run_tests_disconnect() Loading @@ -785,7 +790,7 @@ run_tests_disconnect() TEST_GROUP="full disconnect" if ! mptcp_lib_kallsyms_has "mptcp_pm_data_reset$"; then echo "INFO: Full disconnect not supported: SKIP" mptcp_lib_pr_skip "Full disconnect not supported" mptcp_lib_result_skip "${TEST_GROUP}" return fi Loading @@ -798,7 +803,7 @@ run_tests_disconnect() cin_disconnect="$old_cin" connect_per_transfer=3 echo "INFO: disconnect" mptcp_lib_pr_info "disconnect" run_tests_lo "$ns1" "$ns1" 10.0.1.1 1 "-I 3 -i $old_cin" run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1 "-I 3 -i $old_cin" Loading @@ -822,10 +827,10 @@ log_if_error() local msg="$1" if [ ${ret} -ne 0 ]; then echo "FAIL: ${msg}" 1>&2 mptcp_lib_pr_fail "${msg}" final_ret=${ret} ret=0 ret=${KSFT_PASS} return ${final_ret} fi Loading @@ -847,7 +852,7 @@ check_mptcp_disabled stop_if_error "The kernel configuration is not valid for MPTCP" echo "INFO: validating network environment with pings" print_larger_title "Validating network environment with pings" for sender in "$ns1" "$ns2" "$ns3" "$ns4";do do_ping "$ns1" $sender 10.0.1.1 do_ping "$ns1" $sender dead:beef:1::1 Loading @@ -869,6 +874,7 @@ done mptcp_lib_result_code "${ret}" "ping tests" stop_if_error "Could not even run ping tests" mptcp_lib_pr_ok [ -n "$tc_loss" ] && tc -net "$ns2" qdisc add dev ns2eth3 root netem loss random $tc_loss delay ${tc_delay}ms tc_info="loss of $tc_loss " Loading @@ -893,7 +899,7 @@ elif [ "$reorder_delay" -gt 0 ];then tc_info+="$tc_reorder with delay ${reorder_delay}ms " fi echo "INFO: Using ${tc_info}on ns3eth4" mptcp_lib_pr_info "Using ${tc_info}on ns3eth4" tc -net "$ns3" qdisc add dev ns3eth4 root netem delay ${reorder_delay}ms $tc_reorder Loading
tools/testing/selftests/net/mptcp/mptcp_join.sh +22 −45 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ err="" capout="" ns1="" ns2="" ksft_skip=4 iptables="iptables" ip6tables="ip6tables" timeout_poll=30 Loading @@ -48,7 +47,7 @@ declare -A all_tests declare -a only_tests_ids declare -a only_tests_names declare -A failed_tests TEST_COUNT=0 MPTCP_LIB_TEST_FORMAT="%03u %s\n" TEST_NAME="" nr_blank=6 Loading Loading @@ -170,11 +169,6 @@ cleanup() cleanup_partial } print_title() { printf "%03u %s\n" "${TEST_COUNT}" "${TEST_NAME}" } print_check() { printf "%-${nr_blank}s%-36s" " " "${*}" Loading @@ -190,17 +184,17 @@ print_info() print_ok() { mptcp_lib_print_ok "[ ok ]${1:+ ${*}}" mptcp_lib_pr_ok "${@}" } print_fail() { mptcp_lib_print_err "[fail]${1:+ ${*}}" mptcp_lib_pr_fail "${@}" } print_skip() { mptcp_lib_print_warn "[skip]${1:+ ${*}}" mptcp_lib_pr_skip "${@}" } # [ $1: fail msg ] Loading Loading @@ -233,7 +227,7 @@ skip_test() local i for i in "${only_tests_ids[@]}"; do if [ "${TEST_COUNT}" -eq "${i}" ]; then if [ "$((MPTCP_LIB_TEST_COUNTER+1))" -eq "${i}" ]; then return 1 fi done Loading Loading @@ -268,14 +262,13 @@ reset() TEST_NAME="${1}" TEST_COUNT=$((TEST_COUNT+1)) if skip_test; then MPTCP_LIB_TEST_COUNTER=$((MPTCP_LIB_TEST_COUNTER+1)) last_test_ignored=1 return 1 fi print_title mptcp_lib_print_title "${TEST_NAME}" if [ "${init}" != "1" ]; then init Loading Loading @@ -398,15 +391,15 @@ setup_fail_rules() -p tcp \ -m length --length 150:9999 \ -m statistic --mode nth --packet 1 --every 99999 \ -j MARK --set-mark 42 || return ${ksft_skip} -j MARK --set-mark 42 || return ${KSFT_SKIP} tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${ksft_skip} tc -n $ns2 qdisc add dev ns2eth$i clsact || return ${KSFT_SKIP} tc -n $ns2 filter add dev ns2eth$i egress \ protocol ip prio 1000 \ handle 42 fw \ action pedit munge offset 148 u8 invert \ pipe csum tcp \ index 100 || return ${ksft_skip} index 100 || return ${KSFT_SKIP} } reset_with_fail() Loading @@ -420,7 +413,7 @@ reset_with_fail() local rc=0 setup_fail_rules "${@}" || rc=$? if [ ${rc} -eq ${ksft_skip} ]; then if [ ${rc} -eq ${KSFT_SKIP} ]; then mark_as_skipped "unable to set the 'fail' rules" return 1 fi Loading Loading @@ -457,13 +450,15 @@ reset_with_tcp_filter() # $1: err msg fail_test() { ret=1 ret=${KSFT_FAIL} if [ ${#} -gt 0 ]; then print_fail "${@}" fi # just in case a test is marked twice as failed if [ ${last_test_failed} -eq 0 ]; then failed_tests[${TEST_COUNT}]="${TEST_NAME}" failed_tests[${MPTCP_LIB_TEST_COUNTER}]="${TEST_NAME}" dump_stats last_test_failed=1 fi Loading Loading @@ -974,7 +969,7 @@ do_transfer() local srv_proto="$4" local connect_addr="$5" local port=$((10000 + TEST_COUNT - 1)) local port=$((10000 + MPTCP_LIB_TEST_COUNTER - 1)) local cappid local FAILING_LINKS=${FAILING_LINKS:-""} local fastclose=${fastclose:-""} Loading @@ -992,9 +987,9 @@ do_transfer() capuser="-Z $SUDO_USER" fi capfile=$(printf "mp_join-%02u-%s.pcap" "$TEST_COUNT" "${listener_ns}") capfile=$(printf "mp_join-%02u-%s.pcap" "$MPTCP_LIB_TEST_COUNTER" "${listener_ns}") echo "Capturing traffic for test $TEST_COUNT into $capfile" echo "Capturing traffic for test $MPTCP_LIB_TEST_COUNTER into $capfile" ip netns exec ${listener_ns} tcpdump -i any -s 65535 -B 32768 $capuser -w $capfile > "$capout" 2>&1 & cappid=$! Loading Loading @@ -2864,15 +2859,9 @@ backup_tests() verify_listener_events() { local evt=$1 local e_type=$2 local e_family=$3 local e_saddr=$4 local e_sport=$5 local type local family local saddr local sport local name if [ $e_type = $MPTCP_LIB_EVENT_LISTENER_CREATED ]; then Loading @@ -2890,23 +2879,11 @@ verify_listener_events() return fi type=$(mptcp_lib_evts_get_info type "$evt" "$e_type") family=$(mptcp_lib_evts_get_info family "$evt" "$e_type") sport=$(mptcp_lib_evts_get_info sport "$evt" "$e_type") if [ $family ] && [ $family = $AF_INET6 ]; then saddr=$(mptcp_lib_evts_get_info saddr6 "$evt" "$e_type") else saddr=$(mptcp_lib_evts_get_info saddr4 "$evt" "$e_type") fi if [ $type ] && [ $type = $e_type ] && [ $family ] && [ $family = $e_family ] && [ $saddr ] && [ $saddr = $e_saddr ] && [ $sport ] && [ $sport = $e_sport ]; then if mptcp_lib_verify_listener_events "${@}"; then print_ok return 0 fi fail_test "$e_type:$type $e_family:$family $e_saddr:$saddr $e_sport:$sport" fail_test } add_addr_ports_tests() Loading Loading @@ -3839,7 +3816,7 @@ usage() { if [ -n "${1}" ]; then echo "${1}" ret=1 ret=${KSFT_FAIL} fi echo "mptcp_join usage:" Loading