Unverified Commit 2b05c5bb authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!13331 MPTCP Upstream part 22

Merge Pull Request from: @geliangtang 
 
Patches from v6.9-rc1. 
 
Link:https://gitee.com/openeuler/kernel/pulls/13331

 

Reviewed-by: default avatarYue Haibing <yuehaibing@huawei.com>
Signed-off-by: default avatarZhang Peng <zhangpeng362@huawei.com>
parents cce00301 a87b88be
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);
+1 −1
Original line number Diff line number Diff line
@@ -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);

+8 −11
Original line number Diff line number Diff line
@@ -9,7 +9,6 @@
. "$(dirname "${0}")/mptcp_lib.sh"

ns=""
test_cnt=1
timeout_poll=30
timeout_test=$((timeout_poll * 2 + 1))
ret=0
@@ -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()
@@ -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()
+52 −46
Original line number Diff line number Diff line
@@ -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%
@@ -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")
@@ -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")
@@ -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")
@@ -120,7 +121,7 @@ while getopts "$optstring" option;do
		;;
	"?")
		usage $0
		exit 1
		exit ${KSFT_FAIL}
		;;
	esac
done
@@ -130,7 +131,6 @@ ns2=""
ns3=""
ns4=""

TEST_COUNT=0
TEST_GROUP=""

# This function is used in the cleanup trap
@@ -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
}

@@ -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
@@ -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
}
@@ -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
@@ -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"
@@ -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

@@ -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
@@ -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
@@ -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"
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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}"
@@ -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
}

@@ -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}"
}
@@ -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

@@ -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()
@@ -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
@@ -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"

@@ -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
@@ -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
@@ -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 "
@@ -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

+22 −45
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ err=""
capout=""
ns1=""
ns2=""
ksft_skip=4
iptables="iptables"
ip6tables="ip6tables"
timeout_poll=30
@@ -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

@@ -170,11 +169,6 @@ cleanup()
	cleanup_partial
}

print_title()
{
	printf "%03u %s\n" "${TEST_COUNT}" "${TEST_NAME}"
}

print_check()
{
	printf "%-${nr_blank}s%-36s" " " "${*}"
@@ -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 ]
@@ -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
@@ -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
@@ -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()
@@ -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
@@ -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
@@ -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:-""}
@@ -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=$!

@@ -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
@@ -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()
@@ -3839,7 +3816,7 @@ usage()
{
	if [ -n "${1}" ]; then
		echo "${1}"
		ret=1
		ret=${KSFT_FAIL}
	fi

	echo "mptcp_join usage:"
Loading