Testsuite: for TFO testcases manipulate the system state
authorJeremy Harris <jgh146exb@wizmail.org>
Sun, 1 Oct 2017 20:45:11 +0000 (21:45 +0100)
committerJeremy Harris <jgh146exb@wizmail.org>
Sun, 1 Oct 2017 20:45:11 +0000 (21:45 +0100)
Linux-centric; will need elaboration for other platforms

src/src/ip.c
test/log/4027
test/scripts/1990-TCP-Fast-Open/1990
test/scripts/4027-TFO-socks/4027
test/stdout/4027

index eb01229e6b7ec3181e6304018f780b5c799f8fd3..e11aef98580587f6b1a7a094e88fd401eccd12b5 100644 (file)
@@ -237,26 +237,28 @@ if (fastopen)
   if ((rc = sendto(sock, fastopen->data, fastopen->len,
                    MSG_FASTOPEN | MSG_DONTWAIT, s_ptr, s_len)) >= 0)
        /* seen for with-data, experimental TFO option, with-cookie case */
+       /* seen for with-data, proper TFO opt, with-cookie case */
     {
     DEBUG(D_transport|D_v) debug_printf("TFO mode connection attempt, %s data\n",
       fastopen->len > 0 ? "with"  : "no");
     tcp_out_fastopen = fastopen->len > 0 ?  2 : 1;
     }
-  else if (errno == EINPROGRESS)       /* expected for nonready peer */
+  else if (errno == EINPROGRESS)       /* expected if we had no cookie for peer */
        /* seen for no-data, proper TFO option, both cookie-request and with-cookie cases */
        /*  apparently no visibility of the diffference at this point */
