Skip to content

Adding NIC Vendor Support

NIC vendor implementations live in pkg/config/system/nic/. Each vendor has its own file.

1. Create a vendor file

Example pkg/config/system/nic/broadcom.go:

package nic

type Broadcom struct{}

func (b Broadcom) Name() string { return "Broadcom" }

func (b Broadcom) Match(vendorID string) bool {
    return vendorID == "14e4"
}

func (b Broadcom) BindStrategy() BindStrategy {
    return BindStrategyVFIO
}

2. Register the vendor

In pkg/config/system/nic/all.go:

func init() {
    Register(Mellanox{})
    Register(Intel{})
    Register(Broadcom{})  // Add before Generic
    Register(Generic{})   // Generic must be last (matches everything)
}

File layout

pkg/config/system/nic/
├── nic.go       # Vendor interface and registration logic
├── bind.go      # Device binding (vfio-pci, uio, bifurcated)
├── mellanox.go  # Mellanox vendor
├── intel.go     # Intel vendor
├── generic.go   # Generic fallback
└── all.go       # Registration order

Bind strategy enum

Strategy Use
BindStrategyBifurcated Kernel driver stays bound; DPDK PMD via Verbs (Mellanox).
BindStrategyVFIO Default. Unbind from kernel, bind to vfio-pci. Requires IOMMU.
BindStrategyUIO Fallback. Unbind from kernel, bind to uio_pci_generic. No IOMMU.

Add a NIC reference page

After adding code support, add a page under docs/reference/nics/<vendor>-<family>.md capturing hardware specs, driver requirements, and any throughput limits or caveats. Then update docs/reference/nics/index.md and docs/reference/index.md to link the new entry.