refactor(s2n-quic-core): simplify IO traits #1734
Merged
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.
Description of changes:
While implementing the AF_XDP IO provider, I wanted to make a generic event loop implementation so I didn't have to copy/paste the one from the tokio provider.
In this change, the core IO traits are refactored to make it possible to use in the generic IO provider event loop.
Call-outs:
The previous versions of the IO traits assumed that all of the incoming and outgoing packets were addressable through a slice. This was done to integrate with something like
rayon
to perform packet crypto in parallel. The problem is that assumption isn't really the case with AF_XDP, where we're putting descriptors in a ring buffer and they're not dereferenceable without theUMEM
. I also think there's other ways to perform packet encryption in parallel that don't force the IO provider to adhere to this strict interface, so it's best to keep it simple and put the complexity elsewhere (especially since it's not even being used right now.)I've also opened #1742 to highlight a better interface using GATs, which are only available in rust >=1.65. We can change the API once the MSRV bumps.
Testing:
Since this is just shuffling things around and simplifying traits, the existing tests should cover the changes.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.