Commit d7ced753 authored by Geliang Tang's avatar Geliang Tang Committed by Jakub Kicinski
Browse files

selftests: mptcp: check subflow and addr infos



New MPTCP info are being checked in multiple places to improve the code
coverage when using the userspace PM.

This patch makes chk_mptcp_info() more generic to be able to check
subflows, add_addr_signal and add_addr_accepted info (and even more
later). New arguments are now required to get different infos from the
two namespaces because some counters are specific to the client or the
server.

Reviewed-by: default avatarMatthieu Baerts <matthieu.baerts@tessares.net>
Signed-off-by: default avatarGeliang Tang <geliang.tang@suse.com>
Signed-off-by: default avatarMat Martineau <martineau@kernel.org>
Link: https://lore.kernel.org/r/20230623-send-net-next-20230623-v1-2-a883213c8ba9@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 4369c198
Loading
Loading
Loading
Loading
+23 −21
Original line number Diff line number Diff line
@@ -1832,31 +1832,26 @@ chk_subflow_nr()

chk_mptcp_info()
{
	local nr_info=$1
	local info
	local info1=$1
	local exp1=$2
	local info2=$3
	local exp2=$4
	local cnt1
	local cnt2
	local dump_stats

	if [[ $nr_info = "subflows_"* ]]; then
		info="subflows"
		nr_info=${nr_info:9}
	else
		echo "[fail] unsupported argument: $nr_info"
		fail_test
		return 1
	fi

	printf "%-${nr_blank}s %-30s" " " "mptcp_info $info=$nr_info"
	printf "%-${nr_blank}s %-30s" " " "mptcp_info $info1:$info2=$exp1:$exp2"

	cnt1=$(ss -N $ns1 -inmHM | grep "$info:" |
		sed -n 's/.*\('"$info"':\)\([[:digit:]]*\).*$/\2/p;q')
	cnt1=$(ss -N $ns1 -inmHM | grep "$info1:" |
	       sed -n 's/.*\('"$info1"':\)\([[:digit:]]*\).*$/\2/p;q')
	cnt2=$(ss -N $ns2 -inmHM | grep "$info2:" |
	       sed -n 's/.*\('"$info2"':\)\([[:digit:]]*\).*$/\2/p;q')
	# 'ss' only display active connections and counters that are not 0.
	[ -z "$cnt1" ] && cnt1=0
	cnt2=$(ss -N $ns2 -inmHM | grep "$info:" |
		sed -n 's/.*\('"$info"':\)\([[:digit:]]*\).*$/\2/p;q')
	[ -z "$cnt2" ] && cnt2=0
	if [ "$cnt1" != "$nr_info" ] || [ "$cnt2" != "$nr_info" ]; then
		echo "[fail] got $cnt1:$cnt2 $info expected $nr_info"

	if [ "$cnt1" != "$exp1" ] || [ "$cnt2" != "$exp2" ]; then
		echo "[fail] got $cnt1:$cnt2 $info1:$info2 expected $exp1:$exp2"
		fail_test
		dump_stats=1
	else
@@ -3332,8 +3327,11 @@ userspace_tests()
		userspace_pm_add_addr 10.0.2.1 10
		chk_join_nr 1 1 1
		chk_add_nr 1 1
		chk_mptcp_info subflows 1 subflows 1
		chk_mptcp_info add_addr_signal 1 add_addr_accepted 1
		userspace_pm_rm_sf_addr_ns1 10.0.2.1 10
		chk_rm_nr 1 1 invert
		chk_mptcp_info subflows 0 subflows 0
		kill_events_pids
		wait $tests_pid
	fi
@@ -3348,8 +3346,10 @@ userspace_tests()
		wait_mpj $ns2
		userspace_pm_add_sf 10.0.3.2 20
		chk_join_nr 1 1 1
		chk_mptcp_info subflows 1 subflows 1
		userspace_pm_rm_sf_addr_ns2 10.0.3.2 20
		chk_rm_nr 1 1
		chk_mptcp_info subflows 0 subflows 0
		kill_events_pids
		wait $tests_pid
	fi
@@ -3369,6 +3369,8 @@ endpoint_tests()
		wait_mpj $ns1
		pm_nl_check_endpoint 1 "creation" \
			$ns2 10.0.2.2 id 1 flags implicit
		chk_mptcp_info subflows 1 subflows 1
		chk_mptcp_info add_addr_signal 1 add_addr_accepted 1

		pm_nl_add_endpoint $ns2 10.0.2.2 id 33
		pm_nl_check_endpoint 0 "ID change is prevented" \
@@ -3389,17 +3391,17 @@ endpoint_tests()

		wait_mpj $ns2
		chk_subflow_nr needtitle "before delete" 2
		chk_mptcp_info subflows_1
		chk_mptcp_info subflows 1 subflows 1

		pm_nl_del_endpoint $ns2 2 10.0.2.2
		sleep 0.5
		chk_subflow_nr "" "after delete" 1
		chk_mptcp_info subflows_0
		chk_mptcp_info subflows 0 subflows 0

		pm_nl_add_endpoint $ns2 10.0.2.2 dev ns2eth2 flags subflow
		wait_mpj $ns2
		chk_subflow_nr "" "after re-add" 2
		chk_mptcp_info subflows_1
		chk_mptcp_info subflows 1 subflows 1
		kill_tests_wait
	fi
}