selftest: packetdrill: Add test for experimental option.

The only difference between non-experimental vs experimental TFO
option handling is SYN+ACK generation.

When tcp_parse_fastopen_option() parses a TFO option, it sets
tcp_fastopen_cookie.exp to false if the option number is 34,
and true if 255.

The value is carried to tcp_options_write() to generate a TFO option
with the same option number.

Other than that, all the TFO handling is the same and the kernel must
generate the same cookie regardless of the option number.

Let's add a test for the handling so that we can consolidate
fastopen/server/ tests and fastopen/server/opt34 tests.

Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20250927213022.1850048-7-kuniyu@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Kuniyuki Iwashima 2025-09-27 21:29:44 +00:00 committed by Jakub Kicinski
parent 399e0a7ed9
commit e57b3933ab

View File

@ -0,0 +1,37 @@
// SPDX-License-Identifier: GPL-2.0
//
// Test the Experimental Option
//
// SYN w/ FOEXP w/o cookie must generates SYN+ACK w/ FOEXP
// w/ a valid cookie, and the cookie must be the same one
// with one generated by IANA FO
`./defaults.sh`
// Request a TFO cookie by Experimental Option
// This must generate the same TFO_COOKIE
0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1) = 0
+0 setsockopt(3, SOL_TCP, TCP_FASTOPEN, [1], 4) = 0
+0 < S 0:10(10) win 32792 <mss 1460,sackOK,nop,nop,FOEXP>
+0 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,FOEXP TFO_COOKIE>
+0 close(3) = 0
// Test if FOEXP with a valid cookie creates a TFO socket
0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0 bind(3, ..., ...) = 0
+0 listen(3, 1) = 0
+0 setsockopt(3, SOL_TCP, TCP_FASTOPEN, [1], 4) = 0
+0 < S 0:10(10) win 32792 <mss 1460,sackOK,nop,nop,FOEXP TFO_COOKIE>
+0 > S. 0:0(0) ack 11 <mss 1460,nop,nop,sackOK>
+0 accept(3, ..., ...) = 4
+0 %{ assert (tcpi_options & TCPI_OPT_SYN_DATA) != 0, tcpi_options }%
+0 read(4, ..., 512) = 10