CXGBEV(4)
π CXGBEV(4) β Chelsio T4-, T5-, and T6-based 100Gb, 40Gb, 25Gb, 10Gb, and 1Gb Ethernet VF driver π
okay bestie, sit down, hydrate, because this is the kernel interfaces manual page for cxgbev and we're gonna get through it together. it's giving network driver, it's giving PCI Express Virtual Functions, it's giving slay. let's go π¦
β¨ NAME β¨
cxgbev β the Chelsio T4-, T5-, and T6-based 100Gb, 40Gb, 25Gb, 10Gb, and 1Gb Ethernet VF driver. no cap, that's the whole name, it's a lot, we love her for it π
πΈ SYNOPSIS πΈ
so to compile this driver into the kernel, you drop these lines into your kernel configuration file:
device cxgbe
device cxgbev
and if you wanna load the driver as a module at boot time instead, you put this line in loader.conf(5):
if_cxgbev_load="YES"
that's it. that's the whole vibe check. periodt π
π« DESCRIPTION π«
the cxgbev driver provides support for Virtual Functions on PCI Express Ethernet adapters based on the Chelsio Terminator 4, Terminator 5, and Terminator 6 ASICs (T4, T5, and T6). like, the whole Terminator lineup, iconic behavior honestly π
and what does she support? literally everything:
- Jumbo Frames
- Transmit/Receive checksum offload
- TCP segmentation offload (TSO)
- Large Receive Offload (LRO)
- VLAN tag insertion/extraction
- VLAN checksum offload
- VLAN TSO
- Receive Side Steering (RSS)
for further hardware info and any questions about hardware requirements, go look at http://www.chelsio.com/. iykyk π
π§ the names thing (important!!)
okay so the cxgbev driver uses different names for devices depending on which ASIC is in play. this is the part where you actually pay attention:
- ASIC T4 β port name
cxgbev, parent devicet4vf - ASIC T5 β port name
cxlv, parent devicet5vf - ASIC T6 β port name
ccv, parent devicet6vf
π«Ά tunables + sysctl MIBs, the lore
Loader tunables with the hw.cxgbe prefix apply to VFs from all cards. the Physical Function driver for Chelsio Terminator adapters shares these tunables, bestie, they're literally sharing. the driver also provides sysctl MIBs for both ports and parent devices using the names above. for example β and this is the example, i'm not making it up β a T5 VF provides port MIBs under dev.cxlv and parent device MIBs under dev.t5vf. π
references to sysctl MIBs for the rest of this page use dev.<port> for port MIBs and dev.<nexus> for parent device MIBs. memorize it, it's on the test.
for more info on configuring this device, see ifconfig(8).
π₯ HARDWARE π₯
T6 ASIC β 100Gb and 25Gb Ethernet adapters, Virtual Functions:
- Chelsio T6225-CR
- Chelsio T6225-SO-CR
- Chelsio T62100-LP-CR
- Chelsio T62100-SO-CR
- Chelsio T62100-CR
T5 ASIC β 40Gb, 10Gb and 1Gb Ethernet adapters, Virtual Functions:
- Chelsio T580-CR
- Chelsio T580-LP-CR
- Chelsio T580-LP-SO-CR
- Chelsio T560-CR
- Chelsio T540-CR
- Chelsio T540-LP-CR
- Chelsio T522-CR
- Chelsio T520-LL-CR
- Chelsio T520-CR
- Chelsio T520-SO
- Chelsio T520-BT
- Chelsio T504-BT
T4 ASIC β 10Gb and 1Gb Ethernet adapters, Virtual Functions:
- Chelsio T420-CR
- Chelsio T422-CR
- Chelsio T440-CR
- Chelsio T420-BCH
- Chelsio T440-BCH
- Chelsio T440-CH
- Chelsio T420-SO
- Chelsio T420-CX
- Chelsio T420-BT
- Chelsio T404-BT
that's a whole lotta part numbers and every single one of them is in the list. ate. π
π LOADER TUNABLES π
these tunables can be set at the loader(8) prompt before booting the kernel, or stored in loader.conf(5). pick your fighter, both are valid. β¨
hw.cxgbe.ntxqβ number of tx queues used for a port. the default is16or the number of CPU cores in the system, whichever is less.hw.cxgbe.nrxqβ number of rx queues used for a port. the default is8or the number of CPU cores in the system, whichever is less.hw.cxgbe.holdoff_timer_idxβ timer index value used to delay interrupts. the holdoff timer list has the values1,5,10,50,100, and200by default (all values are in microseconds) and the index selects a value from this list. the default value is1which means the timer value is5us. different interfaces can be assigned different values at any time via thedev.<port>.X.holdoff_tmr_idxsysctl.hw.cxgbe.holdoff_pktc_idxβ packet-count index value used to delay interrupts. the packet-count list has the values1,8,16, and32by default, and the index selects a value from this list. the default value is-1which means packet counting is disabled and interrupts are generated based solely on the holdoff timer value. different interfaces can be assigned different values via thedev.<port>.X.holdoff_pktc_idxsysctl. this sysctl works only when the interface has never been marked up (as done byifconfig up).hw.cxgbe.qsize_txqβ number of entries in a transmit queue's descriptor ring. abuf_ringof the same size is also allocated for additional software queuing. seeifnet(9). the default value is1024. different interfaces can be assigned different values via thedev.<port>.X.qsize_txqsysctl. this sysctl works only when the interface has never been marked up (as done byifconfig up).hw.cxgbe.qsize_rxqβ number of entries in a receive queue's descriptor ring. the default value is1024. different interfaces can be assigned different values via thedev.<port>.X.qsize_rxqsysctl. this sysctl works only when the interface has never been marked up (as done byifconfig up).hw.cxgbe.interrupt_typesβ permitted interrupt types. bit0represents INTx (line interrupts), bit1MSI, and bit2MSI-X. the default is7(all allowed). the driver selects the best possible type out of the allowed types. note that Virtual Functions do not support INTx interrupts and fail to attach if neither MSI nor MSI-X are enabled. πhw.cxgbe.fl_pktshiftβ number of padding bytes inserted before the beginning of an Ethernet frame in the receive buffer. the default value of2ensures that the Ethernet payload (usually the IP header) is at a 4 byte aligned address.0-7are all valid values.hw.cxgbe.fl_padβ a non-zero value ensures that writes from the hardware to a receive buffer are padded up to the specified boundary. the default is-1which lets the driver pick a pad boundary.0disables trailer padding completely.hw.cxgbe.buffer_packingβ allow the hardware to deliver multiple frames in the same receive buffer opportunistically. the default is-1which lets the driver decide.0or1explicitly disable or enable this feature.hw.cxgbe.allow_mbufs_in_clusterβ1allows the driver to lay down one or more mbufs within the receive buffer opportunistically. this is the default.0prohibits the driver from doing so.hw.cxgbe.largest_rx_cluster,hw.cxgbe.safest_rx_clusterβ sizes of rx clusters. each of these must be set to one of the sizes available (usually2048,4096,9216, and16384) andlargest_rx_clustermust be greater than or equal tosafest_rx_cluster. the defaults are16384and4096respectively. the driver never attempts to allocate a receive buffer larger thanlargest_rx_clusterand falls back to allocating buffers ofsafest_rx_clustersize if an allocation larger thansafest_rx_clusterfails. note thatlargest_rx_clustermerely establishes a ceiling β the driver is allowed to allocate buffers of smaller sizes.
π the VF / PF situationship (read this, fr fr)
certain settings and resources for Virtual Functions are dictated by the parent Physical Function driver. for example, the Physical Function driver limits the number of queues available to a Virtual Function. some of these limits can be adjusted in the firmware configuration file used with the Physical Function driver.
the PAUSE settings on the port of a Virtual Function are inherited from the settings of the same port on the Physical Function. Virtual Functions cannot modify the setting and track changes made to the associated port's setting by the Physical Function driver. so like, she's not in charge of her own PAUSE settings, the parent is, we don't make the rules π
Receive queues on a Virtual Function always drop packets in response to congestion (equivalent to setting hw.cxgbe.cong_drop to 1).
π heads up: the VF driver currently depends on the PF driver. as a result, loading the VF driver also loads the PF driver as a dependency. that's not a bug, that's just the relationship.
π SUPPORT π
for general information and support, go to the Chelsio support website at: http://www.chelsio.com/. π«Ά
if an issue is identified with this driver with a supported adapter, email all the specific information related to the issue to β¨support@chelsio.comβ©. be thorough bestie, they want the specific info, not just "it's broken" π
π SEE ALSO π
the whole friend group, honestly. go read them next. π
πΈ HISTORY πΈ
the cxgbev device driver first appeared in FreeBSD 11.1 and FreeBSD 11.1. (yes, it says it twice β that's the page, that's the lore, i don't make the rules β¨)
β AUTHORS β
the cxgbev driver was written by Navdeep Parhar <np@FreeBSD.org> and John Baldwin <jhb@FreeBSD.org>. legends, both of them, no notes. π₯
and that's the whole page bestie β this was CXGBEV(4) from the Kernel Interfaces Manual, coming to you from Debian, dated May 9, 2017. mwah, go configure your VFs responsibly π β¨
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- Copyright (c) 2011-2016, Chelsio Inc
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms