UDP/QUIC/Http3 quiche::h3 Server/Listener integration#514
Open
hargut wants to merge 26 commits intocloudflare:mainfrom
Open
UDP/QUIC/Http3 quiche::h3 Server/Listener integration#514hargut wants to merge 26 commits intocloudflare:mainfrom
hargut wants to merge 26 commits intocloudflare:mainfrom
Conversation
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
Contributor
|
Thank you so much for this contribution. This work is on our road map but it will take some time to fully incorporate it with our other work-in-progress H3 related work. Stay tuned! |
No offense, but is there an approximate time frame for this? |
Contributor
Author
|
Given the developments within quiche (tokio-quiche) I'm not sure if it this will at all be considered for merging. |
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Listenerside is implemented inpingora-coreand requests are successfully handled using h3i, curl and nighthawk.The
Connectoris currently not implemented, integrations and tests withinpingora-proxyare 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
boringsslor the featuresrustls,quic-boringssl.Explicit activation of
quic-boringsslis required when usingrustlsto build successfully.Rustls is not supported directly by quiche, but can be used in combination with quiche and BoringSSL. The
pingora-corethen 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
opensslcrates 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-proxyintegrationI wish you all a happy new year and plenty of the best for 2025. 😀
Kind regards,
Harald