summaryrefslogtreecommitdiffhomepage
path: root/test/packetdrill/no_rst_to_rst.pkt
blob: 6127478272f176d07e6f6f811a14ee5c217251bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Test a RST is not generated in response to a RST and a RST is correctly
// generated when an accepted endpoint is RST due to an incoming RST.

0  socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0 bind(3, ..., ...) = 0

+0 listen(3, 1) = 0

// Establish a connection without timestamps.
+0 < S 0:0(0) win 32792 <mss 1460,sackOK,nop,nop,nop,wscale 7>
+0 > S. 0:0(0) ack 1 <...>
+0 < P. 1:1(0) ack 1 win 257

+0.100 accept(3, ..., ...) = 4

+0.200 < R 1:1(0) win 0

+0.300 read(4,..., 4) = -1 ECONNRESET (Connection Reset by Peer)

+0.00 < . 1:1(0) ack 1 win 257

// Linux generates a reset with no ack number/bit set. This is contradictory to
// what is specified in Rule 1 under Reset Generation in
// https://tools.ietf.org/html/rfc793#section-3.4.
//   "1. If the connection does not exist (CLOSED) then a reset is sent
//    in response to any incoming segment except another reset.  In
//    particular, SYNs addressed to a non-existent connection are rejected
//    by this means.
//
//    If the incoming segment has an ACK field, the reset takes its
//    sequence number from the ACK field of the segment, otherwise the
//    reset has sequence number zero and the ACK field is set to the sum
//    of the sequence number and segment length of the incoming segment.
//    The connection remains in the CLOSED state."

+0.00 > R 1:1(0) win 0