delivered_data is the number of bytes, which have newly been delivered to the peer. This includes the number of bytes cumulatively acknowledged and selectively acknowledged.
Details
Details
Run the following packetdrill script:
--ip_version=ipv4 +0.000 `kldload -n cc_newreno` +0.000 `sysctl kern.timecounter.alloweddeviation=0` +0.000 `sysctl net.inet.tcp.initcwnd_segments=20` +0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3 +0.000 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 +0.000 setsockopt(3, IPPROTO_TCP, TCP_FUNCTION_BLK, {function_set_name="freebsd", pcbcnt=0}, 36) = 0 +0.000 setsockopt(3, IPPROTO_TCP, TCP_CONGESTION, "newreno", 8) = 0 +0.000 bind(3, ..., ...) = 0 +0.000 listen(3, 1) = 0 +0.000 < S 0:0(0) win 65535 <mss 1460,sackOK,eol,eol> +0.000 > S. 0:0(0) ack 1 win 65535 <mss 1460,sackOK,eol,eol> +0.050 < . 1:1(0) ack 1 win 65535 +0.000 accept(3, ..., ...) = 4 +0.000 close(3) = 0 +0.000 setsockopt(4, IPPROTO_TCP, TCP_LOG, [TCP_LOG_STATE_CONTINUAL], 4) = 0 +0.100 send(4, ..., 14600, 0) = 14600 +0.000 > . 1:1461(1460) ack 1 win 65535 +0.000 > . 1461:2921(1460) ack 1 win 65535 +0.000 > . 2921:4381(1460) ack 1 win 65535 +0.000 > . 4381:5841(1460) ack 1 win 65535 +0.000 > . 5841:7301(1460) ack 1 win 65535 +0.000 > . 7301:8761(1460) ack 1 win 65535 +0.000 > . 8761:10221(1460) ack 1 win 65535 +0.000 > . 10221:11681(1460) ack 1 win 65535 +0.000 > . 11681:13141(1460) ack 1 win 65535 +0.000 > P. 13141:14601(1460) ack 1 win 65535 +0.050 < . 1:1(0) ack 1 win 65535 <nop,nop,sack 1461:2921> +0.000 < . 1:1(0) ack 1 win 65535 <nop,nop,sack 1461:4381> +0.000 < . 1:1(0) ack 1 win 65535 <nop,nop,sack 1461:14601> // Now the end point is in fast recovery with SND.FACK = SND.MAX +0.000 > . 1:1461(1460) ack 1 win 65535 +0.050 < . 1:1(0) ack 5841 win 65535 +0.000 > . 13141:13141(0) ack 1 win 65535 // Failed Rescue Retransmit +1.000 > . 5841:7301(1460) ack 1 win 65535 // Timer based retransmission +0.050 < . 1:1(0) ack 7301 win 65535 // SEG.ACK < SND.FACK -> panic +0.000 > . 7301:8761(1460) ack 1 win 65535 +0.000 > . 8761:10221(1460) ack 1 win 65535 +0.050 < . 1:1(0) ack 10221 win 65535 +0.000 > . 10221:11681(1460) ack 1 win 65535 +0.000 > . 11681:13141(1460) ack 1 win 65535 +0.000 > P. 13141:14601(1460) ack 1 win 65535 +0.050 < . 1:1(0) ack 13141 win 65535 +0.040 < . 1:1(0) ack 14601 win 65535 +1.000 close(4) = 0 +0.000 > F. 14601:14601(0) ack 1 win 65535 +0.050 < F. 1:1(0) ack 14602 win 65535 +0.000 > . 14602:14602(0) ack 2 win 65535
Without this patch, an INVARIANTS kernel panics with sacked_bytes < 0.
Diff Detail
Diff Detail
- Repository
- rG FreeBSD src repository
- Lint
Lint Not Applicable - Unit
Tests Not Applicable
Event Timeline
Comment Actions
I now wonder why i had the left_edge adjustment conditional on an fack adjustment only. But that may have preceeded some other modifications. LGTM