OSDN Git Service

selftests: add explicit test for multiple concurrent GRO sockets
authorPaolo Abeni <pabeni@redhat.com>
Thu, 15 Nov 2018 02:24:05 +0000 (03:24 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 17 Nov 2018 07:03:20 +0000 (23:03 -0800)
This covers for proper accounting of encap needed static keys

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/udpgro.sh

index e94ef80..aeac53a 100755 (executable)
@@ -91,6 +91,28 @@ run_one_nat() {
        wait $(jobs -p)
 }
 
+run_one_2sock() {
+       # use 'rx' as separator between sender args and receiver args
+       local -r all="$@"
+       local -r tx_args=${all%rx*}
+       local -r rx_args=${all#*rx}
+
+       cfg_veth
+
+       ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} -p 12345 &
+       ip netns exec "${PEER_NS}" ./udpgso_bench_rx ${rx_args} && \
+               echo "ok" || \
+               echo "failed" &
+
+       # Hack: let bg programs complete the startup
+       sleep 0.1
+       ./udpgso_bench_tx ${tx_args} -p 12345
+       sleep 0.1
+       # first UDP GSO socket should be closed at this point
+       ./udpgso_bench_tx ${tx_args}
+       wait $(jobs -p)
+}
+
 run_nat_test() {
        local -r args=$@
 
@@ -98,6 +120,13 @@ run_nat_test() {
        ./in_netns.sh $0 __subprocess_nat $2 rx -r $3
 }
 
+run_2sock_test() {
+       local -r args=$@
+
+       printf " %-40s" "$1"
+       ./in_netns.sh $0 __subprocess_2sock $2 rx -G -r $3
+}
+
 run_all() {
        local -r core_args="-l 4"
        local -r ipv4_args="${core_args} -4 -D 192.168.1.1"
@@ -120,6 +149,7 @@ run_all() {
        run_test "GRO with custom segment size cmsg" "${ipv4_args} -M 1 -s 14720 -S 500 " "-4 -n 1 -l 14720 -S 500"
 
        run_nat_test "bad GRO lookup" "${ipv4_args} -M 1 -s 14720 -S 0" "-n 10 -l 1472"
+       run_2sock_test "multiple GRO socks" "${ipv4_args} -M 1 -s 14720 -S 0 " "-4 -n 1 -l 14720 -S 1472"
 
        echo "ipv6"
        run_test "no GRO" "${ipv6_args} -M 10 -s 1400" "-n 10 -l 1400"
@@ -130,6 +160,7 @@ run_all() {
        run_test "GRO with custom segment size cmsg" "${ipv6_args} -M 1 -s 14520 -S 500" "-n 1 -l 14520 -S 500"
 
        run_nat_test "bad GRO lookup" "${ipv6_args} -M 1 -s 14520 -S 0" "-n 10 -l 1452"
+       run_2sock_test "multiple GRO socks" "${ipv6_args} -M 1 -s 14520 -S 0 " "-n 1 -l 14520 -S 1452"
 }
 
 if [ ! -f ../bpf/xdp_dummy.o ]; then
@@ -145,4 +176,7 @@ elif [[ $1 == "__subprocess" ]]; then
 elif [[ $1 == "__subprocess_nat" ]]; then
        shift
        run_one_nat $@
+elif [[ $1 == "__subprocess_2sock" ]]; then
+       shift
+       run_one_2sock $@
 fi