X-Git-Url: https://git.exim.org/users/jgh/exim.git/blobdiff_plain/ac0dcd3f05a8821d7ce042646472be1995a08042..c3da38a12a2372a7f6a48be97ebfd80aeceda828:/test/scripts/1990-TCP-Fast-Open/1990?ds=inline diff --git a/test/scripts/1990-TCP-Fast-Open/1990 b/test/scripts/1990-TCP-Fast-Open/1990 index cbedd3622..80059e685 100644 --- a/test/scripts/1990-TCP-Fast-Open/1990 +++ b/test/scripts/1990-TCP-Fast-Open/1990 @@ -7,26 +7,53 @@ # 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' +# +# 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? +# +# +# FreeBSD: it looks like you have to compile a custom kernel, with +# 'options TCP_RFC7413' in the config. Also set +# 'net.inet.tcp.fastopen.server_enable=1' in /etc/sysctl.conf +# Seems to always claim TFO used by transport, if tried. +# +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). # -# 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 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. +# The client log => line should have a "TFO" element. +# The server log <= line for a@test.ex should not. # +# First clear any previously-obtained cookie: +sudo perl +system ("ip tcp_metrics delete 127.0.0.1"); +**** # # -# FreeBSD: it looks like you have to compile a custom kernel, with -# 'options TCP_RFC7413' in the config. Also set -# 'net.inet.tcp.fastopen.enabled=1' in /etc/sysctl.conf -# Untested. # exim -DSERVER=server -bd -oX PORT_D **** @@ -36,10 +63,20 @@ Testing **** 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 # +# +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