Commit 7167395a authored by Hangbin Liu's avatar Hangbin Liu Committed by David S. Miller
Browse files

selftests: udpgro: report error when receive failed



Currently, we only check the latest senders's exit code. If the receiver
report failed, it is not recoreded. Fix it by checking the exit code
of all the involved processes.

Before:
  bad GRO lookup       ok
  multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 failed
 $ echo $?
 0

After:
  bad GRO lookup       ok
  multiple GRO socks   ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 ./udpgso_bench_rx: recv: bad packet len, got 1452, expected 14520

 failed
 $ echo $?
 1

Fixes: 3327a9c4 ("selftests: add functionals test for UDP GRO")
Suggested-by: default avatarPaolo Abeni <pabeni@redhat.com>
Signed-off-by: default avatarHangbin Liu <liuhangbin@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 2d742304
Loading
Loading
Loading
Loading
+27 −17
Original line number Diff line number Diff line
@@ -46,17 +46,19 @@ run_one() {
	local -r all="$@"
	local -r tx_args=${all%rx*}
	local -r rx_args=${all#*rx}
	local ret=0

	cfg_veth

	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} && \
		echo "ok" || \
		echo "failed" &
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} &
	local PID1=$!

	wait_local_port_listen ${PEER_NS} 8000 udp
	./udpgso_bench_tx ${tx_args}
	ret=$?
	wait $(jobs -p)
	check_err $?
	wait ${PID1}
	check_err $?
	[ "$ret" -eq 0 ] && echo "ok" || echo "failed"
	return $ret
}

@@ -73,6 +75,7 @@ run_one_nat() {
	local -r all="$@"
	local -r tx_args=${all%rx*}
	local -r rx_args=${all#*rx}
	local ret=0

	if [[ ${tx_args} = *-4* ]]; then
		ipt_cmd=iptables
@@ -93,16 +96,17 @@ run_one_nat() {
	# ... so that GRO will match the UDP_GRO enabled socket, but packets
	# will land on the 'plain' one
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -G ${family} -b ${addr1} -n 0 &
	pid=$!
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${family} -b ${addr2%/*} ${rx_args} && \
		echo "ok" || \
		echo "failed"&
	local PID1=$!
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${family} -b ${addr2%/*} ${rx_args} &
	local PID2=$!

	wait_local_port_listen "${PEER_NS}" 8000 udp
	./udpgso_bench_tx ${tx_args}
	ret=$?
	kill -INT $pid
	wait $(jobs -p)
	check_err $?
	kill -INT ${PID1}
	wait ${PID2}
	check_err $?
	[ "$ret" -eq 0 ] && echo "ok" || echo "failed"
	return $ret
}

@@ -111,20 +115,26 @@ run_one_2sock() {
	local -r all="$@"
	local -r tx_args=${all%rx*}
	local -r rx_args=${all#*rx}
	local ret=0

	cfg_veth

	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 1000 -R 10 ${rx_args} -p 12345 &
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 2000 -R 10 ${rx_args} && \
		echo "ok" || \
		echo "failed" &
	local PID1=$!
	ip netns exec "${PEER_NS}" ./udpgso_bench_rx -C 2000 -R 10 ${rx_args} &
	local PID2=$!

	wait_local_port_listen "${PEER_NS}" 12345 udp
	./udpgso_bench_tx ${tx_args} -p 12345
	check_err $?
	wait_local_port_listen "${PEER_NS}" 8000 udp
	./udpgso_bench_tx ${tx_args}
	ret=$?
	wait $(jobs -p)
	check_err $?
	wait ${PID1}
	check_err $?
	wait ${PID2}
	check_err $?
	[ "$ret" -eq 0 ] && echo "ok" || echo "failed"
	return $ret
}