+       /* seen for with-data, proper TFO opt, cookie-req */
        /*   with netwk delay, post-conn tcp_info sees unacked 1 for R, 2 for C; code in smtp_out.c */
        /* ? older Experimental TFO option behaviour ? */
     {                                  /* queue unsent data */
+    DEBUG(D_transport|D_v) debug_printf("TFO mode sendto, %s data: EINPROGRESS\n",
+      fastopen->len > 0 ? "with"  : "no");
     if (!fastopen->data)
       {
-      tcp_out_fastopen = 1;    /* we tried; unknown if useful yet */
+      tcp_out_fastopen = 1;            /* we tried; unknown if useful yet */
       rc = 0;
       }
-    else if (  (rc = send(sock, fastopen->data, fastopen->len, 0)) < 0
-           && errno == EINPROGRESS     /* expected for nonready peer */
-           )
-      rc = 0;
+    else
+      rc = send(sock, fastopen->data, fastopen->len, 0);
     }
   else if(errno == EOPNOTSUPP)
     {
index 3af3f325bc95cec8cc209e1aa99ba7c8e6dc70ad..7df91966fe4f773fb8c7c6b7325fb1bf0b531acf 100644 (file)
@@ -1,6 +1,9 @@
 1999-03-02 09:44:33 10HmaX-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss
-1999-03-02 09:44:33 10HmaX-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK"
+1999-03-02 09:44:33 10HmaX-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 C="250 accepted OK"
 1999-03-02 09:44:33 10HmaX-0005vi-00 Completed
 1999-03-02 09:44:33 10HmaY-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss
 1999-03-02 09:44:33 10HmaY-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK"
 1999-03-02 09:44:33 10HmaY-0005vi-00 Completed
+1999-03-02 09:44:33 10HmaZ-0005vi-00 <= CALLER@myhost.test.ex U=CALLER P=local-esmtp S=sss
+1999-03-02 09:44:33 10HmaZ-0005vi-00 => user_tfo@test.ex R=my_main_router T=my_smtp H=127.0.0.1 [127.0.0.1]:1224 PRX=[127.0.0.1]:1225 TFO C="250 accepted OK"
+1999-03-02 09:44:33 10HmaZ-0005vi-00 Completed
index 4f5758f5a9353cae06e989e778f19846d2a0e2e6..3fffce2d4fd4f232bba4b7cd51693045823cedb8 100644 (file)
@@ -7,11 +7,15 @@
 # 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 kernel-modules-extra installed, or you get
 # an unhelpful error from RTNETLINK.
 # To tidy up:  'sudo tc qdisc delete dev lo root'
 #
+sudo perl
+system ("tc qdisc add dev lo root netem delay 50ms");
+****
+#
 # 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 log => lint.ex  should have a "TFO" element.
 # Assuming this is the first run since boot, the a@test recipient will not.
 #
+sudo perl
+system ("ip tcp_metrics delete 127.0.0.1");
+****
+#
 # 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.
 #
-# 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
@@ -50,5 +52,10 @@ Testing
 ****
 sleep 3
 #
+#
+sudo perl
+system ("tc qdisc delete dev lo root");
+****
+#
 killdaemon
 no_msglog_check
index 533021cbf5e6102d434656aec40cb2610221fb69..3cfb43ee4555906700d3110b69a83230957fc177 100644 (file)
@@ -3,6 +3,48 @@
 munge loopback
 #
 #
+# TFO both clients and server, no cookie yet
+sudo perl
+system ("ip tcp_metrics delete 127.0.0.1");
+****
+#
+server -tfo PORT_D
+<<\x05\x01\x00
+>>\x05\x00
+<<\x05\x01\x00\x01\x7f\x00\x00\x01\x04\xc8
+>>\x05\x00\x00\x01\x7f\x00\x00\x01\xbe\xef
+220 Connected OK
+EHLO
+250-server id
+250
+MAIL FROM
+250
+RCPT TO
+250
+DATA
+354 go ahead
+.
+250 accepted OK
+QUIT
+250 bye
+****
+#
+#
+exim -odi -bs -DOPT=
+ehlo test.ex
+mail from:<>
+rcpt to:<user_tfo@test.ex>
+data
+Date: Fri, 17 Dec 2004 14:35:01 +0100
+Subject: message should be sent
+
+connection trying TFO via proxy; no cookie yet
+.
+quit
+****
+#
+#
+#
 # TFO client, not server
 server PORT_D
 <<\x05\x01\x00
@@ -79,5 +121,6 @@ via null-auth proxy
 quit
 ****
 #
+millisleep 500
 #
 # Ends
index 74837c4ac0eaa765965ccfb3e23b86061f9df0ba..79950e97ff5bf5af8244ab4de82759d16e45a7ea 100644 (file)
 354 Enter message, ending with "." on a line by itself\r
 250 OK id=10HmaY-0005vi-00\r
 221 myhost.test.ex closing connection\r
+220 myhost.test.ex ESMTP Exim x.yz Tue, 2 Mar 1999 09:44:33 +0000\r
+250-myhost.test.ex Hello CALLER at test.ex\r
+250-SIZE 52428800\r
+250-8BITMIME\r
+250-PIPELINING\r
+250 HELP\r
+250 OK\r
+250 Accepted\r
+354 Enter message, ending with "." on a line by itself\r
+250 OK id=10HmaZ-0005vi-00\r
+221 myhost.test.ex closing connection\r
 
 ******** SERVER ********
 Listening on port 1225 ... 
@@ -37,6 +48,27 @@ MAIL FROM
 RCPT TO
 250
 DATA
+354 go ahead
+R
+250 accepted OK
+QUIT
+250 bye
+End of script
+Listening on port 1225 ... 
+Connection request from [ip4.ip4.ip4.ip4]
+<<\x05\x01\x00
+>>\x05\x00
+<<\x05\x01\x00\x01\x7f\x00\x00\x01\x04\xc8
+>>\x05\x00\x00\x01\x7f\x00\x00\x01\xbe\xef
+220 Connected OK
+EHLO
+250-server id
+250
+MAIL FROM
+250
+RCPT TO
+250
+DATA
 354 do me
 R
 250 accepted OK