Commit Graph

6112 Commits

Author SHA1 Message Date
Marten Seemann
30527c58c2 frame fuzzer: handle frames one by one (#3884)
This more closely matches what the connection does.
2023-06-13 13:44:25 -07:00
Marten Seemann
c52b583561 Merge pull request #3889 from quic-go/ackhandler-unexport-packet
ackhandler: unexport the packet struct
2023-06-13 23:44:09 +03:00
Marten Seemann
e45c46041a ackhandler: don't allocate a packet struct for non-ack-eliciting packets 2023-06-05 21:07:05 +03:00
Marten Seemann
5225a104d4 retransmission queue: simplify queueing of PING frames 2023-06-05 21:07:02 +03:00
Marten Seemann
da55dfaabd ackhandler: unexport Packet 2023-06-05 21:06:58 +03:00
Marten Seemann
e1bcedc78c ackhandler: use a frame handler interface for OnAcked / OnLost of all frame types (#3888) 2023-06-04 13:04:28 -07:00
Marten Seemann
bde283640b ackhandler: be explicit about skipping packet numbers (#3886) 2023-06-04 12:45:43 -07:00
Marten Seemann
6619e17dd7 ackhandler: don't log / trace skipped packets when declaring them lost (#3887) 2023-06-04 12:29:40 -07:00
Marten Seemann
8f3a68b4eb ackhandler: use a slice to keep track of sent packets (#3841)
* ackhandler: simplify deletion of old packets in packet history

* ackhandler: use a slice to keep track of sent packets

This is a vastly simpler data structure than the combination of map
and linked list used before. It avoids using a linked list (bad cache
locality) and a sync.Pool (for list elements), as well as having to do
hash table lookups.

In the future, this can be easily replaces with a ring buffer, avoiding
all allocations.

* ackhandler: don't store packets that were declared lost
2023-06-04 02:36:38 -07:00
Marten Seemann
6f07050269 ackhandler: apply logic from RFC 9000 to derive packet number length (#3885) 2023-06-04 02:17:57 -07:00
Marten Seemann
4b03636102 ci: run integration tests for all QUIC versions, even if steps failed (#3882) 2023-06-03 00:55:18 -07:00
Marten Seemann
f777c452ce Merge pull request #3881 from quic-go/packet-info-allocs
embed packetInfo in receivedPacket struct, use netip.Addr
2023-06-03 10:54:52 +03:00
Marten Seemann
edaeed0107 embed the packetInfo in the receivedPacket struct
This avoid allocating the packetInfo struct when receiving a packet.
2023-06-03 10:44:16 +03:00
Marten Seemann
3b5950a1ce use a netip.Addr instead of a net.IP in the packetInfo struct 2023-06-03 10:44:15 +03:00
Marten Seemann
b27d114f07 pass the current timestamp to the pacer instead of calling time.Now() (#3824) 2023-06-03 00:26:30 -07:00
Marten Seemann
072a602cc1 pass around receivedPacket as struct instead of as pointer (#3823) 2023-06-03 00:08:58 -07:00
Marten Seemann
591ab1ab5e packer: reduce number of calls to time.Now() when packing packets (#3815) 2023-06-02 23:58:41 -07:00
Marten Seemann
56432a8b79 ci: run linter on all supported platforms (#3816)
* only define packetInfo.ifIndex on platforms where it's actually used

* fix comment and stylecheck for IP_DONTFRAGMENT on Windows

* fix build flags on test file

* ci: run golangci-lint on multiple platforms
2023-06-02 23:47:05 -07:00
Marten Seemann
f661cd1796 Merge pull request #3808 from quic-go/gso
use GSO
2023-06-03 09:34:29 +03:00
Marten Seemann
97904d0b30 ci: also run integration tests with GSO disabled 2023-06-03 09:21:55 +03:00
Marten Seemann
5b5ffa942b pack packets into large buffers when GSO is available 2023-06-03 09:21:55 +03:00
Marten Seemann
628ba87727 append to a given buffer when packing a packet 2023-06-03 09:21:54 +03:00
Marten Seemann
b0524c1241 split code paths for packing normal and ACK-only packets 2023-06-02 18:35:02 +03:00
Marten Seemann
db4e929ccf connection: only queue flow control frames once when sending a batch 2023-06-02 18:35:02 +03:00
Marten Seemann
d1bbde3580 connection: move sending of MTU probe packets out of the fast path 2023-06-02 18:35:02 +03:00
Marten Seemann
499c8e4c33 connection: introduce a fast path for packing and sending many packets 2023-06-02 18:35:02 +03:00
Marten Seemann
9d70bc24a5 simplify pacing logic by introducing a SendPacingLimited send mode 2023-06-02 18:35:02 +03:00
Marten Seemann
470ae7b39b enable packet pacing, for packets sent before handshake completion
It's not clear why this was disabled so far. The pacer should have some
allowance for bursts, and it is expected that the handshake flights fit into
this burst budget and therefore won't be delayed by the pacer.

However, when using 0-RTT, it actually makes sense to start pacing right
away, to avoid inducing packet loss very early in the connection.
2023-06-02 18:35:02 +03:00
Marten Seemann
39ae200972 enable GSO on Linux, if available 2023-06-02 18:35:02 +03:00
Marten Seemann
7d8db149b6 introduce a buffer pool for large buffers (20k) 2023-06-02 18:35:02 +03:00
Marten Seemann
bef0f3d31a pass the maximum packet size from MTU discoverer to packet packer 2023-06-02 18:35:02 +03:00
Marten Seemann
ecaef04695 initialize the MTU discoverer immediately 2023-06-02 18:35:02 +03:00
Marten Seemann
727f9e5654 introduce a OptimizeConn function to manually enable UDP optimizations 2023-06-02 18:35:02 +03:00
Marten Seemann
7ea6dc991f use the same ACK frame struct in the send path, remove ACK frame pool (#3831) 2023-06-02 08:34:27 -07:00
Marten Seemann
21544085e1 Merge pull request #3878 from quic-go/single-ack-receiving
use a single ACK frame in the receive path
2023-06-02 18:06:06 +03:00
Marten Seemann
a595d34557 use a single ACK frame in the receive path 2023-06-02 17:21:46 +03:00
Marten Seemann
614fdb3271 only run DPLPMTUD if the connection can send packets with the DF bit set (#3879) 2023-06-02 06:54:34 -07:00
Marten Seemann
0438eada95 use ackhandler.Frame directly, not as a pointer, remove its sync.Pool (#3835) 2023-06-02 04:56:18 -07:00
Marten Seemann
f8d24ef1e9 don't use closures for passing OnLost and OnAcked STREAM frame callbacks (#3833) 2023-06-02 04:14:04 -07:00
Marten Seemann
ad79149738 improve document of the Transport and the dial and listen functions (#3875) 2023-06-02 03:45:40 -07:00
Marten Seemann
1d093d7927 config: handle overflows of stream and flow control limits (#3866) 2023-06-02 03:41:14 -07:00
Marten Seemann
f392c8a17b receive stream: put back the buffer for the last STREAM frame (#3832) 2023-06-02 03:22:51 -07:00
Marten Seemann
8a74f01add githooks: exclude deleted files from checks (#3864) 2023-06-02 03:14:03 -07:00
Marten Seemann
073f5c0306 ci: fix ordering of error output of the cross compilation workflow (#3809) 2023-06-02 03:12:53 -07:00
Marten Seemann
dd8ce5147b connection: refactor handling of frames when tracing 2023-06-02 13:10:07 +03:00
Marten Seemann
cfa03394b5 remove stray print statement in datagram test (#3828) 2023-06-02 03:08:02 -07:00
Marten Seemann
9899ec4126 README: restructure RFC section, add QUIC v2 (RFC 9369) (#3871) 2023-06-02 03:00:29 -07:00
Marten Seemann
215ba85db4 ackhandler: simplify sentPacketHandler.SentPacket (#3847)
No functional change expected.
2023-06-02 02:59:46 -07:00
Marten Seemann
1c3292d120 fix flaky client test (#3834) 2023-06-02 02:58:07 -07:00
Marten Seemann
a49fa6a682 update Ginkgo to v2.9.5 and Gomega to v1.27.6 (#3845) 2023-06-02 02:57:26 -07:00