run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1 "-P ${peekmode}"
 }
 
+display_time()
+{
+       time_end=$(date +%s)
+       time_run=$((time_end-time_start))
+
+       echo "Time: ${time_run} seconds"
+}
+
+stop_if_error()
+{
+       local msg="$1"
+
+       if [ ${ret} -ne 0 ]; then
+               echo "FAIL: ${msg}" 1>&2
+               display_time
+               exit ${ret}
+       fi
+}
+
 make_file "$cin" "client"
 make_file "$sin" "server"
 
 
 check_mptcp_ulp_setsockopt
 
+stop_if_error "The kernel configuration is not valid for MPTCP"
+
 echo "INFO: validating network environment with pings"
 for sender in "$ns1" "$ns2" "$ns3" "$ns4";do
        do_ping "$ns1" $sender 10.0.1.1
        do_ping "$ns4" $sender dead:beef:3::1
 done
 
+stop_if_error "Could not even run ping tests"
+
 [ -n "$tc_loss" ] && tc -net "$ns2" qdisc add dev ns2eth3 root netem loss random $tc_loss delay ${tc_delay}ms
 echo -n "INFO: Using loss of $tc_loss "
 test "$tc_delay" -gt 0 && echo -n "delay $tc_delay ms "
 
 tc -net "$ns3" qdisc add dev ns3eth4 root netem delay ${reorder_delay}ms $tc_reorder
 
-for sender in $ns1 $ns2 $ns3 $ns4;do
-       run_tests_lo "$ns1" "$sender" 10.0.1.1 1
-       if [ $ret -ne 0 ] ;then
-               echo "FAIL: Could not even run loopback test" 1>&2
-               exit $ret
-       fi
-       run_tests_lo "$ns1" $sender dead:beef:1::1 1
-       if [ $ret -ne 0 ] ;then
-               echo "FAIL: Could not even run loopback v6 test" 2>&1
-               exit $ret
-       fi
+run_tests_lo "$ns1" "$ns1" 10.0.1.1 1
+stop_if_error "Could not even run loopback test"
+
+run_tests_lo "$ns1" "$ns1" dead:beef:1::1 1
+stop_if_error "Could not even run loopback v6 test"
 
+for sender in $ns1 $ns2 $ns3 $ns4;do
        # ns1<->ns2 is not subject to reordering/tc delays. Use it to test
        # mptcp syncookie support.
        if [ $sender = $ns1 ]; then
                ip netns exec "$ns2" sysctl -q net.ipv4.tcp_syncookies=1
        fi
 
+       run_tests "$ns1" $sender 10.0.1.1
+       run_tests "$ns1" $sender dead:beef:1::1
+
        run_tests "$ns2" $sender 10.0.1.2
        run_tests "$ns2" $sender dead:beef:1::2
        run_tests "$ns2" $sender 10.0.2.1
 
        run_tests "$ns4" $sender 10.0.3.1
        run_tests "$ns4" $sender dead:beef:3::1
+
+       stop_if_error "Tests with $sender as a sender have failed"
 done
 
 run_tests_peekmode "saveWithPeek"
 run_tests_peekmode "saveAfterPeek"
+stop_if_error "Tests with peek mode have failed"
 
-time_end=$(date +%s)
-time_run=$((time_end-time_start))
-
-echo "Time: ${time_run} seconds"
-
+display_time
 exit $ret