Testsuite: workaround older kernels
[users/heiko/exim.git] / test / scripts / 1990-TCP-Fast-Open / 1990
index 4f5758f5a9353cae06e989e778f19846d2a0e2e6..1fc4682aa7a21a989513dac3ded50d446315f946 100644 (file)
@@ -7,29 +7,47 @@
 # A packet capture on the loopback interface will show the TFO
 # option on the SYN, but the fast-output SMTP banner will not
 # be seen unless you also deliberately emulate a long path:
 # A packet capture on the loopback interface will show the TFO
 # option on the SYN, but the fast-output SMTP banner will not
 # be seen unless you also deliberately emulate a long path:
-# 'sudo tc qdisc add dev lo root netem delay 100ms'
+# 'sudo tc qdisc add dev lo root netem delay 50ms'
+# You'll need iproute-tc installed, for the tc command.
 # You'll need kernel-modules-extra installed, or you get
 # an unhelpful error from RTNETLINK.
 # To tidy up:  'sudo tc qdisc delete dev lo root'
 #
 # You'll need kernel-modules-extra installed, or you get
 # an unhelpful error from RTNETLINK.
 # To tidy up:  'sudo tc qdisc delete dev lo root'
 #
+# MacOS:
+# The kernel seems to have TFO enabled both ways as default.
+# There is a net.inet.tcp.clear_tfocache parameter
+## sysctl -w foo-val
+#
+# For network delays there is something called 'Network Link Conditioner'
+# which might do the job.  But how to manipulate it?
+#
+#
+sudo perl
+system ("tc qdisc add dev lo root netem delay 50ms");
+****
+#
+#
+# Disable the TFO blackhole detection, as we seem to be running foul of it.
+# If bitten, we see the expected EINPROGRESS for sendto, yet no TFO cookie
+# option on the SYN.
+#
+sudo perl
+system ("[ -e /proc/sys/net/ipv4/tcp_fastopen_blackhole_timeout_sec ] && echo 0 > /proc/sys/net/ipv4/tcp_fastopen_blackhole_timeout_sec");
+****
+#
 # First time runs will see a TFO request option only; subsequent
 # ones should see the TFO cookie and fast-output SMTP banner
 # (currently on a separate packet after the server SYN,ACK but before
 # the client ACK).
 #
 # First time runs will see a TFO request option only; subsequent
 # ones should see the TFO cookie and fast-output SMTP banner
 # (currently on a separate packet after the server SYN,ACK but before
 # the client ACK).
 #
-# The client log => lint.ex  should have a "TFO" element.
-# Assuming this is the first run since boot, the a@test recipient will not.
+# The client log => line  should have a "TFO" element.
+# The server log <= line for a@test.ex  should not.
 #
 #
-# The server log <= line for b@test.ex  should have a "TFO" element, but
-# this will only be obtained when the above delay is inserted into the
-# loopback net path.
+# First clear any previously-obtained cookie:
+sudo perl
+system ("ip tcp_metrics delete 127.0.0.1");
+****
 #
 #
-# this attempt to tidy up does not work
-#sudo perl
-#open (my $fh, "/proc/sys/net/ipv4/tcp_fastopen_key");
-#print $fh "00000000-00000000-00000000-00000000";
-#close $fh;
-#****
 #
 #
 # FreeBSD: it looks like you have to compile a custom kernel, with
 #
 #
 # FreeBSD: it looks like you have to compile a custom kernel, with
@@ -45,10 +63,20 @@ Testing
 ****
 sleep 3
 #
 ****
 sleep 3
 #
+# The server log <= line for b@test.ex  should have a "TFO" element, but
+# this will only be obtained when the above delay is inserted into the
+# loopback net path.
+#
 exim b@test.ex
 Testing
 ****
 sleep 3
 #
 exim b@test.ex
 Testing
 ****
 sleep 3
 #
+#
+sudo perl
+system ("tc qdisc delete dev lo root");
+system ("[ -e /proc/sys/net/ipv4/tcp_fastopen_blackhole_timeout_sec ] && echo 3600 > /proc/sys/net/ipv4/tcp_fastopen_blackhole_timeout_sec");
+****
+#
 killdaemon
 no_msglog_check
 killdaemon
 no_msglog_check