xref: /linux/tools/testing/selftests/net/packetdrill/tcp_rfc5961_rst-syn-recv.pkt (revision fab183d632628381b466a41479489541ac0e29a0)
1// SPDX-License-Identifier: GPL-2.0
2//
3// RFC 9293 Section 3.10.7.4: in SYN-RECEIVED, an exact RST resets
4// the connection.  A non-exact in-window RST elicits a challenge ACK,
5// while an out-of-window RST is silently discarded.
6
7`./defaults.sh`
8
9// An exact RST removes the request socket.
10   0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
11  +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
12  +0 bind(3, ..., ...) = 0
13  +0 listen(3, 1) = 0
14  +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0>
15  +0 > S. 0:0(0) ack 1 <...>
16  +0 < R 1:1(0) win 1000
17 +.1 < . 1:1(0) ack 1 win 1000
18  +0 > R 1:1(0)
19  +0 close(3) = 0
20
21// A non-exact in-window RST gets a challenge ACK and the request survives.
22  +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
23  +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
24  +0 bind(3, ..., ...) = 0
25  +0 listen(3, 1) = 0
26  +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0>
27  +0 > S. 0:0(0) ack 1 <...>
28  +0 < R 2:2(0) win 1000
29  +0 > . 1:1(0) ack 1
30  +0 < . 1:1(0) ack 1 win 1000
31  +0 accept(3, ..., ...) = 4
32  +0 close(4) = 0
33  +0 close(3) = 0
34
35// RST sequence validation precedes ACK validation.  Even an RST|ACK
36// with an unacceptable ACK value gets a challenge ACK.
37  +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
38  +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
39  +0 bind(3, ..., ...) = 0
40  +0 listen(3, 1) = 0
41  +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0>
42  +0 > S. 0:0(0) ack 1 <...>
43  +0 < R. 2:2(0) ack 100 win 1000
44  +0 > . 1:1(0) ack 1
45  +0 < . 1:1(0) ack 1 win 1000
46  +0 accept(3, ..., ...) = 4
47  +0 close(4) = 0
48  +0 close(3) = 0
49
50// An out-of-window RST is silent and does not remove the request.
51  +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3
52  +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
53  +0 bind(3, ..., ...) = 0
54  +0 listen(3, 1) = 0
55  +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0>
56  +0 > S. 0:0(0) ack 1 <...>
57  +0 < R 100001:100001(0) win 1000
58 +.1 < . 1:1(0) ack 1 win 1000
59  +0 accept(3, ..., ...) = 4
60  +0 close(4) = 0
61  +0 close(3) = 0
62