f904dbbb4c
Same release/acquire fence pattern as the other PCI drivers. The ixgbe (10 GbE) has the same hand-off semantics as e1000/rtl8168 (OWN/OWN-bit), so the same ordering is required: release fence before TDT (TX doorbell) and RDT (RX doorbell), and an acquire fence before reading the descriptor status. The Linux ixgbe driver applies the same fences in the same places; see afadba9..c17924b in the upstream tree. The original Redox port from ixy.rs didn't carry them, which is a real bug on aarch64 (or on any future cache-coherent extension).
ixgbed (a.k.a. ixy.rs on Redox)
ixgbed is the Redox port of ixy.rs, a Rust rewrite of the ixy userspace network driver.
It is designed to be readable, idiomatic Rust code.
It supports Intel 82599 10GbE NICs (ixgbe family).
Features
- first 10 Gbit/s network driver on Redox
- transmitting 250 times faster than e1000 / rtl8168 driver
- MSI-X interrupts (not supported by Redox yet)
- less than 1000 lines of code for the driver
- documented code
Build instructions
See the Redox README for build instructions.
To run ixgbed on Redox (in case the driver is not shipped with Redox anymore)
- clone this project into
cookbook/recipes/drivers/source/ - create an entry for ixgbed in
cookbook/recipes/drivers/source/Cargo.toml - check if your ixgbe device is included in
config.toml - touch
filesystem.tomlin Redox's root directory, build Redox and run it
Usage
To test the driver's transmit and forwarding capabilities, have a look at rheinfall, a simple packet generator / forwarder application.
Docs
ixgbed contains documentation that can be created and viewed by running
cargo doc --open