2 releases
0.1.1 | Jan 29, 2022 |
---|---|
0.1.0 | Jan 29, 2022 |
#56 in #ethernet
87KB
2K
SLoC
Tygress (Work in Progress)
A library implementing popular networking transport protocols in user space with Rust.
Goals
- Correct, and comprehensive - The primary goal is create a network stack that works. Rusts
world-class type system is used at every opportunity to properly capture the constraints of the
network stack detailed in the IETF RFCs. From the link layer to the transport layer, the
following transport protocols are supported:
- UDP
- TCP
- QUIC
- Familiar, but
async
- Rust already has networking primitives for TCP/UDP. That familiar API is reproduced here, but with non-blocking primitives similar to the API in Tokio. These primitives are intended for use with thetygress
executor multiplexing network traffic between aNetDev
to a collection of sockets. - Safe, but zero-copy - Some use of the the
unsafe
keyword is necessary to provide a type-safe zero-copy API. Usage ofunsafe
is cordoned off to a small, well documented section of the library, while the rest is written in safe Rust. - No dependencies, and
no_std
- A network stack all in one place using only the core components of the Rust standard library. Implement theNetDev
trait for your own network device capable of receiving/transmitting Ethernet frames and BYOB (Bring Your Own Buffers) for the sockets. Those running Unix/BSD may opt-in to some providedNetDev
implementations.
Influences
- Jon Gjengset - Where this project all started.
smoltcp
- Used heavily as a reference throughout the project.tokio
- Ideas forasync
networking primitives.embassy
- Ideas for ano_std
executor.zerocopy
- Ideas for zero-copy type-safe headers.
Dependencies
~0–530KB
~11K SLoC