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

selftests: mptcp: add command line arguments for mptcp_join.sh



Since the mptcp_join script is becoming too big, this patch splits it
into several smaller chunks, each of them has been defined in a function
as a individual test group for several related testcases.

Using bash getopts function to parse command line arguments, and invoke
each function to do the individual test group.

Here are all the arguments:
  -f subflows_tests
  -s signal_address_tests
  -l link_failure_tests
  -t add_addr_timeout_tests
  -r remove_tests
  -a add_tests
  -6 ipv6_tests
  -4 v4mapped_tests
  -b backup_tests
  -p add_addr_ports_tests
  -c syncookies_tests
  -h help

Run mptcp_join.sh with no argument will execute all testcases.

Signed-off-by: default avatarGeliang Tang <geliangtang@gmail.com>
Signed-off-by: default avatarMat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 502c65af
Loading
Loading
Loading
Loading
+590 −478
Original line number Diff line number Diff line
@@ -680,26 +680,19 @@ chk_prio_nr()
	fi
}

sin=$(mktemp)
sout=$(mktemp)
cin=$(mktemp)
cinsent=$(mktemp)
cout=$(mktemp)
init
make_file "$cin" "client" 1
make_file "$sin" "server" 1
trap cleanup EXIT

subflows_tests()
{
	reset
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "no JOIN" "0" "0" "0"

# subflow limted by client
	# subflow limited by client
	reset
	ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "single subflow, limited by client" 0 0 0

# subflow limted by server
	# subflow limited by server
	reset
	ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
@@ -731,7 +724,10 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
	ip netns exec $ns2 ./pm_nl_ctl add 10.0.2.2 flags subflow
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "multiple subflows, limited by server" 2 2 1
}

signal_address_tests()
{
	# add_address, unused
	reset
	ip netns exec $ns1 ./pm_nl_ctl add 10.0.2.1 flags signal
@@ -771,7 +767,10 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "multiple subflows and signal" 3 3 3
	chk_add_nr 1 1
}

link_failure_tests()
{
	# accept and use add_addr with additional subflows and link loss
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 3
@@ -782,7 +781,10 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
	run_tests $ns1 $ns2 10.0.1.1 1
	chk_join_nr "multiple flows, signal, link failure" 3 3 3
	chk_add_nr 1 1
}

add_addr_timeout_tests()
{
	# add_addr timeout
	reset_with_add_addr_timeout
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -792,6 +794,18 @@ run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow
	chk_join_nr "signal address, ADD_ADDR timeout" 1 1 1
	chk_add_nr 4 0

	# add_addr timeout IPv6
	reset_with_add_addr_timeout 6
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl limits 1 1
	ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
	run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
	chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1
	chk_add_nr 4 0
}

remove_tests()
{
	# single subflow, remove
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -855,7 +869,10 @@ run_tests $ns1 $ns2 10.0.1.1 0 -8 -8 slow
	chk_join_nr "flush subflows and signal" 3 3 3
	chk_add_nr 1 1
	chk_rm_nr 2 2
}

add_tests()
{
	# add single subflow
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -892,7 +909,10 @@ ip netns exec $ns2 ./pm_nl_ctl limits 2 2
	run_tests $ns1 $ns2 dead:beef:1::1 0 2 0 slow
	chk_join_nr "add multiple addresses IPv6" 2 2 2
	chk_add_nr 2 2
}

ipv6_tests()
{
	# subflow IPv6
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -917,15 +937,6 @@ run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
	chk_join_nr "single address IPv6" 1 1 1
	chk_add_nr 1 1

# add_addr timeout IPv6
reset_with_add_addr_timeout 6
ip netns exec $ns1 ./pm_nl_ctl limits 0 1
ip netns exec $ns2 ./pm_nl_ctl limits 1 1
ip netns exec $ns1 ./pm_nl_ctl add dead:beef:2::1 flags signal
run_tests $ns1 $ns2 dead:beef:1::1 0 0 0 slow
chk_join_nr "signal address, ADD_ADDR6 timeout" 1 1 1
chk_add_nr 4 0

	# single address IPv6, remove
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -946,7 +957,10 @@ run_tests $ns1 $ns2 dead:beef:1::1 0 -1 -1 slow
	chk_join_nr "remove subflow and signal IPv6" 2 2 2
	chk_add_nr 1 1
	chk_rm_nr 1 1
}

v4mapped_tests()
{
	# subflow IPv4-mapped to IPv4-mapped
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -1021,7 +1035,10 @@ ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl add 10.0.3.2 flags subflow
	run_tests $ns1 $ns2 dead:beef:1::1
	chk_join_nr "no JOIN with diff families v6-v4" 0 0 0
}

backup_tests()
{
	# single subflow, backup
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -1040,7 +1057,10 @@ run_tests $ns1 $ns2 10.0.1.1 0 0 0 slow backup
	chk_join_nr "single address, backup" 1 1 1
	chk_add_nr 1 1
	chk_prio_nr 1 0
}

add_addr_ports_tests()
{
	# signal address with port
	reset
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -1112,7 +1132,10 @@ ip netns exec $ns2 ./pm_nl_ctl limits 2 2
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "multiple addresses with ports" 2 2 2
	chk_add_nr 2 2 2
}

syncookies_tests()
{
	# single subflow, syncookies
	reset_with_cookies
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
@@ -1168,5 +1191,94 @@ ip netns exec $ns2 ./pm_nl_ctl add 10.0.4.2 flags subflow
	run_tests $ns1 $ns2 10.0.1.1
	chk_join_nr "subflows and signal w. cookies" 3 3 3
	chk_add_nr 1 1
}

all_tests()
{
	subflows_tests
	signal_address_tests
	link_failure_tests
	add_addr_timeout_tests
	remove_tests
	add_tests
	ipv6_tests
	v4mapped_tests
	backup_tests
	add_addr_ports_tests
	syncookies_tests
}

usage()
{
	echo "mptcp_join usage:"
	echo "  -f subflows_tests"
	echo "  -s signal_address_tests"
	echo "  -l link_failure_tests"
	echo "  -t add_addr_timeout_tests"
	echo "  -r remove_tests"
	echo "  -a add_tests"
	echo "  -6 ipv6_tests"
	echo "  -4 v4mapped_tests"
	echo "  -b backup_tests"
	echo "  -p add_addr_ports_tests"
	echo "  -c syncookies_tests"
	echo "  -h help"
}

sin=$(mktemp)
sout=$(mktemp)
cin=$(mktemp)
cinsent=$(mktemp)
cout=$(mktemp)
init
make_file "$cin" "client" 1
make_file "$sin" "server" 1
trap cleanup EXIT

if [ -z $1 ]; then
	all_tests
	exit $ret
fi

while getopts 'fsltra64bpch' opt; do
	case $opt in
		f)
			subflows_tests
			;;
		s)
			signal_address_tests
			;;
		l)
			link_failure_tests
			;;
		t)
			add_addr_timeout_tests
			;;
		r)
			remove_tests
			;;
		a)
			add_tests
			;;
		6)
			ipv6_tests
			;;
		4)
			v4mapped_tests
			;;
		b)
			backup_tests
			;;
		p)
			add_addr_ports_tests
			;;
		c)
			syncookies_tests
			;;
		h | *)
			usage
			;;
	esac
done

exit $ret