| Commit message (Collapse) | Author | Age |
... | |
| |
| |
| |
| |
| | |
Previously ACK ranges were logged as a gap/range sequence. Now these
values are expanded to packet number ranges for easier reading.
|
| |
| |
| |
| |
| |
| | |
Previously, tx ACK frames held ranges in an array of ngx_quic_ack_range_t,
while rx ACK frames held ranges in the serialized format. Now serialized format
is used for both types of frames.
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The patch resets ctx->frames queue, which may contain frames. It was possible
that congestion or amplification limits prevented all frames to be sent.
Retransmitted frames could be accounted twice as inflight: first time in
ngx_quic_congestion_lost() called from ngx_quic_resend_frames(), and later
from ngx_quic_discard_ctx().
|
| |
| |
| |
| | |
This allows to continue processing when the anti-amplification limit was hit.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This accounts for the following change:
* Require expansion of datagrams to ensure that a path supports at
least 1200 bytes:
- During the handshake ack-eliciting Initial packets from the
server need to be expanded
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| | |
All values are prefixed with name and separated from it using colon.
Multiple values are listed without commas in between.
Rationale: this greatly simplifies log parsing for analysis.
|
| |
| |
| |
| |
| |
| | |
The function may be called for any initialized frame, both rx and tx.
While there, shortened level names.
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
For application level packets, only every second packet is now acknowledged,
respecting max ack delay.
13.2.1 Sending ACK Frames
In order to assist loss detection at the sender, an endpoint SHOULD
generate and send an ACK frame without delay when it receives an ack-
eliciting packet either:
* when the received packet has a packet number less than another
ack-eliciting packet that has been received, or
* when the packet has a packet number larger than the highest-
numbered ack-eliciting packet that has been received and there are
missing packets between that packet and this packet.
13.2.2. Acknowledgement Frequency
A receiver SHOULD send an ACK frame after receiving at least two
ack-eliciting packets.
|
| | |
|
| |
| |
| |
| |
| | |
ACK Ranges are again managed based on the remembered Largest Acknowledged
sent in the packet being acknowledged, which partially reverts c01964fd7b8b.
|
| |
| |
| |
| | |
While there, additional debug messages were added.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
13.2.4. Limiting Ranges by Tracking ACK Frames
When a packet containing an ACK frame is sent, the largest
acknowledged in that frame may be saved. When a packet containing an
ACK frame is acknowledged, the receiver can stop acknowledging
packets less than or equal to the largest acknowledged in the sent
ACK frame.
|
| |
| |
| |
| |
| |
| |
| |
| | |
The history of acknowledged packet is kept in send context as ranges.
Up to NGX_QUIC_MAX_RANGES ranges is stored.
As a result, instead of separate ack frames, single frame with ranges
is sent.
|
| |
| |
| |
| |
| |
| |
| |
| | |
Per draft-ietf-quic-transport-32 on the topic:
: Similarly, a server MUST expand the payload of all UDP datagrams carrying
: ack-eliciting Initial packets to at least the smallest allowed maximum
: datagram size of 1200 bytes.
|
| |
| |
| |
| | |
It will be used for precise expansion of UDP datagram payload.
|
| |
| |
| |
| |
| | |
As seen in the quic-transport draft, which this implementation follows:
Initial packets sent by the server MUST set the Token Length field to zero.
|
| |
| |
| |
| | |
A zero-length token was used to initialize a prezeroed packet header.
|
| | |
|
| |
| |
| |
| | |
This is the restoration of 02ee77f8d53d accidentally reverted by 93be5658a250.
|
| |
| |
| |
| | |
Changes were intended for the test repository.
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| | |
The history of acknowledged packet is kept in send context as ranges.
Up to NGX_QUIC_MAX_RANGES ranges is stored.
As a result, instead of separate ack frames, single frame with ranges
is sent.
|
| | |
|
| |
| |
| |
| |
| | |
Header length calculation is adjusted to account real connection id lengths
instead of worst case.
|
| | |
|
| | |
|
| |
| |
| |
| | |
Found by Clang Static Analyzer.
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| | |
Previously, this field was not set while creating a QUIC stream connection.
As a result, calling ngx_connection_local_sockaddr() led to getsockname()
bad descriptor error.
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
The function did not free passed frames in case of error.
|
| | |
|
| |
| |
| |
| |
| |
| | |
If client acknowledged an Initial packet with CRYPTO frame and then
sent another Initial packet containing duplicate CRYPTO again, this
could result in resending frames off the empty send queue.
|
| |
| |
| |
| |
| | |
It could be that a frame was previously sent and may have stale information.
This was previously broken by merging frames on resend in b383120afca3.
|
| |
| |
| |
| |
| | |
The ngx_quic_hexdump() function is wrapped into macros to cast "data"
argument to "* u_char".
|
| |
| |
| |
| | |
This prevents name clashes with local variables.
|
| |
| |
| |
| | |
Instead of ignoring, connection was closed. This was broken in d0d3fc0697a0.
|
|\| |
|
| |
| |
| |
| | |
Found by Coverity (CID 1467637).
|
| |
| |
| |
| |
| |
| |
| |
| | |
In 7717:e3e8b8234f05, the 1st bit was incorrectly used. It shouldn't
be used for bitmask values, as it is used by NGX_CONF_BITMASK_SET.
Additionally, special value "off" added to make it possible to clear
inherited userid_flags value.
|
| | |
|
| | |
|