Crate ixgbe

source ·
Expand description

An ixgbe driver for a 82599 10GbE Network Interface Card.

Currently we support basic send and receive, Receive Side Scaling (RSS), 5-tuple filters, and MSI interrupts. We also support language-level virtualization of the NIC so that applications can directly access their assigned transmit and receive queues. When using virtualization, we disable RSS since we use 5-tuple filters to ensure packets are routed to the correct queues. We also disable interrupts when using virtualization, since we do not yet have support for allowing applications to register their own interrupt handlers.

Modules

  • A set of functions to create packets for testing the NIC transmission functionality.
  • Interface for an application to request a VirtualNIC from the ixgbe device, and implementation of the PhysicalNic trait for the ixgbe device.

Structs

  • A struct representing an ixgbe network interface card.

Enums

Constants

  • Device ID for the 82599ES, used to identify the device from the PCI space
  • Vendor ID for Intel
  • The number of receive queues that are enabled. Do NOT set this greater than 64 since the queues 65-128 don’t seem to work, most likely because they need additional configuration.
  • The number of transmit queues that are enabled. Do NOT set this greater than 64 since the queues 65-128 don’t seem to work, most likely because they need additional configuration.

Statics

  • All the 82599 NICs found in the PCI space are initialized and then stored here.

Functions

  • Returns a reference to the IxgbeNic wrapped in a IrqSafeMutex, if it exists and has been initialized. Currently we use the pci location of the device as identification since it should not change after initialization.
  • Returns a reference to the list of all initialized ixgbe NICs
  • A helper function to poll the nic receive queues (only for testing purposes).
  • A helper function to send a test packet on a nic transmit queue (only for testing purposes).