* [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
@ 2021-09-24 23:54 Wei Wang
2021-10-15 16:08 ` Wei Wang
0 siblings, 1 reply; 6+ messages in thread
From: Wei Wang @ 2021-09-24 23:54 UTC (permalink / raw)
To: Alejandro Colomar, Michael Kerrisk, linux-man
Cc: netdev, Yuchung Cheng, Neal Cardwell, Eric Dumazet
TCP_FASTOPEN socket option was added by:
commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
TCP_FASTOPEN_CONNECT socket option was added by the following patch
series:
commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
commit 25776aa943401662617437841b3d3ea4693ee98a
commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
Add detailed description for these 2 options.
Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
Signed-off-by: Wei Wang <weiwan@google.com>
---
man7/tcp.7 | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 125 insertions(+)
diff --git a/man7/tcp.7 b/man7/tcp.7
index 0a7c61a37..bdd4a33ca 100644
--- a/man7/tcp.7
+++ b/man7/tcp.7
@@ -423,6 +423,28 @@ option.
.\" Since 2.4.0-test7
Enable RFC\ 2883 TCP Duplicate SACK support.
.TP
+.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
+Enables RFC\ 7413 Fast Open support.
+The flag is used as a bitmap with the following values:
+.RS
+.IP 0x1
+Enables client side Fast Open support
+.IP 0x2
+Enables server side Fast Open support
+.IP 0x4
+Allows client side to transmit data in SYN without Fast Open option
+.IP 0x200
+Allows server side to accept SYN data without Fast Open option
+.IP 0x400
+Enables Fast Open on all listeners without
+.B TCP_FASTOPEN
+socket option
+.RE
+.TP
+.IR tcp_fastopen_key " (since Linux 3.7)"
+Set server side RFC\ 7413 Fast Open key to generate Fast Open cookie
+when server side Fast Open support is enabled.
+.TP
.IR tcp_ecn " (Integer; default: see below; since Linux 2.4)"
.\" Since 2.4.0-test7
Enable RFC\ 3168 Explicit Congestion Notification.
@@ -1202,6 +1224,109 @@ Bound the size of the advertised window to this value.
The kernel imposes a minimum size of SOCK_MIN_RCVBUF/2.
This option should not be used in code intended to be
portable.
+.TP
+.BR TCP_FASTOPEN " (since Linux 3.6)"
+This option enables Fast Open (RFC\ 7413) on the listener socket.
+The value specifies the maximum length of pending SYNs
+(similar to the backlog argument in
+.BR listen (2)).
+Once enabled,
+the listener socket grants the TCP Fast Open cookie on incoming
+SYN with TCP Fast Open option.
+.IP
+More importantly it accepts the data in SYN with a valid Fast Open cookie
+and responds SYN-ACK acknowledging both the data and the SYN sequence.
+.BR accept (2)
+returns a socket that is available for read and write when the handshake
+has not completed yet.
+Thus the data exchange can commence before the handshake completes.
+This option requires enabling the server-side support on sysctl
+.IR net.ipv4.tcp_fastopen
+(see above).
+For TCP Fast Open client-side support,
+see
+.BR send (2)
+.B MSG_FASTOPEN
+or
+.B TCP_FASTOPEN_CONNECT
+below.
+.TP
+.BR TCP_FASTOPEN_CONNECT " (since Linux 4.11)"
+This option enables an alternative way to perform Fast Open on the active
+side (client).
+When this option is enabled,
+.BR connect (2)
+would behave differently depending on if a Fast Open cookie is available
+for the destination.
+.IP
+If a cookie is not available (i.e. first contact to the destination),
+.BR connect (2)
+behaves as usual by sending a SYN immediately,
+except the SYN would include an empty Fast Open cookie option to solicit a
+cookie.
+.IP
+If a cookie is available,
+.BR connect (2)
+would return 0 immediately but the SYN transmission is defered.
+A subsequent
+.BR write (2)
+or
+.BR sendmsg (2)
+would trigger a SYN with data plus cookie in the Fast Open option.
+In other words,
+the actual connect operation is deferred until data is supplied.
+.IP
+.B Note:
+While this option is designed for convenience,
+enabling it does change the behaviors and certain system calls might set
+different
+.I errno
+values.
+With cookie present,
+.BR write (2)
+or
+.BR sendmsg (2)
+must be called right after
+.BR connect (2)
+in order to send out SYN+data to complete 3WHS and establish connection.
+Calling
+.BR read (2)
+right after
+.BR connect (2)
+without
+.BR write (2)
+will cause the blocking socket to be blocked forever.
+.IP
+The application should either set
+.B TCP_FASTOPEN_CONNECT
+socket option before
+.BR write (2)
+or
+.BR sendmsg (2)
+,
+or call
+.BR write (2)
+or
+.BR sendmsg (2)
+with
+.B MSG_FASTOPEN
+flag directly,
+instead of both on the same connection.
+.IP
+Here is the typical call flow with this new option:
+.IP
+.in +4n
+.EX
+s = socket();
+setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
+connect(s);
+write(s); // write() should always follow connect() in order to trigger SYN to go out
+read(s)/write(s);
+...
+close(s);
+.EE
+.in
+.IP
.SS Sockets API
TCP provides limited support for out-of-band data,
in the form of (a single byte of) urgent data.
--
2.33.0.685.g46640cef36-goog
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
2021-09-24 23:54 [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options Wei Wang
@ 2021-10-15 16:08 ` Wei Wang
2021-10-15 22:12 ` Alejandro Colomar (man-pages)
0 siblings, 1 reply; 6+ messages in thread
From: Wei Wang @ 2021-10-15 16:08 UTC (permalink / raw)
To: Alejandro Colomar, Michael Kerrisk, linux-man
Cc: netdev, Yuchung Cheng, Neal Cardwell, Eric Dumazet
On Fri, Sep 24, 2021 at 4:54 PM Wei Wang <weiwan@google.com> wrote:
>
> TCP_FASTOPEN socket option was added by:
> commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
> TCP_FASTOPEN_CONNECT socket option was added by the following patch
> series:
> commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
> commit 25776aa943401662617437841b3d3ea4693ee98a
> commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
> commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
> Add detailed description for these 2 options.
> Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
>
> Signed-off-by: Wei Wang <weiwan@google.com>
> ---
Hi Alex,
Does this version look OK to you to apply?
Let me know.
Thanks.
Wei
> man7/tcp.7 | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 125 insertions(+)
>
> diff --git a/man7/tcp.7 b/man7/tcp.7
> index 0a7c61a37..bdd4a33ca 100644
> --- a/man7/tcp.7
> +++ b/man7/tcp.7
> @@ -423,6 +423,28 @@ option.
> .\" Since 2.4.0-test7
> Enable RFC\ 2883 TCP Duplicate SACK support.
> .TP
> +.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
> +Enables RFC\ 7413 Fast Open support.
> +The flag is used as a bitmap with the following values:
> +.RS
> +.IP 0x1
> +Enables client side Fast Open support
> +.IP 0x2
> +Enables server side Fast Open support
> +.IP 0x4
> +Allows client side to transmit data in SYN without Fast Open option
> +.IP 0x200
> +Allows server side to accept SYN data without Fast Open option
> +.IP 0x400
> +Enables Fast Open on all listeners without
> +.B TCP_FASTOPEN
> +socket option
> +.RE
> +.TP
> +.IR tcp_fastopen_key " (since Linux 3.7)"
> +Set server side RFC\ 7413 Fast Open key to generate Fast Open cookie
> +when server side Fast Open support is enabled.
> +.TP
> .IR tcp_ecn " (Integer; default: see below; since Linux 2.4)"
> .\" Since 2.4.0-test7
> Enable RFC\ 3168 Explicit Congestion Notification.
> @@ -1202,6 +1224,109 @@ Bound the size of the advertised window to this value.
> The kernel imposes a minimum size of SOCK_MIN_RCVBUF/2.
> This option should not be used in code intended to be
> portable.
> +.TP
> +.BR TCP_FASTOPEN " (since Linux 3.6)"
> +This option enables Fast Open (RFC\ 7413) on the listener socket.
> +The value specifies the maximum length of pending SYNs
> +(similar to the backlog argument in
> +.BR listen (2)).
> +Once enabled,
> +the listener socket grants the TCP Fast Open cookie on incoming
> +SYN with TCP Fast Open option.
> +.IP
> +More importantly it accepts the data in SYN with a valid Fast Open cookie
> +and responds SYN-ACK acknowledging both the data and the SYN sequence.
> +.BR accept (2)
> +returns a socket that is available for read and write when the handshake
> +has not completed yet.
> +Thus the data exchange can commence before the handshake completes.
> +This option requires enabling the server-side support on sysctl
> +.IR net.ipv4.tcp_fastopen
> +(see above).
> +For TCP Fast Open client-side support,
> +see
> +.BR send (2)
> +.B MSG_FASTOPEN
> +or
> +.B TCP_FASTOPEN_CONNECT
> +below.
> +.TP
> +.BR TCP_FASTOPEN_CONNECT " (since Linux 4.11)"
> +This option enables an alternative way to perform Fast Open on the active
> +side (client).
> +When this option is enabled,
> +.BR connect (2)
> +would behave differently depending on if a Fast Open cookie is available
> +for the destination.
> +.IP
> +If a cookie is not available (i.e. first contact to the destination),
> +.BR connect (2)
> +behaves as usual by sending a SYN immediately,
> +except the SYN would include an empty Fast Open cookie option to solicit a
> +cookie.
> +.IP
> +If a cookie is available,
> +.BR connect (2)
> +would return 0 immediately but the SYN transmission is defered.
> +A subsequent
> +.BR write (2)
> +or
> +.BR sendmsg (2)
> +would trigger a SYN with data plus cookie in the Fast Open option.
> +In other words,
> +the actual connect operation is deferred until data is supplied.
> +.IP
> +.B Note:
> +While this option is designed for convenience,
> +enabling it does change the behaviors and certain system calls might set
> +different
> +.I errno
> +values.
> +With cookie present,
> +.BR write (2)
> +or
> +.BR sendmsg (2)
> +must be called right after
> +.BR connect (2)
> +in order to send out SYN+data to complete 3WHS and establish connection.
> +Calling
> +.BR read (2)
> +right after
> +.BR connect (2)
> +without
> +.BR write (2)
> +will cause the blocking socket to be blocked forever.
> +.IP
> +The application should either set
> +.B TCP_FASTOPEN_CONNECT
> +socket option before
> +.BR write (2)
> +or
> +.BR sendmsg (2)
> +,
> +or call
> +.BR write (2)
> +or
> +.BR sendmsg (2)
> +with
> +.B MSG_FASTOPEN
> +flag directly,
> +instead of both on the same connection.
> +.IP
> +Here is the typical call flow with this new option:
> +.IP
> +.in +4n
> +.EX
> +s = socket();
> +setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT, 1, ...);
> +connect(s);
> +write(s); // write() should always follow connect() in order to trigger SYN to go out
> +read(s)/write(s);
> +...
> +close(s);
> +.EE
> +.in
> +.IP
> .SS Sockets API
> TCP provides limited support for out-of-band data,
> in the form of (a single byte of) urgent data.
> --
> 2.33.0.685.g46640cef36-goog
>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
2021-10-15 16:08 ` Wei Wang
@ 2021-10-15 22:12 ` Alejandro Colomar (man-pages)
2021-11-05 17:19 ` Wei Wang
0 siblings, 1 reply; 6+ messages in thread
From: Alejandro Colomar (man-pages) @ 2021-10-15 22:12 UTC (permalink / raw)
To: Wei Wang, Michael Kerrisk, linux-man
Cc: netdev, Yuchung Cheng, Neal Cardwell, Eric Dumazet
Hi Wei,
On 10/15/21 6:08 PM, Wei Wang wrote:
> On Fri, Sep 24, 2021 at 4:54 PM Wei Wang <weiwan@google.com> wrote:
>>
>> TCP_FASTOPEN socket option was added by:
>> commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
>> TCP_FASTOPEN_CONNECT socket option was added by the following patch
>> series:
>> commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
>> commit 25776aa943401662617437841b3d3ea4693ee98a
>> commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
>> commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
>> Add detailed description for these 2 options.
>> Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
>>
>> Signed-off-by: Wei Wang <weiwan@google.com>
>> ---
>
> Hi Alex,
>
> Does this version look OK to you to apply?
> Let me know.
Sorry, I missed that patch.
Thanks for the ping! I'll try to have a look at it ASAP.
Thanks,
Alex
>
> Thanks.
> Wei
--
Alejandro Colomar
Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
http://www.alejandro-colomar.es/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
2021-10-15 22:12 ` Alejandro Colomar (man-pages)
@ 2021-11-05 17:19 ` Wei Wang
2021-11-12 20:55 ` Alejandro Colomar (man-pages)
0 siblings, 1 reply; 6+ messages in thread
From: Wei Wang @ 2021-11-05 17:19 UTC (permalink / raw)
To: Alejandro Colomar (man-pages)
Cc: Michael Kerrisk, linux-man, netdev, Yuchung Cheng, Neal Cardwell,
Eric Dumazet
On Fri, Oct 15, 2021 at 3:12 PM Alejandro Colomar (man-pages)
<alx.manpages@gmail.com> wrote:
>
> Hi Wei,
>
> On 10/15/21 6:08 PM, Wei Wang wrote:
> > On Fri, Sep 24, 2021 at 4:54 PM Wei Wang <weiwan@google.com> wrote:
> >>
> >> TCP_FASTOPEN socket option was added by:
> >> commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
> >> TCP_FASTOPEN_CONNECT socket option was added by the following patch
> >> series:
> >> commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
> >> commit 25776aa943401662617437841b3d3ea4693ee98a
> >> commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
> >> commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
> >> Add detailed description for these 2 options.
> >> Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
> >>
> >> Signed-off-by: Wei Wang <weiwan@google.com>
> >> ---
> >
> > Hi Alex,
> >
> > Does this version look OK to you to apply?
> > Let me know.
>
> Sorry, I missed that patch.
> Thanks for the ping! I'll try to have a look at it ASAP.
>
Hi Alex,
I am not sure if this patch has been applied yet?
If not, could you help take a look? Let me know if you'd like me to resend it.
Thanks.
Wei
> Thanks,
>
> Alex
>
>
> >
> > Thanks.
> > Wei
>
>
> --
> Alejandro Colomar
> Linux man-pages comaintainer; https://www.kernel.org/doc/man-pages/
> http://www.alejandro-colomar.es/
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
2021-11-05 17:19 ` Wei Wang
@ 2021-11-12 20:55 ` Alejandro Colomar (man-pages)
2021-11-12 20:58 ` Wei Wang
0 siblings, 1 reply; 6+ messages in thread
From: Alejandro Colomar (man-pages) @ 2021-11-12 20:55 UTC (permalink / raw)
To: Wei Wang
Cc: Michael Kerrisk, linux-man, netdev, Yuchung Cheng, Neal Cardwell,
Eric Dumazet, G. Branden Robinson
Hi Wei,
On 11/5/21 18:19, Wei Wang wrote:
> On Fri, Oct 15, 2021 at 3:12 PM Alejandro Colomar (man-pages)
> <alx.manpages@gmail.com> wrote:
>>
>> Hi Wei,
>>
>> On 10/15/21 6:08 PM, Wei Wang wrote:
>>> On Fri, Sep 24, 2021 at 4:54 PM Wei Wang <weiwan@google.com> wrote:
>>>>
>>>> TCP_FASTOPEN socket option was added by:
>>>> commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
>>>> TCP_FASTOPEN_CONNECT socket option was added by the following patch
>>>> series:
>>>> commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
>>>> commit 25776aa943401662617437841b3d3ea4693ee98a
>>>> commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
>>>> commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
>>>> Add detailed description for these 2 options.
>>>> Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
>>>>
>>>> Signed-off-by: Wei Wang <weiwan@google.com>
Sorry for the delay.
I have applied it now.
I also applied some minor changes on top of your patch
(see below).
Thanks!
Alex
---
tcp.7: Minor tweaks to Wei's patch
- wsfix
- Boldface literals (see groff_man(7)).
- Replace '\ ' by \~, per Branden's advise.
- Use phrasal semantic newlines.
- Put '...' in a C comment, to avoid interfering with groff.
It has the side effect that the code example is pure C now.
- Remove incorrect trailing '.IP'.
Cc: Wei Wang <weiwan@google.com>
Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
diff --git a/man7/tcp.7 b/man7/tcp.7
index 264e3ccc4..69d85c05a 100644
--- a/man7/tcp.7
+++ b/man7/tcp.7
@@ -423,26 +423,31 @@ option.
.\" Since 2.4.0-test7
Enable RFC\ 2883 TCP Duplicate SACK support.
.TP
-.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
-Enables RFC\ 7413 Fast Open support.
+.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
+Enables RFC\~7413 Fast Open support.
The flag is used as a bitmap with the following values:
.RS
-.IP 0x1
+.TP
+.B 0x1
Enables client side Fast Open support
-.IP 0x2
+.TP
+.B 0x2
Enables server side Fast Open support
-.IP 0x4
+.TP
+.B 0x4
Allows client side to transmit data in SYN without Fast Open option
-.IP 0x200
+.TP
+.B 0x200
Allows server side to accept SYN data without Fast Open option
-.IP 0x400
+.TP
+.B 0x400
Enables Fast Open on all listeners without
.B TCP_FASTOPEN
socket option
.RE
.TP
.IR tcp_fastopen_key " (since Linux 3.7)"
-Set server side RFC\ 7413 Fast Open key to generate Fast Open cookie
+Set server side RFC\~7413 Fast Open key to generate Fast Open cookie
when server side Fast Open support is enabled.
.TP
.IR tcp_ecn " (Integer; default: see below; since Linux 2.4)"
@@ -1226,19 +1231,19 @@ This option should not be used in code intended
to be
portable.
.TP
.BR TCP_FASTOPEN " (since Linux 3.6)"
-This option enables Fast Open (RFC\ 7413) on the listener socket.
+This option enables Fast Open (RFC\~7413) on the listener socket.
The value specifies the maximum length of pending SYNs
(similar to the backlog argument in
.BR listen (2)).
Once enabled,
-the listener socket grants the TCP Fast Open cookie on incoming
-SYN with TCP Fast Open option.
+the listener socket grants the TCP Fast Open cookie
+on incoming SYN with TCP Fast Open option.
.IP
More importantly it accepts the data in SYN with a valid Fast Open cookie
and responds SYN-ACK acknowledging both the data and the SYN sequence.
.BR accept (2)
-returns a socket that is available for read and write when the handshake
-has not completed yet.
+returns a socket that is available for read and write
+when the handshake has not completed yet.
Thus the data exchange can commence before the handshake completes.
This option requires enabling the server-side support on sysctl
.IR net.ipv4.tcp_fastopen
@@ -1252,18 +1257,18 @@ or
below.
.TP
.BR TCP_FASTOPEN_CONNECT " (since Linux 4.11)"
-This option enables an alternative way to perform Fast Open on the active
-side (client).
+This option enables an alternative way to perform Fast Open
+on the active side (client).
When this option is enabled,
.BR connect (2)
-would behave differently depending on if a Fast Open cookie is available
-for the destination.
+would behave differently depending on
+if a Fast Open cookie is available for the destination.
.IP
If a cookie is not available (i.e. first contact to the destination),
.BR connect (2)
behaves as usual by sending a SYN immediately,
-except the SYN would include an empty Fast Open cookie option to solicit a
-cookie.
+except the SYN would include an empty Fast Open cookie option
+to solicit a cookie.
.IP
If a cookie is available,
.BR connect (2)
@@ -1297,13 +1302,12 @@ without
.BR write (2)
will cause the blocking socket to be blocked forever.
.IP
-The application should either set
+The application should either set
.B TCP_FASTOPEN_CONNECT
socket option before
.BR write (2)
or
-.BR sendmsg (2)
-,
+.BR sendmsg (2),
or call
.BR write (2)
or
@@ -1322,11 +1326,10 @@ setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
1, ...);
connect(s);
write(s); // write() should always follow connect() in order to
trigger SYN to go out
read(s)/write(s);
-...
+/* ... */
close(s);
.EE
.in
-.IP
.SS Sockets API
TCP provides limited support for out-of-band data,
in the form of (a single byte of) urgent data.
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options
2021-11-12 20:55 ` Alejandro Colomar (man-pages)
@ 2021-11-12 20:58 ` Wei Wang
0 siblings, 0 replies; 6+ messages in thread
From: Wei Wang @ 2021-11-12 20:58 UTC (permalink / raw)
To: Alejandro Colomar (man-pages)
Cc: Michael Kerrisk, linux-man, netdev, Yuchung Cheng, Neal Cardwell,
Eric Dumazet, G. Branden Robinson
On Fri, Nov 12, 2021 at 12:56 PM Alejandro Colomar (man-pages)
<alx.manpages@gmail.com> wrote:
>
> Hi Wei,
>
> On 11/5/21 18:19, Wei Wang wrote:
> > On Fri, Oct 15, 2021 at 3:12 PM Alejandro Colomar (man-pages)
> > <alx.manpages@gmail.com> wrote:
> >>
> >> Hi Wei,
> >>
> >> On 10/15/21 6:08 PM, Wei Wang wrote:
> >>> On Fri, Sep 24, 2021 at 4:54 PM Wei Wang <weiwan@google.com> wrote:
> >>>>
> >>>> TCP_FASTOPEN socket option was added by:
> >>>> commit 8336886f786fdacbc19b719c1f7ea91eb70706d4
> >>>> TCP_FASTOPEN_CONNECT socket option was added by the following patch
> >>>> series:
> >>>> commit 065263f40f0972d5f1cd294bb0242bd5aa5f06b2
> >>>> commit 25776aa943401662617437841b3d3ea4693ee98a
> >>>> commit 19f6d3f3c8422d65b5e3d2162e30ef07c6e21ea2
> >>>> commit 3979ad7e82dfe3fb94a51c3915e64ec64afa45c3
> >>>> Add detailed description for these 2 options.
> >>>> Also add descriptions for /proc entry tcp_fastopen and tcp_fastopen_key.
> >>>>
> >>>> Signed-off-by: Wei Wang <weiwan@google.com>
>
> Sorry for the delay.
> I have applied it now.
> I also applied some minor changes on top of your patch
> (see below).
>
Thank you so much for the fixes and thanks for applying, Alex!
> Thanks!
> Alex
>
>
> ---
>
> tcp.7: Minor tweaks to Wei's patch
>
> - wsfix
> - Boldface literals (see groff_man(7)).
> - Replace '\ ' by \~, per Branden's advise.
> - Use phrasal semantic newlines.
> - Put '...' in a C comment, to avoid interfering with groff.
> It has the side effect that the code example is pure C now.
> - Remove incorrect trailing '.IP'.
>
> Cc: Wei Wang <weiwan@google.com>
> Signed-off-by: Alejandro Colomar <alx.manpages@gmail.com>
>
> diff --git a/man7/tcp.7 b/man7/tcp.7
> index 264e3ccc4..69d85c05a 100644
> --- a/man7/tcp.7
> +++ b/man7/tcp.7
> @@ -423,26 +423,31 @@ option.
> .\" Since 2.4.0-test7
> Enable RFC\ 2883 TCP Duplicate SACK support.
> .TP
> -.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
> -Enables RFC\ 7413 Fast Open support.
> +.IR tcp_fastopen " (Bitmask; default: 0x1; since Linux 3.7)"
> +Enables RFC\~7413 Fast Open support.
> The flag is used as a bitmap with the following values:
> .RS
> -.IP 0x1
> +.TP
> +.B 0x1
> Enables client side Fast Open support
> -.IP 0x2
> +.TP
> +.B 0x2
> Enables server side Fast Open support
> -.IP 0x4
> +.TP
> +.B 0x4
> Allows client side to transmit data in SYN without Fast Open option
> -.IP 0x200
> +.TP
> +.B 0x200
> Allows server side to accept SYN data without Fast Open option
> -.IP 0x400
> +.TP
> +.B 0x400
> Enables Fast Open on all listeners without
> .B TCP_FASTOPEN
> socket option
> .RE
> .TP
> .IR tcp_fastopen_key " (since Linux 3.7)"
> -Set server side RFC\ 7413 Fast Open key to generate Fast Open cookie
> +Set server side RFC\~7413 Fast Open key to generate Fast Open cookie
> when server side Fast Open support is enabled.
> .TP
> .IR tcp_ecn " (Integer; default: see below; since Linux 2.4)"
> @@ -1226,19 +1231,19 @@ This option should not be used in code intended
> to be
> portable.
> .TP
> .BR TCP_FASTOPEN " (since Linux 3.6)"
> -This option enables Fast Open (RFC\ 7413) on the listener socket.
> +This option enables Fast Open (RFC\~7413) on the listener socket.
> The value specifies the maximum length of pending SYNs
> (similar to the backlog argument in
> .BR listen (2)).
> Once enabled,
> -the listener socket grants the TCP Fast Open cookie on incoming
> -SYN with TCP Fast Open option.
> +the listener socket grants the TCP Fast Open cookie
> +on incoming SYN with TCP Fast Open option.
> .IP
> More importantly it accepts the data in SYN with a valid Fast Open cookie
> and responds SYN-ACK acknowledging both the data and the SYN sequence.
> .BR accept (2)
> -returns a socket that is available for read and write when the handshake
> -has not completed yet.
> +returns a socket that is available for read and write
> +when the handshake has not completed yet.
> Thus the data exchange can commence before the handshake completes.
> This option requires enabling the server-side support on sysctl
> .IR net.ipv4.tcp_fastopen
> @@ -1252,18 +1257,18 @@ or
> below.
> .TP
> .BR TCP_FASTOPEN_CONNECT " (since Linux 4.11)"
> -This option enables an alternative way to perform Fast Open on the active
> -side (client).
> +This option enables an alternative way to perform Fast Open
> +on the active side (client).
> When this option is enabled,
> .BR connect (2)
> -would behave differently depending on if a Fast Open cookie is available
> -for the destination.
> +would behave differently depending on
> +if a Fast Open cookie is available for the destination.
> .IP
> If a cookie is not available (i.e. first contact to the destination),
> .BR connect (2)
> behaves as usual by sending a SYN immediately,
> -except the SYN would include an empty Fast Open cookie option to solicit a
> -cookie.
> +except the SYN would include an empty Fast Open cookie option
> +to solicit a cookie.
> .IP
> If a cookie is available,
> .BR connect (2)
> @@ -1297,13 +1302,12 @@ without
> .BR write (2)
> will cause the blocking socket to be blocked forever.
> .IP
> -The application should either set
> +The application should either set
> .B TCP_FASTOPEN_CONNECT
> socket option before
> .BR write (2)
> or
> -.BR sendmsg (2)
> -,
> +.BR sendmsg (2),
> or call
> .BR write (2)
> or
> @@ -1322,11 +1326,10 @@ setsockopt(s, IPPROTO_TCP, TCP_FASTOPEN_CONNECT,
> 1, ...);
> connect(s);
> write(s); // write() should always follow connect() in order to
> trigger SYN to go out
> read(s)/write(s);
> -...
> +/* ... */
> close(s);
> .EE
> .in
> -.IP
> .SS Sockets API
> TCP provides limited support for out-of-band data,
> in the form of (a single byte of) urgent data.
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2021-11-12 20:59 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-24 23:54 [patch v3] tcp.7: Add description for TCP_FASTOPEN and TCP_FASTOPEN_CONNECT options Wei Wang
2021-10-15 16:08 ` Wei Wang
2021-10-15 22:12 ` Alejandro Colomar (man-pages)
2021-11-05 17:19 ` Wei Wang
2021-11-12 20:55 ` Alejandro Colomar (man-pages)
2021-11-12 20:58 ` Wei Wang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).