Commit af66d3e1 authored by Geliang Tang's avatar Geliang Tang Committed by David S. Miller
Browse files

selftests: mptcp: enable checksum in mptcp_join.sh



This patch added a new argument "-C" for the mptcp_join.sh script to set
the sysctl checksum_enabled to 1 in ns1 and ns2 to enable the data
checksum.

In chk_join_nr, check the counter of the mib for the data checksum.

Also added a new argument "-S" for the mptcp_join.sh script to start the
test cases that verify the checksum handshake:

  * Sender and listener both have checksums off
  * Sender and listener both have checksums on
  * Sender checksums off, listener checksums on
  * Sender checksums on, listener checksums off

The output looks like this:

 01 checksum test 0 0                  sum[ ok ] - csum  [ ok ]
 02 checksum test 1 1                  sum[ ok ] - csum  [ ok ]
 03 checksum test 0 1                  sum[ ok ] - csum  [ ok ]
 04 checksum test 1 0                  sum[ ok ] - csum  [ ok ]
 05 no JOIN                            syn[ ok ] - synack[ ok ] - ack[ ok ]
                                       sum[ ok ] - csum  [ ok ]
 06 single subflow, limited by client  syn[ ok ] - synack[ ok ] - ack[ ok ]
                                       sum[ ok ] - csum  [ ok ]

Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
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 avatarDavid S. Miller <davem@davemloft.net>
parent 94d66ba1
Loading
Loading
Loading
Loading
+103 −4
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ timeout_poll=30
timeout_test=$((timeout_poll * 2 + 1))
mptcp_connect=""
capture=0
checksum=0
do_all_tests=1

TEST_COUNT=0
@@ -49,6 +50,9 @@ init()
		ip netns exec $netns sysctl -q net.mptcp.enabled=1
		ip netns exec $netns sysctl -q net.ipv4.conf.all.rp_filter=0
		ip netns exec $netns sysctl -q net.ipv4.conf.default.rp_filter=0
		if [ $checksum -eq 1 ]; then
			ip netns exec $netns sysctl -q net.mptcp.checksum_enabled=1
		fi
	done

	#  ns1              ns2
@@ -124,6 +128,17 @@ reset_with_add_addr_timeout()
		-j DROP
}

reset_with_checksum()
{
	local ns1_enable=$1
	local ns2_enable=$2

	reset

	ip netns exec $ns1 sysctl -q net.mptcp.checksum_enabled=$ns1_enable
	ip netns exec $ns2 sysctl -q net.mptcp.checksum_enabled=$ns2_enable
}

ip -Version > /dev/null 2>&1
if [ $? -ne 0 ];then
	echo "SKIP: Could not run test without ip tool"
@@ -476,6 +491,45 @@ run_tests()
	fi
}

chk_csum_nr()
{
	local msg=${1:-""}
	local count
	local dump_stats

	if [ ! -z "$msg" ]; then
		printf "%02u" "$TEST_COUNT"
	else
		echo -n "  "
	fi
	printf " %-36s %s" "$msg" "sum"
	count=`ip netns exec $ns1 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
	[ -z "$count" ] && count=0
	if [ "$count" != 0 ]; then
		echo "[fail] got $count data checksum error[s] expected 0"
		ret=1
		dump_stats=1
	else
		echo -n "[ ok ]"
	fi
	echo -n " - csum  "
	count=`ip netns exec $ns2 nstat -as | grep MPTcpExtDataCsumErr | awk '{print $2}'`
	[ -z "$count" ] && count=0
	if [ "$count" != 0 ]; then
		echo "[fail] got $count data checksum error[s] expected 0"
		ret=1
		dump_stats=1
	else
		echo "[ ok ]"
	fi
	if [ "${dump_stats}" = 1 ]; then
		echo Server ns stats
		ip netns exec $ns1 nstat -as | grep MPTcp
		echo Client ns stats
		ip netns exec $ns2 nstat -as | grep MPTcp
	fi
}

chk_join_nr()
{
	local msg="$1"
@@ -523,6 +577,9 @@ chk_join_nr()
		echo Client ns stats
		ip netns exec $ns2 nstat -as | grep MPTcp
	fi
	if [ $checksum -eq 1 ]; then
		chk_csum_nr
	fi
}

chk_add_nr()
@@ -1374,6 +1431,37 @@ syncookies_tests()
	chk_add_nr 1 1
}

checksum_tests()
{
	# checksum test 0 0
	reset_with_checksum 0 0
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	run_tests $ns1 $ns2 10.0.1.1
	chk_csum_nr "checksum test 0 0"

	# checksum test 1 1
	reset_with_checksum 1 1
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	run_tests $ns1 $ns2 10.0.1.1
	chk_csum_nr "checksum test 1 1"

	# checksum test 0 1
	reset_with_checksum 0 1
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	run_tests $ns1 $ns2 10.0.1.1
	chk_csum_nr "checksum test 0 1"

	# checksum test 1 0
	reset_with_checksum 1 0
	ip netns exec $ns1 ./pm_nl_ctl limits 0 1
	ip netns exec $ns2 ./pm_nl_ctl limits 0 1
	run_tests $ns1 $ns2 10.0.1.1
	chk_csum_nr "checksum test 1 0"
}

all_tests()
{
	subflows_tests
@@ -1387,6 +1475,7 @@ all_tests()
	backup_tests
	add_addr_ports_tests
	syncookies_tests
	checksum_tests
}

usage()
@@ -1403,7 +1492,9 @@ usage()
	echo "  -b backup_tests"
	echo "  -p add_addr_ports_tests"
	echo "  -k syncookies_tests"
	echo "  -S checksum_tests"
	echo "  -c capture pcap files"
	echo "  -C enable data checksum"
	echo "  -h help"
}

@@ -1418,13 +1509,16 @@ make_file "$sin" "server" 1
trap cleanup EXIT

for arg in "$@"; do
	# check for "capture" arg before launching tests
	# check for "capture/checksum" args before launching tests
	if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"c"[0-9a-zA-Z]*$ ]]; then
		capture=1
	fi
	if [[ "${arg}" =~ ^"-"[0-9a-zA-Z]*"C"[0-9a-zA-Z]*$ ]]; then
		checksum=1
	fi

	# exception for the capture option, the rest means: a part of the tests
	if [ "${arg}" != "-c" ]; then
	# exception for the capture/checksum options, the rest means: a part of the tests
	if [ "${arg}" != "-c" ] && [ "${arg}" != "-C" ]; then
		do_all_tests=0
	fi
done
@@ -1434,7 +1528,7 @@ if [ $do_all_tests -eq 1 ]; then
	exit $ret
fi

while getopts 'fsltra64bpkch' opt; do
while getopts 'fsltra64bpkchCS' opt; do
	case $opt in
		f)
			subflows_tests
@@ -1469,8 +1563,13 @@ while getopts 'fsltra64bpkch' opt; do
		k)
			syncookies_tests
			;;
		S)
			checksum_tests
			;;
		c)
			;;
		C)
			;;
		h | *)
			usage
			;;