mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
selftests/net: packetdrill: add TCP Accurate ECN cases
Linux Accurate ECN test sets using ACE counters and AccECN options to cover several scenarios: Connection teardown, different ACK conditions, counter wrapping, SACK space grabbing, fallback schemes, negotiation retransmission/reorder/loss, AccECN option drop/loss, different handshake reflectors, data with marking, and different sysctl values. The packetdrill used is commit cbe405666c9c8698ac1e72f5e8ffc551216dfa56 of repo: https://github.com/minuscat/packetdrill/tree/upstream_accecn. And corresponding patches are sent to google/packetdrill email list. Signed-off-by: Chia-Yu Chang <chia-yu.chang@nokia-bell-labs.com> Co-developed-by: Ilpo Järvinen <ij@kernel.org> Signed-off-by: Ilpo Järvinen <ij@kernel.org> Co-developed-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: Neal Cardwell <ncardwell@google.com> Reviewed-by: Eric Dumazet <edumazet@google.com> Link: https://patch.msgid.link/20260131222515.8485-16-chia-yu.chang@nokia-bell-labs.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
8ae3e8e6ce
commit
f85d9c45f1
|
|
@ -0,0 +1,24 @@
|
|||
// 3rd ACK + 1st data segment lost, data segments with ce
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0.05 < SEWA 0:0(0) win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
// 3rd ACK lost
|
||||
// 1st data segment lost
|
||||
+0.05 < [ce] EAP. 1001:2001(1000) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 1 <ECN e1b 1 ceb 1000 e0b 1,nop,nop,nop,sack 1001:2001>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.2 < [ce] EAP. 1:1001(1000) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.001 > [ect0] EWA. 1:1(0) ack 2001 <ECN e1b 1 ceb 2000 e0b 1,nop>
|
||||
|
||||
+0.05 < [ce] EAP. 2001:3001(1000) ack 1 win 264
|
||||
+.001 > [ect0] . 1:1(0) ack 3001 <ECN e1b 1 ceb 3000 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
// 3rd ACK + 1st data segment lost, 2nd data segments with ce
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] SW. 0:0(0) ack 1 win 32767 <mss 1016,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
// 3rd ACK lost
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 2000) = 2000
|
||||
// 1st data segment lost + 2nd gets CE
|
||||
+.002 > [ect0] .5 1:1005(1004) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.000 > [ect0] P.5 1005:2001(996) ack 1 <ECN e1b 1 ceb 0 e0b 1, nop>
|
||||
+0.05 < [ect0] .6 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 996 e1b 1,nop,nop,nop,sack 1005:2001>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 1, tcpi_delivered_ce }%
|
||||
|
||||
+0.002~+0.1 > [ect0] .5 1:1005(1004) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.05 < [ect0] .6 1:1(0) ack 2001 win 264 <ECN e0b 1005 ceb 996 e1b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+0~+0.002 > [ect0] P.5 2001:3001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.1 < [ect0] .5 1:1001(1000) ack 3001 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+0~+0.01 > [ect0] .5 3001:3001(0) ack 1001 <ECN e1b 1 ceb 0 e0b 1001,nop>
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
// Test 3rd ACK flags when SYN-ACK is rexmitted
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.1 < [ect0] S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Our code currently sends a challenge ACK
|
||||
// when it receives a SYN in ESTABLISHED state
|
||||
// based on the latest SYN
|
||||
+.002 > [ect0] A. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Third ACK CE increases r.cep
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0.05 < SEWA 0:0(0) win 32767 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ce] W. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] WAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
// 3rd ACK lost, CE for the first data segment
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0.05 < SEWA 0:0(0) win 32767 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
// 3rd ACK lost
|
||||
+0.05 < [ce] EAP. 1:1001(1000) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 1001 <ECN e1b 1 ceb 1000 e0b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.05 < [ce] EAP. 1001:2001(1000) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.001 > [ect0] EWA. 1:1(0) ack 2001 <ECN e1b 1 ceb 2000 e0b 1 ,nop>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Test SYN/ACK rexmit triggered 3rd ACK duplicate + CE on first data seg
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// SYN/ACK rexmitted => two 3rd ACKs in-flight
|
||||
+1.0~+1.1 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
// Delivered 1st 3rd ACK
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
// Duplicate 3rd ACK delivered
|
||||
+1.05 < [ect0] W. 1:1(0) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
|
||||
+0.05 < [ce] EAP. 1:1001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 1001 <ECN e1b 1 ceb 1000 e0b 1,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Test that when accurate ECN is disabled,
|
||||
// client uses RFC3168 ECN for SYN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=1
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEW 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] S. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,nop,nop,nop,wscale 8>
|
||||
+.002 > [noecn] . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Test that SYN-ACK with ACE flags and without
|
||||
// ACE flags got dropped. Although we disable ECN,
|
||||
// we shouldn't consider this as blackholed as
|
||||
// these are dropped due to congestion
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [ect0] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SA. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN
|
||||
+0.1 < [noecn] S 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
+0.1 < [noecn] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
// Write with AccECN option but with ip-noecn since we received one SYN with ACE=0
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [noecn] P5. 1:101(100) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test AccECN -> RFC3168 fallback when sysctl asks for RFC3168 ECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=1
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SE. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < . 1:1(0) ack 1 win 320
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] P. 1:1001(1000) ack 1
|
||||
|
|
@ -0,0 +1,34 @@
|
|||
// Client negotiates AccECN and starts sending
|
||||
// AccECN option in last ACK and data segments
|
||||
// Middlebox drops AccECN option and client
|
||||
// reverts to ACE flags only
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
sysctl -q net.ipv4.tcp_ecn_option_beacon=1
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.05 < [ect0] EAP. 1:1001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EA. 1:1(0) ack 1001 <ECN e1b 1 ceb 0 e0b 1001,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
||||
+0.05 < [ect0] EAP. 1:1001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EA. 1:1(0) ack 1001 <ECN e1b 1 ceb 0 e0b 2001,nop,nop,nop,sack 1:1001>
|
||||
|
||||
+0.05 < [ect0] EAP. 1:1001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EA. 1:1(0) ack 1001 <nop,nop,sack 1:1001>
|
||||
|
||||
+0.05 < [ect0] EAP. 1001:2001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EA. 1:1(0) ack 2001
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
// Client negotiates AccECN and starts sending
|
||||
// AccECN option in last ACK and data segments
|
||||
// Middlebox accepts AccECN option but some packets
|
||||
// are lost due to congestion. Client should
|
||||
// continue to send AccECN option
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.102 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.1 < [ect0] SW. 0:0(0) ack 1 win 32767 <mss 1024,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] A. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
// Send
|
||||
+0.01 write(4, ..., 3000) = 3000
|
||||
+.002 > [ect0] .5 1:1013(1012) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.002 > [ect0] P.5 1013:2025(1012) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.002 > [ect0] P.5 2025:3001(976) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
// First two segments were lost due to congestion as SACK was
|
||||
// received acknowledging 3rd segment
|
||||
+0.1 < [ect0] .5 1:1(0) ack 1 win 264 <ECN e1b 1 ceb 0 e0b 977,nop,nop,nop,sack 2025:3001>
|
||||
|
||||
// Since data with option was SACKed, we can
|
||||
// continue to use AccECN option for the rest of
|
||||
// the connection. This one is a rexmt
|
||||
+.02~+0.5 > [ect0] .5 1:1013(1012) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.1 < [ect0] .5 1:1(0) ack 3001 win 264 <ECN e1b 1 ceb 0 e0b 3000,nop>
|
||||
|
||||
// Send new data, it should contain AccECN option
|
||||
+0.01 write(4, ..., 2000) = 2000
|
||||
+.002 > [ect0] .5 3001:4013(1012) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.002 > [ect0] P.5 4013:5001(988) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
// AccECN sysctl server-side only, no ECN/AccECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=5
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < S. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,nop,nop,nop,wscale 8>
|
||||
+.002 > . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test basic connection teardown where local process closes first:
|
||||
// the local process calls close() first, so we send a FIN, and receive an ACK.
|
||||
// Then we receive a FIN and ACK it.
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+.01...0.011 connect(3, ..., ...) = 0
|
||||
+0 > [noecn] SEWA 0:0(0) <...>
|
||||
+0 < [ect1] SW. 0:0(0) ack 1 win 32768 <mss 1000,nop,wscale 6,nop,nop,sackOK>
|
||||
+0 > [ect0] EW. 1:1(0) ack 1
|
||||
|
||||
+0 write(3, ..., 1000) = 1000
|
||||
+0 > [ect0] P5. 1:1001(1000) ack 1
|
||||
+0 < [ect0] .5 1:1(0) ack 1001 win 257
|
||||
|
||||
+0 close(3) = 0
|
||||
+0 > [ect0] F5. 1001:1001(0) ack 1
|
||||
+0 < [ect0] .5 1:1(0) ack 1002 win 257
|
||||
|
||||
+0 < [ect0] F5. 1:1(0) ack 1002 win 257
|
||||
+0 > [ect0] . 1002:1002(0) ack 2
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test a large ACK (> ACE field max)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 14600) = 14600
|
||||
+.002 > [ect0] P.5 1:14601(14600) ack 1
|
||||
+0.05 < [ect0] .5 1:1(0) ack 1461 win 264
|
||||
+0.05 < [ect0] .5 1:1(0) ack 14601 win 264
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 8, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
// Test false overflow detection with option used to rule out overflow
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
// Stop sending option to allow easier testing
|
||||
+0 `sysctl -q net.ipv4.tcp_ecn_option=0`
|
||||
|
||||
+0.002 write(4, ..., 14600) = 14600
|
||||
+.002 > [ect0] P.5 1:14601(14600) ack 1
|
||||
|
||||
+0.05 < [ect0] .5 1:1(0) ack 1460 win 264 <ECN e0b 1461 ceb 0 e1b 1,nop>
|
||||
+0.05 < [ect0] .5 1:1(0) ack 14601 win 264 <ECN e0b 14601 ceb 0 e1b 1,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 0, tcpi_delivered_ce
|
||||
assert tcpi_delivered_e0_bytes == 14600, tcpi_delivered_e0_bytes
|
||||
}%
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
// Test a large ACK (> ACE field max)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 14600) = 14600
|
||||
+.002 > [ect0] P.5 1:14601(14600) ack 1
|
||||
+0.05 < [ect0] .5 1:1(0) ack 14601 win 264
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test a large ACK (> ACE field max)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 14600) = 14600
|
||||
+.002 > [ect0] P.5 1:14601(14600) ack 1
|
||||
// Fake CE
|
||||
+0.05 < [ect0] .6 1:1(0) ack 14601 win 264
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 1, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test a large ACK (at ACE field max delta)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 14600) = 14600
|
||||
+.002 > [ect0] P.5 1:14601(14600) ack 1
|
||||
// Fake CE
|
||||
+0.05 < [ect0] .4 1:1(0) ack 14601 win 264
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 7, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
// Test basic AccECN CEP/CEB/E0B/E1B functionality & CEP wrapping
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 0, tcpi_delivered_ce
|
||||
assert tcpi_delivered_ce_bytes == 0, tcpi_delivered_ce_bytes
|
||||
}%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake CE
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 1001 win 264 <ECN e0b 1 ceb 1000 e1b 1,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 1, tcpi_delivered_ce
|
||||
assert tcpi_delivered_ce_bytes == 1000, tcpi_delivered_ce_bytes
|
||||
}%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake ect0
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 2001 win 264 <ECN e0b 1001 ceb 1000 e1b 1,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 1, tcpi_delivered_ce
|
||||
assert tcpi_delivered_e0_bytes == 1000, tcpi_delivered_e0_bytes
|
||||
}%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 2001:3001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake ce
|
||||
+0.05 < [ect0] EWA. 1:1(0) ack 3001 win 264 <ECN e0b 1001 ceb 2000 e1b 1,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 2, tcpi_delivered_ce
|
||||
assert tcpi_delivered_ce_bytes == 2000, tcpi_delivered_ce_bytes
|
||||
}%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 3001:4001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake ect1
|
||||
+0.05 < [ect0] EWA. 1:1(0) ack 4001 win 264 <ECN e0b 1001 ceb 2000 e1b 1001,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 2, tcpi_delivered_ce
|
||||
assert tcpi_delivered_e1_bytes == 1000, tcpi_delivered_e1_bytes
|
||||
}%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 4001:5001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake ce
|
||||
+0.05 < [ect0] . 1:1(0) ack 5001 win 264 <ECN e0b 1001 ceb 3000 e1b 1001,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 3, tcpi_delivered_ce
|
||||
assert tcpi_delivered_ce_bytes == 3000, tcpi_delivered_ce_bytes
|
||||
}%
|
||||
12
tools/testing/selftests/net/packetdrill/tcp_accecn_ecn3.pkt
Normal file
12
tools/testing/selftests/net/packetdrill/tcp_accecn_ecn3.pkt
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
// Test that tcp_ecn=4 uses RFC3168 ECN for SYN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=4
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.05 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEW 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
// Test basic AccECN CEP/CEB/E0B/E1B functionality & CEP wrapping
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.05 < [ce] EAP. 1:1001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 1001 <ECN e1b 1 ceb 1000 e0b 1,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
||||
+0.05 < [ect0] EAP. 1001:2001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 2001 <ECN e1b 1 ceb 1000 e0b 1001,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
||||
+0.05 < [ce] EAP. 2001:3001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EWA. 1:1(0) ack 3001 <ECN e1b 1 ceb 2000 e0b 1001,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
||||
+0.05 < [ect1] EAP. 3001:4001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] EWA. 1:1(0) ack 4001 <ECN e1b 1001 ceb 2000 e0b 1001,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
||||
+0.05 < [ce] EAP. 4001:5001(1000) ack 1 win 257 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] . 1:1(0) ack 5001 <ECN e1b 1001 ceb 3000 e0b 1001,nop>
|
||||
+0 read(4, ..., 1000) = 1000
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
// Test IP flags drop
|
||||
--tolerance_usecs=50000
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 1.1 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+.02 ~ +1.1 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
// SYN/ACK option drop test
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.02 ~+2 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.02 ~+5 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.02 ~+8 > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Test that SYN-ACK with ACE flags and without
|
||||
// ACE flags got dropped. Although we disable ECN,
|
||||
// we shouldn't consider this as blackholed as
|
||||
// these are dropped due to congestion
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [noecn] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN-ACK without option
|
||||
+1~+1.1 > [noecn] SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// SYN-ACK maybe getting blackholed, disable ECN
|
||||
+2~+2.2 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+4~+4.4 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Received an ACK after sending 3rd retransmission, not a blackhole
|
||||
+0.1 < [noecn] . 1:1(0) ack 1 win 320
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test that SYN with ACE flags and without
|
||||
// ACE flags got dropped. Although we disable
|
||||
// ECN, we shouldn't consider this as blackholed
|
||||
// as these are dropped due to congestion
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 3.1 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+.02~+1.1 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+.02~+1.1 > [noecn] S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+.02~+1.1 > [noecn] S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.1 < [noecn] S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0~+0.01 > [noecn] . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Test AccECN flags bleach
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] . 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [noecn] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.05 < [ect0] EAP. 1:1(0) ack 1001 win 320
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Test basic AccECN negotiation
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+.05 < [ect0] EAP. 1:1(0) ack 1001 win 256 <ECN e0b 1001 ceb 0 e1b 0,nop>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Test basic AccECN negotiation
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.05 < [ect0] EAP. 1:1(0) ack 1001 win 320
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Test basic AccECN negotiation without option
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < SW. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1
|
||||
+.05 < [ect0] EAP. 1:1(0) ack 1001 win 256
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
// Test basic AccECN negotiation, late option enable
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < SW. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1
|
||||
+.05 < [ect0] EAP. 1:1(0) ack 1001 win 256 <ECN e0b 1001 ceb 0 e1b 1,nop>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// Test client behavior on receiving a non ECN SYN-ACK
|
||||
// after receiving an AccECN SYN-ACK and moving to
|
||||
// ESTABLISHED state
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
// Receive an AccECN SYN-ACK and move to ESTABLISHED
|
||||
+0.05 < [noecn] SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
// Receive a non ECN SYN-ACK and send a challenge ACK with ACE feedback
|
||||
+0.1 < [noecn] S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
27
tools/testing/selftests/net/packetdrill/tcp_accecn_noopt.pkt
Normal file
27
tools/testing/selftests/net/packetdrill/tcp_accecn_noopt.pkt
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
// Test basic AccECN negotiation with option off using sysctl
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1
|
||||
+0.05 < [ect0] EAP. 1:1(0) ack 1001 win 320
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1001:2001(1000) ack 1
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// Test no progress filtering
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
// Fake CE and claim no progress
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 1000 e1b 1,nop>
|
||||
|
||||
+0.01 %{
|
||||
assert tcpi_delivered_ce == 0, tcpi_delivered_ce
|
||||
assert tcpi_delivered_ce_bytes == 0, tcpi_delivered_ce_bytes
|
||||
}%
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Test that SYN-ACK with ACE flags and without
|
||||
// ACE flags got dropped. Although we disable ECN,
|
||||
// we shouldn't consider this as blackholed as
|
||||
// these are dropped due to congestion
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [noecn] S 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN
|
||||
+0.1 < [ect0] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
+0.1 < [noecn] . 1:1(0) ack 1 win 320
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
// Write with AccECN option but with ip-noecn since we received one SYN with ACE=0
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [noecn] P. 1:101(100) ack 1
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test RFC3168 fallback when sysctl asks for AccECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEW 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SE. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < . 1:1(0) ack 1 win 320
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] P. 1:1001(1000) ack 1
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test RFC3168 ECN when sysctl asks for RFC3168 ECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=1
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEW 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SE. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < . 1:1(0) ack 1 win 320
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] P. 1:1001(1000) ack 1
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
// Test SACK space grab to fit AccECN option
|
||||
--tcp_ts_tick_usecs=1000
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+.01 < [ect1] EAP. 1001:2001(1000) ack 1 win 264
|
||||
+0.002 > [ect0] EA. 1:1(0) ack 1 <ECN e1b 1001 ceb 0 e0b 1,nop,nop,nop,sack 1001:2001>
|
||||
+.01 < [ect0] EAP. 3001:4001(1000) ack 1 win 264
|
||||
+0.002 > [ect0] EA. 1:1(0) ack 1 <ECN e1b 1001 ceb 0 e0b 1001,nop,nop,nop,sack 3001:4001 1001:2001>
|
||||
+.01 < [ce] EAP. 5001:6001(1000) ack 1 win 264
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <ECN e1b 1001 ceb 1000 e0b 1001,nop,nop,nop,sack 5001:6001 3001:4001 1001:2001>
|
||||
// DSACK works?
|
||||
+.01 < [ect0] EAP. 5001:6001(1000) ack 1 win 264
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <ECN e1b 1001 ceb 1000 e0b 2001,nop,nop,nop,sack 5001:6001 5001:6001 3001:4001>
|
||||
+.01 < [ect1] EAP. 6001:7001(1000) ack 1 win 264
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <ECN e1b 2001 ceb 1000 e0b 2001,nop,nop,nop,sack 5001:7001 3001:4001 1001:2001>
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
// Test SACK space grab to fit AccECN option
|
||||
--tcp_ts_tick_usecs=1000
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,sackOK,TS val 1 ecr 0,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,sackOK,TS val 100 ecr 1,ECN e1b 1 ceb 0 e0b 1,nop,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <nop,nop,TS val 2 ecr 100,ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
// One SACK block should allow all 3 AccECN fields:
|
||||
+.01 < [ect1] EAP. 1001:2001(1000) ack 1 win 264 <nop,nop,TS val 3 ecr 100>
|
||||
+0.002 > [ect0] EA. 1:1(0) ack 1 <nop,nop,TS val 160 ecr 2,ECN e1b 1001 ceb 0 e0b 1,nop,nop,nop,sack 1001:2001>
|
||||
|
||||
// Two SACK blocks should fit w/ AccECN if we only need to use 2 AccECN fields: check ect1 arriving.
|
||||
+.01 < [ect1] EAP. 3001:4001(1000) ack 1 win 264 <nop,nop,TS val 4 ecr 100>
|
||||
+0.002 > [ect0] EA. 1:1(0) ack 1 <nop,nop,TS val 172 ecr 2,ECN e1b 2001 ceb 0,nop,nop,sack 3001:4001 1001:2001>
|
||||
|
||||
// Two SACK blocks should fit w/ AccECN if we only need to use 2 AccECN fields: check CE arriving.
|
||||
+.01 < [ce] EAP. 5001:6001(1000) ack 1 win 264 <nop,nop,TS val 5 ecr 100>
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <nop,nop,TS val 184 ecr 2,ECN e1b 2001 ceb 1000,nop,nop,sack 5001:6001 3001:4001>
|
||||
|
||||
// Check that DSACK works, using 2 SACK blocks in total, if we only need to use 2 AccECN fields: check ect1 arriving.
|
||||
+.01 < [ect1] EAP. 5001:6001(1000) ack 1 win 264 <nop,nop,TS val 5 ecr 100>
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <nop,nop,TS val 196 ecr 2,ECN e1b 3001 ceb 1000,nop,nop,sack 5001:6001 5001:6001>
|
||||
|
||||
// Check the case where the AccECN option doesn't fit, because sending ect0
|
||||
// with order 1 would rquire 3 AccECN fields,
|
||||
// and TS (12 bytes) + 2 SACK blocks (20 bytes) + 3 AccECN fields (2 + 3*3 bytes) > 40 bytes.
|
||||
// That's OK; Linux TCP AccECN is optimized for the ECT1 case, not ECT0.
|
||||
+.01 < [ect0] EAP. 6001:7001(1000) ack 1 win 264 <nop,nop,TS val 5 ecr 100>
|
||||
+0.002 > [ect0] WA. 1:1(0) ack 1 <nop,nop,TS val 204 ecr 2,nop,nop,sack 5001:7001 3001:4001 1001:2001>
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// Test against classic ECN server
|
||||
// Not-ECT on SYN and server sets 1|0|1 (AE is unused for classic ECN)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] SEA. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,TS val 700 ecr 100,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <nop, nop, TS val 200 ecr 700>
|
||||
|
||||
+0 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P.5 1:101(100) ack 1 <nop,nop,TS val 300 ecr 700>
|
||||
+0 close(4) = 0
|
||||
|
||||
+.002 > [ect0] F.5 101:101(0) ack 1 <nop,nop,TS val 400 ecr 700>
|
||||
+0.1 < [noecn] R. 1:1(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
// Test against classic ECN server
|
||||
// Not-ECT on SYN and server sets 0|0|1
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] SE. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,TS val 700 ecr 100,nop,wscale 8>
|
||||
+.002 > [noecn] . 1:1(0) ack 1 <nop, nop, TS val 200 ecr 700>
|
||||
|
||||
+0 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P. 1:101(100) ack 1 <nop,nop,TS val 300 ecr 700>
|
||||
+0 close(4) = 0
|
||||
|
||||
+0 > [noecn] F. 101:101(0) ack 1 <...>
|
||||
+0.1 < R. 1:1(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
// Test against broken server (1|1|1)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] SEWA. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,TS val 700 ecr 100,nop,wscale 8>
|
||||
+.002 > [noecn] . 1:1(0) ack 1 <nop, nop, TS val 200 ecr 700>
|
||||
|
||||
+0 write(4, ..., 100) = 100
|
||||
+.002 > [noecn] P. 1:101(100) ack 1 <nop,nop,TS val 300 ecr 700>
|
||||
+0 close(4) = 0
|
||||
|
||||
+.002 > [noecn] F. 101:101(0) ack 1 <...>
|
||||
+0.1 < [noecn] R. 1:1(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
// Test against Non ECN server (0|0|0)
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [noecn] S. 0:0(0) ack 1 win 32767 <mss 1460,sackOK,TS val 700 ecr 100,nop,wscale 8>
|
||||
+.002 > [noecn] . 1:1(0) ack 1 <nop, nop, TS val 200 ecr 700>
|
||||
|
||||
+0 write(4, ..., 100) = 100
|
||||
+.002 > [noecn] P. 1:101(100) ack 1 <nop,nop,TS val 300 ecr 700>
|
||||
+0 close(4) = 0
|
||||
|
||||
+.002 > [noecn] F. 101:101(0) ack 1 <nop,nop,TS val 400 ecr 700>
|
||||
+0.1 < [noecn] R. 1:1(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test AccECN with sysctl set to server-side only
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=5
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
// Test that SYN with ACE flags was Acked
|
||||
// after 2nd retransmission. In this case,
|
||||
// since we got SYN-ACK that supports Accurate
|
||||
// ECN, we consider this as successful negotiation
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 2.1 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+1~+1.1 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+1~+1.1 > [noecn] S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
|
||||
+0.1 < [noecn] SW. 0:0(0) ack 1 win 32767 <mss 1016,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+0~+0.01 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
// Test that SYN with ACE flags got dropped
|
||||
// We retry one more time with ACE and then
|
||||
// fallback to disabled ECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 2.1 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+1~+1.1 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+1~+1.1 > [noecn] S 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.1 < [noecn] S. 0:0(0) ack 1 win 32767 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0~+0.01 > [noecn] . 1:1(0) ack 1
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// Test that SYN-ACK with ACE flags was Acked
|
||||
// after 2nd retransmission. In this case,
|
||||
// since we got the last ACK that supports Accurate
|
||||
// ECN, we consider this as successful negotiation
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [noecn] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN-ACK without option
|
||||
+1~+1.1 > [noecn] SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// SYN-ACK maybe getting blackholed, disable ECN
|
||||
+2~+2.2 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Received an ACK with ACE flags, state should be set to negotiation succeeded
|
||||
+0.1 < [noecn] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Test that SYN-ACK with ACE flags got dropped
|
||||
// We retry one more time with ACE and then
|
||||
// fallback to disabled ECN
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [noecn] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN-ACK without option
|
||||
+1~+1.1 > [noecn] SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// SYN-ACK maybe getting blackholed, disable ECN
|
||||
+2~+2.2 > [noecn] S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Received an ACK with no ACE flags, state should be set to blackholed
|
||||
+0.1 < [noecn] . 1:1(0) ack 1 win 320
|
||||
+0 accept(3, ..., ...) = 4
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Test AccECN ECN field reflector in SYNACK
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [ce] SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SWA. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Test AccECN ECN field reflector in SYNACK
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [ect0] SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SA. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
// Test AccECN ECN field reflector in SYNACK
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [ect1] SEWA 0:0(0) win 32792 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SEW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
// Test SYNACK CE & received_ce update
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > [noecn] SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [ce] SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] WA. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P.6 1:101(100) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.05 < [ect0] P.5 1:101(100) ack 101 win 256 <ECN e0b 101 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] .6 101:101(0) ack 101 <ECN e1b 1 ceb 0 e0b 101,nop>
|
||||
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P.6 101:201(100) ack 101 <ECN e1b 1 ceb 0 e0b 101,nop>
|
||||
|
||||
+0.1 < [ect1] P.5 201:301(100) ack 201 win 256 <ECN e0b 101 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] .6 201:201(0) ack 101 <ECN e1b 101 ceb 0 e0b 101,nop,nop,nop,sack 201:301>
|
||||
|
||||
+0.01 < [ce] .6 401:501(100) ack 201 win 256 <ECN e0b 101 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] .7 201:201(0) ack 101 <ECN e1b 101 ceb 100 e0b 101,nop,nop,nop,sack 401:501 201:301>
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
// Reflected SYNACK CE mark increases delivered_ce
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_fallback=0
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0.05 < SEWA 0:0(0) win 32767 <mss 1050,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
// Fake ce for prev, ECT validator must be disabled for this to work
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 1 win 264 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 1, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
// Test SYN=0 reflector
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [ect0] SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] A. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P.5 1:101(100) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.05 < [ect0] P.5 1:1(0) ack 101 win 256 <ECN e0b 101 ceb 0 e1b 1,nop>
|
||||
|
||||
+0.01 < [ect0] P.5 1:101(100) ack 101 win 256 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] .5 101:101(0) ack 101 <ECN e1b 1 ceb 0 e0b 101,nop>
|
||||
+0 read(4, ..., 100) = 100
|
||||
|
||||
+0 close(4) = 0
|
||||
+0 > F.5 101:101(0) ack 101 <...>
|
||||
+0.1 < R. 101:101(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
// Test SYN=0 reflector
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < [ect1] SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] EW. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P.5 1:101(100) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
+0.05 < [ect1] P.5 1:1(0) ack 101 win 256 <ECN e0b 101 ceb 0 e1b 1,nop>
|
||||
|
||||
+0.01 < [ect1] P.5 1:101(100) ack 101 win 256 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 > [ect0] .5 101:101(0) ack 101 <ECN e1b 101 ceb 0 e0b 1,nop>
|
||||
+0 read(4, ..., 100) = 100
|
||||
|
||||
+0 close(4) = 0
|
||||
+0 > F5. 101:101(0) ack 101 <...>
|
||||
+0.1 < R. 101:101(0) ack 102 win 4242
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
// Test 3rd ACK flags when SYN-ACK is rexmitted
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 4
|
||||
+.002 ... 0.052 connect(4, ..., ...) = 0
|
||||
|
||||
+.002 > SEWA 0:0(0) <mss 1460,sackOK,TS val 100 ecr 0,nop,wscale 8>
|
||||
+0.05 < SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
||||
+0.05 < SW. 0:0(0) ack 1 win 32767 <mss 1460,ECN e0b 1 ceb 0 e1b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [ect0] W. 1:1(0) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test that we retransmit SYN-ACK with ACE and without
|
||||
// AccECN options after
|
||||
// SYN-ACK was lost and TCP moved to TCPS_SYN_RECEIVED
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
sysctl -q net.ipv4.tcp_ecn_option=2
|
||||
`
|
||||
|
||||
+0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < [noecn] SEWA 0:0(0) win 32792 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+.002 > [noecn] SW. 0:0(0) ack 1 <mss 1460,ECN e1b 1 ceb 0 e0b 1,nop,nop,nop,sackOK,nop,wscale 8>
|
||||
|
||||
// Retransmit SYN-ACK without option
|
||||
+1~+1.1 > [noecn] SW. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 8>
|
||||
+0.1 < [noecn] W. 1:1(0) ack 1 win 320 <ECN e0b 1 ceb 0 e1b 1,nop>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
// We try to write with AccECN option
|
||||
+0.01 write(4, ..., 100) = 100
|
||||
+.002 > [ect0] P5. 1:101(100) ack 1 <ECN e1b 1 ceb 0 e0b 1,nop>
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
// Test TS progress filtering
|
||||
--tcp_ts_tick_usecs=1000
|
||||
--tolerance_usecs=7000
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,sackOK,TS val 1 ecr 0,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,sackOK,TS val 10 ecr 1,ECN e1b 1 ceb 0 e0b 1,nop,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <nop,nop,TS val 2 ecr 10>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <nop,nop,TS val 83 ecr 2>
|
||||
// Fake CE and claim no progress
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 1 win 264 <nop,nop,TS val 2 ecr 83>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
// Test TS progress filtering
|
||||
--tcp_ts_tick_usecs=1000
|
||||
|
||||
`./defaults.sh
|
||||
sysctl -q net.ipv4.tcp_ecn=3
|
||||
`
|
||||
|
||||
0 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
|
||||
+0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
|
||||
+0 bind(3, ..., ...) = 0
|
||||
+0 listen(3, 1) = 0
|
||||
|
||||
+0 < SEWA 0:0(0) win 32792 <mss 1050,sackOK,TS val 1 ecr 0,nop,wscale 8>
|
||||
+.002 > SW. 0:0(0) ack 1 <mss 1460,sackOK,TS val 10 ecr 1,ECN e1b 1 ceb 0 e0b 1,nop,nop,wscale 8>
|
||||
+0.05 < [ect0] W. 1:1(0) ack 1 win 264 <nop,nop,TS val 2 ecr 10>
|
||||
+.002 accept(3, ..., ...) = 4
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 0, tcpi_delivered_ce }%
|
||||
|
||||
+0.01 write(4, ..., 1000) = 1000
|
||||
+.002 > [ect0] EAP. 1:1001(1000) ack 1 <nop,nop,TS val 83 ecr 2>
|
||||
// Fake CE and claim no progress
|
||||
+0.05 < [ect0] WA. 1:1(0) ack 1 win 264 <nop,nop,TS val 3 ecr 83>
|
||||
|
||||
+0.01 %{ assert tcpi_delivered_ce == 1, tcpi_delivered_ce }%
|
||||
Loading…
Reference in New Issue
Block a user