-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
UDP/QUIC/Http3 quiche::h3 Server/Listener integration #514
Open
hargut
wants to merge
26
commits into
cloudflare:main
Choose a base branch
from
hargut:feat/udp-quic-http3-quiche-integration
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
UDP/QUIC/Http3 quiche::h3 Server/Listener integration #514
hargut
wants to merge
26
commits into
cloudflare:main
from
hargut:feat/udp-quic-http3-quiche-integration
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
currently add quiche dependency only on boringssl feature quiche does not link correctly with the openssl feature rustls is currently not supported in quiche the QUIC/HTTP3 change affects lots of modules and files therefore currently not using a compile-time feature
sources cloudflare/quiche@0570ab83/apps/src/bin/quiche-server.rs cloudflare/quiche@0570ab83/apps/src/sendto.rs adjust for tokio::net::UdpSocket
refactor quic.rs to into a module to enhance structure quic::Listener maintains a map with ConnectionIds => ConnectionHandles ConnectionHandles correspond to Connections, both having states like `Incoming` & `Established` the ConnectionHandles are used to forward UDP datagrams to the according quic::Connection while the connection is in the `Incoming` state the data is sent through mpcs::channels, once `Established` the data is directly received on the quiche::Connection possible enhancements: use type state pattern during quic::tls_handshake move tls_handshake to protocols::l4::tls::quic
sources cloudflare/quiche@0570ab83/quiche/src/stream/mod.rs
enhance Quic handshake: - loop send & receive - error handling, logging read multiple body chunks in EchoApp
H3 session trailers, idle
to keep diff concise
add some documentations move socket to socket_details remove HandshakeResponse::Rejected
gumpt
added
enhancement
New feature or request
Long Term Goal
Feature that we plan to support but not likely in the near future
labels
Jan 17, 2025
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
enhancement
New feature or request
Long Term Goal
Feature that we plan to support but not likely in the near future
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Overview
The PR integrates Quiche/Http3 with pingora-core for the server side.
The viable options for the QUIC integration (#95) looked to be:
Comparing the two prototypes it seems that the second approach is favourable from some performance aspects.
This PR provides a partial solution to what is required for QUIC support in pingora.
Any feedback on the solution and technical details is highly appreciated. In case desirable please feel free to get in touch via mail.
Status
The
Listener
side is implemented inpingora-core
and requests are successfully handled using h3i, curl and nighthawk.The
Connector
is currently not implemented, integrations and tests withinpingora-proxy
are not covered.The documented MSRV of 1.72 is not compiling successful, the minimum working version is 1.74.
TLS
The PR only builds successfully using the feature
boringssl
or the featuresrustls,quic-boringssl
.Explicit activation of
quic-boringssl
is required when usingrustls
to build successfully.Rustls is not supported directly by quiche, but can be used in combination with quiche and BoringSSL. The
pingora-core
then contains both TLS libraries and uses Rustls for Http1/Http2 and BoringSSL for Http3.OpenSSL is only supported through QuicTLS in quiche, but QuicTLS is not integrated with the
openssl
crates which are being used inpingora-core
. Further it looks like the whole concept of implementing Quic within OpenSSL is different from the approach within BoringSSL.Building with OpenSSL for Http1/Http2 and BoringSSL for Http3 does not work as it leads to duplicated symbols during linking.
Open Points
Connector
&pingora-proxy
integrationI wish you all a happy new year and plenty of the best for 2025. 😀
Kind regards,
Harald