Subject: Whence a description of how to enable TCP FASTOPEN in a net-next kernel?

From: Rick Jones <[email-masked]>
Date: Mon, 17 Dec 2012 13:27:06 -0800

Is there a writeup describing the steps needed to enable TCP_FASTOPEN in 
a net-next kernel? (pulled earlier today)

I am looking to debug netperf's support for enabling the feature and I 
want to make sure I've enabled things correctly in the kernel.  Thusfar 
I've set the tcp_fastopen sysctl to one, and I see the "client" side of 
netperf making the appropriate sendto() call, and I see what appears to 
be the correct setsockopt being set on the server side, but my tcpdump 
traces of the traffic flowing over loopback in my test setup, while 
showing the client including the experimental option, do not show the 
server side responding:

13:10:23.870202 IP localhost.5923 > localhost.54363: Flags [S], seq 
935361110, win 43690, options [mss 65495,sackOK,TS val 889762 ecr 
0,nop,wscale 7,Unknown Option 254f989], length 0
13:10:23.870214 IP localhost.54363 > localhost.5923: Flags [S.], seq 
4210640362, ack 935361111, win 43690, options [mss 65495,sackOK,TS val 
889762 ecr 889762,nop,wscale 7], length 0

The netserver side strace snippet:

3861  socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 8
3861  getsockopt(8, SOL_SOCKET, SO_SNDBUF, [16384], [4]) = 0
3861  getsockopt(8, SOL_SOCKET, SO_RCVBUF, [87380], [4]) = 0
3861  setsockopt(8, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
3861  bind(8, {sa_family=AF_INET, sin_port=htons(0), 
sin_addr=inet_addr("0.0.0.0")}, 16) = 0
3861  setsockopt(8, SOL_TCP, 0x17 /* TCP_??? */, [5], 4) = 0
3861  listen(8, 5)                      = 0
...
3861  accept(8, {sa_family=AF_INET, sin_port=htons(5923), 
sin_addr=inet_addr("127.0.0.1")}, [16]) = 9
3861  recvfrom(9, "n", 1, 0, NULL, NULL) = 1
3861  sendto(9, "n", 1, 0, NULL, 0)     = 1
3861  getsockopt(9, SOL_SOCKET, SO_RCVBUF, [262030], [4]) = 0
3861  getsockopt(9, SOL_SOCKET, SO_SNDBUF, [663750], [4]) = 0
3861  close(9)                          = 0

lather, rinse, repeat the accept sequence off that listen endpoint.

happy benchmarking,

rick jones