Skip to content

ajguerrer/tygress

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 shall be 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 the Tygress I/O driver multiplexing network traffic between a NetDev 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 of unsafe 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 the NetDev 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 provided NetDev implementations.

Influences

  • Jon Gjengset - Where this project all started.
  • smoltcp - Used heavily as a reference throughout the project.
  • tokio - Ideas for async networking primitives.
  • embassy - Ideas for a no_std executor.
  • zerocopy - Ideas for zero-copy type-safe headers.

About

Typed ingress/egress

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages