Commit e35f885b authored by Paolo Abeni's avatar Paolo Abeni Committed by David S. Miller
Browse files

selftests: mptcp: be more conservative with cookie MPJ limits



Since commit 2843ff6f ("mptcp: remote addresses fullmesh"), an
MPTCP client can attempt creating multiple MPJ subflow simultaneusly.

In such scenario the server, when syncookies are enabled, could end-up
accepting incoming MPJ syn even above the configured subflow limit, as
the such limit can be enforced in a reliable way only after the subflow
creation. In case of syncookie, only after the 3rd ack reception.

As a consequence the related self-tests case sporadically fails, as it
verify that the server always accept the expected number of MPJ syn.

Address the issues relaxing the MPJ syn number constrain. Note that the
check on the accepted number of MPJ 3rd ack still remains intact.

Fixes: 2843ff6f ("mptcp: remote addresses fullmesh")
Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6ef84b15
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -660,6 +660,7 @@ chk_join_nr()
	local ack_nr=$4
	local count
	local dump_stats
	local with_cookie

	printf "%02u %-36s %s" "$TEST_COUNT" "$msg" "syn"
	count=`ip netns exec $ns1 nstat -as | grep MPTcpExtMPJoinSynRx | awk '{print $2}'`
@@ -673,12 +674,20 @@ chk_join_nr()
	fi

	echo -n " - synack"
	with_cookie=`ip netns exec $ns2 sysctl -n net.ipv4.tcp_syncookies`
	count=`ip netns exec $ns2 nstat -as | grep MPTcpExtMPJoinSynAckRx | awk '{print $2}'`
	[ -z "$count" ] && count=0
	if [ "$count" != "$syn_ack_nr" ]; then
		# simult connections exceeding the limit with cookie enabled could go up to
		# synack validation as the conn limit can be enforced reliably only after
		# the subflow creation
		if [ "$with_cookie" = 2 ] && [ "$count" -gt "$syn_ack_nr" ] && [ "$count" -le "$syn_nr" ]; then
			echo -n "[ ok ]"
		else
			echo "[fail] got $count JOIN[s] synack expected $syn_ack_nr"
			ret=1
			dump_stats=1
		fi
	else
		echo -n "[ ok ]"
	fi