selftests: mptcp: make 2nd net namespace use tcp syn cookies unconditionally
authorFlorian Westphal <fw@strlen.de>
Thu, 30 Jul 2020 19:25:57 +0000 (21:25 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 31 Jul 2020 23:55:32 +0000 (16:55 -0700)
check we can establish connections also when syn cookies are in use.

Check that
MPTcpExtMPCapableSYNRX and MPTcpExtMPCapableACKRX increase for each
MPTCP test.

Check TcpExtSyncookiesSent and TcpExtSyncookiesRecv increase in netns2.

Signed-off-by: Florian Westphal <fw@strlen.de>
Reviewed-by: Mat Martineau <mathew.j.martineau@linux.intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
tools/testing/selftests/net/mptcp/mptcp_connect.sh

index c0589e0..57d75b7 100755 (executable)
@@ -196,6 +196,9 @@ ip -net "$ns4" link set ns4eth3 up
 ip -net "$ns4" route add default via 10.0.3.2
 ip -net "$ns4" route add default via dead:beef:3::2
 
+# use TCP syn cookies, even if no flooding was detected.
+ip netns exec "$ns2" sysctl -q net.ipv4.tcp_syncookies=2
+
 set_ethtool_flags() {
        local ns="$1"
        local dev="$2"
@@ -407,6 +410,11 @@ do_transfer()
                sleep 1
        fi
 
+       local stat_synrx_last_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableSYNRX | while read a count c rest ;do  echo $count;done)
+       local stat_ackrx_last_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableACKRX | while read a count c rest ;do  echo $count;done)
+       local stat_cookietx_last=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesSent | while read a count c rest ;do  echo $count;done)
+       local stat_cookierx_last=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesRecv | while read a count c rest ;do  echo $count;done)
+
        ip netns exec ${listener_ns} ./mptcp_connect -t $timeout -l -p $port -s ${srv_proto} $extra_args $local_addr < "$sin" > "$sout" &
        local spid=$!
 
@@ -450,6 +458,45 @@ do_transfer()
        check_transfer $cin $sout "file received by server"
        rets=$?
 
+       local stat_synrx_now_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableSYNRX  | while read a count c rest ;do  echo $count;done)
+       local stat_ackrx_now_l=$(ip netns exec ${listener_ns} nstat -z -a MPTcpExtMPCapableACKRX  | while read a count c rest ;do  echo $count;done)
+
+       local stat_cookietx_now=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesSent | while read a count c rest ;do  echo $count;done)
+       local stat_cookierx_now=$(ip netns exec ${listener_ns} nstat -z -a TcpExtSyncookiesRecv | while read a count c rest ;do  echo $count;done)
+
+       expect_synrx=$((stat_synrx_last_l))
+       expect_ackrx=$((stat_ackrx_last_l))
+
+       cookies=$(ip netns exec ${listener_ns} sysctl net.ipv4.tcp_syncookies)
+       cookies=${cookies##*=}
+
+       if [ ${cl_proto} = "MPTCP" ] && [ ${srv_proto} = "MPTCP" ]; then
+               expect_synrx=$((stat_synrx_last_l+1))
+               expect_ackrx=$((stat_ackrx_last_l+1))
+       fi
+       if [ $cookies -eq 2 ];then
+               if [ $stat_cookietx_last -ge $stat_cookietx_now ] ;then
+                       echo "${listener_ns} CookieSent: ${cl_proto} -> ${srv_proto}: did not advance"
+               fi
+               if [ $stat_cookierx_last -ge $stat_cookierx_now ] ;then
+                       echo "${listener_ns} CookieRecv: ${cl_proto} -> ${srv_proto}: did not advance"
+               fi
+       else
+               if [ $stat_cookietx_last -ne $stat_cookietx_now ] ;then
+                       echo "${listener_ns} CookieSent: ${cl_proto} -> ${srv_proto}: changed"
+               fi
+               if [ $stat_cookierx_last -ne $stat_cookierx_now ] ;then
+                       echo "${listener_ns} CookieRecv: ${cl_proto} -> ${srv_proto}: changed"
+               fi
+       fi
+
+       if [ $expect_synrx -ne $stat_synrx_now_l ] ;then
+               echo "${listener_ns} SYNRX: ${cl_proto} -> ${srv_proto}: expect ${expect_synrx}, got ${stat_synrx_now_l}"
+       fi
+       if [ $expect_ackrx -ne $stat_ackrx_now_l ] ;then
+               echo "${listener_ns} ACKRX: ${cl_proto} -> ${srv_proto}: expect ${expect_synrx}, got ${stat_synrx_now_l}"
+       fi
+
        if [ $retc -eq 0 ] && [ $rets -eq 0 ];then
                echo "$duration [ OK ]"
                cat "$capout"