http: fix issues in CONNECT-UDP forwarding mode. (#36174)

Commit Message:
When Envoy operates as a CONNECT-UDP forwarding proxy, it was resetting
the upstream stream because it received HTTP Datagrams before receiving
the SETTINGS frame. A new enum has been added in QUICHE to distinguish
this case, so I added handling logic for this and made Envoy drop the
datagrams instead of resetting the stream.

Also, Envoy was dropping Datagrams because the default maximum packet
length for QUIC connections in QUICHE is not large enough for tunneling
use cases such as CONNECT-UDP. I added a new QUIC protocol option called
`max_packet_length` to allow users to adjust the maximum packet length
for upstream QUIC connections to fix this issue.

Additional Description:
Risk Level: Low, this change is only relevant if CONNECT-UDP is enabled
with the forwarding mode.
Testing: Added more unit tests.
Docs Changes: Added the `max_packet_length` QUIC protocol option and its
explanation.
Release Notes: Added notes about fixing the CONNECT-UDP forwarding mode
and adding the new QUIC protocol option.
Platform Specific Features: N/A
[Optional Fixes #Issue]: #34836

---------

Signed-off-by: Jeongseok Son <jeongseok.son@gmail.com>

Mirrored from https://github.com/envoyproxy/envoy @ 0e7fdf5f23e3147a998c24a0cf8e3192797e80c5
main
update-envoy[bot] 2 months ago
parent 6ad9b1b79a
commit f30a332536
  1. 6
      envoy/config/core/v3/protocol.proto

@ -56,7 +56,7 @@ message QuicKeepAliveSettings {
}
// QUIC protocol options which apply to both downstream and upstream connections.
// [#next-free-field: 9]
// [#next-free-field: 10]
message QuicProtocolOptions {
// Maximum number of streams that the client can negotiate per connection. 100
// if not specified.
@ -111,6 +111,10 @@ message QuicProtocolOptions {
lte {seconds: 600}
gte {seconds: 1}
}];
// Maximum packet length for QUIC connections. It refers to the largest size of a QUIC packet that can be transmitted over the connection.
// If not specified, one of the `default values in QUICHE <https://github.com/google/quiche/blob/main/quiche/quic/core/quic_constants.h>`_ is used.
google.protobuf.UInt64Value max_packet_length = 9;
}
message UpstreamHttpProtocolOptions {

Loading…
Cancel
Save