Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
BXE(4)                 FreeBSD Kernel Interfaces Manual                 BXE(4)

     bxe - QLogic NetXtreme II Ethernet 10Gb PCIe adapter driver

     To compile this driver into the kernel, place the following lines in your
     kernel configuration file:

           device bxe

     Alternatively, to load the driver as a module at boot time, place the
     following line in loader.conf(5):


     The bxe driver provides support for PCIe 10Gb Ethernet adapters based on
     the QLogic NetXtreme II family of 10Gb chips.  The driver supports Jumbo
     Frames, VLAN tagging, checksum offload (IPv4, TCP, UDP, IPv6-TCP,
     IPv6-UDP), MSI-X interrupts, TCP Segmentation Offload (TSO), Large
     Receive Offload (LRO), and Receive Side Scaling (RSS).

     The bxe driver provides support for various NICs based on the QLogic
     NetXtreme II family of 10Gb Ethernet controller chips, including the

     +o   QLogic NetXtreme II BCM57710 10Gb
     +o   QLogic NetXtreme II BCM57711 10Gb
     +o   QLogic NetXtreme II BCM57711E 10Gb
     +o   QLogic NetXtreme II BCM57712 10Gb
     +o   QLogic NetXtreme II BCM57712-MF 10Gb
     +o   QLogic NetXtreme II BCM57800 10Gb
     +o   QLogic NetXtreme II BCM57800-MF 10Gb
     +o   QLogic NetXtreme II BCM57810 10Gb
     +o   QLogic NetXtreme II BCM57810-MF 10Gb
     +o   QLogic NetXtreme II BCM57840 10Gb / 20Gb
     +o   QLogic NetXtreme II BCM57840-MF 10Gb

     There a number of configuration parameters that can be set to tweak the
     driver's behavior.  These parameters can be set via the loader.conf(5)
     file to take affect during the next system boot.  The following
     parameters affect ALL instances of the driver.

             DEFAULT = 0
             Sets the default logging level of the driver.  See the
             Diagnostics and Debugging section below for more details.

             DEFAULT = 2
             Sets the default interrupt mode: 0=IRQ, 1=MSI, 2=MSIX.  If set to
             MSIX and allocation fails, the driver will roll back and attempt
             MSI allocation.  If MSI allocation fails, the driver will roll
             back and attempt fixed level IRQ allocation.  If IRQ allocation
             fails, then the driver load fails.  With MSI/MSIX, the driver
             attempts to allocate a vector for each queue in addition to one
             more for default processing.

             DEFAULT = 4
             Sets the default number of fast path packet processing queues.
             Note that one MSI/MSIX interrupt vector is allocated per-queue.

             DEFAULT = 0
             Sets the maximum number of receive buffers to allocate per-queue.
             Zero(0) means to allocate a receive buffer for every buffer
             descriptor.  By default this equates to 4080 buffers per-queue
             which is the maximum value for this config parameter.

             DEFAULT = 25
             Sets the number of ticks for host interrupt coalescing in the
             receive path.

             DEFAULT = 50
             Sets the number of ticks for host interrupt coalescing in the
             transmit path.

             DEFAULT = 0xffffffff
             Sets the maximum number of receive packets to process in an
             interrupt.  If the budget is reached then the remaining/pending
             packets will be processed in a scheduled taskqueue.

             DEFAULT = 32768
             Sets the maximum LRO aggregration byte size.  The higher the
             value the more packets the hardware will aggregate.  Maximum is

             DEFAULT = -1
             Sets the PCI MRRS: -1=Auto, 0=128B, 1=256B, 2=512B, 3=1KB

             DEFAULT = 0
             Set AutoGrEEEN: 0=HW_DEFAULT, 1=FORCE_ON, 2=FORCE_OFF

             DEFAULT = 0
             Enable/Disable 4-tuple RSS for UDP: 0=DISABLED, 1=ENABLED

     Special care must be taken when modifying the number of queues and
     receive buffers.  FreeBSD imposes a limit on the maximum number of
     mbuf(9) allocations.  If buffer allocations fail, the interface
     initialization will fail and the interface will not be usable.  The
     driver does not make a best effort for buffer allocations.  It is an all
     or nothing effort.

     You can tweak the mbuf(9) allocation limit using sysctl(8) and view the
     current usage with netstat(1) as follows:

           # netstat -m
           # sysctl kern.ipc.nmbclusters
           # sysctl kern.ipc.nmbclusters=<#>

     There are additional configuration parameters that can be set on a per-
     instance basis to dynamically override the default configuration.  The
     '#' below must be replaced with the driver instance / interface unit

             DEFAULT = 0
             Sets the default logging level of the driver instance.  See
             hw.bxe.debug above and the Diagnostics and Debugging section
             below for more details.

             DEFAULT = 0xffffffff
             Sets the maximum number of receive packets to process in an
             interrupt for the driver instance.  See hw.bxe.rx_budget above
             for more details.

     Additional items can be configured using ifconfig(8):

     MTU - Maximum Transmission Unit
             DEFAULT = 1500
             RANGE = 46-9184
             # ifconfig bxe# mtu <n>

     Promiscuous Mode
             DEFAULT = OFF
             # ifconfig bxe# [ promisc | -promisc ]

     Rx/Tx Checksum Offload
             DEFAULT = RX/TX CSUM ON
             Note that the Rx and Tx settings are not independent.
             # ifconfig bxe# [ rxcsum | -rxcsum | txcsum | -txcsum ]

     TSO - TCP Segmentation Offload
             DEFAULT = ON
             # ifconfig bxe# [ tso | -tso | tso6 | -tso6 ]

     LRO - TCP Large Receive Offload
             DEFAULT = ON
             # ifconfig bxe# [ lro | -lro ]

     There are many statistics exposed by bxe via sysctl(8).

     To dump the default driver configuration:

           # sysctl -a | grep hw.bxe

     To dump every instance's configuration and detailed statistics:

           # sysctl -a | grep dev.bxe

     To dump information for a single instance (replace the '#' with the
     driver instance / interface unit number):

           # sysctl -a | grep dev.bxe.#

     To dump information for all the queues of a single instance:

           # sysctl -a | grep dev.bxe.#.queue

     To dump information for a single queue of a single instance (replace the
     additional '#' with the queue number):

           # sysctl -a | grep dev.bxe.#.queue.#

     The bxe driver has the ability to dump a ton of debug messages to the
     system log.  The default level of logging can be set with the
     hw.bxe.debug sysctl(8).  Take care with this setting as it can result in
     too many logs being dumped.  Since this parameter is the default one, it
     affects every instance and will dramatically change the timing in the
     driver.  A better alternative to aid in debugging is to dynamically
     change the debug level of a specific instance with the dev.bxe.#.debug
     sysctl(8).  This allows you to turn on/off logging of various debug
     groups on-the-fly.

     The different debug groups that can be toggled are:

           DBG_LOAD   0x00000001 /* load and unload    */
           DBG_INTR   0x00000002 /* interrupt handling */
           DBG_SP     0x00000004 /* slowpath handling  */
           DBG_STATS  0x00000008 /* stats updates      */
           DBG_TX     0x00000010 /* packet transmit    */
           DBG_RX     0x00000020 /* packet receive     */
           DBG_PHY    0x00000040 /* phy/link handling  */
           DBG_IOCTL  0x00000080 /* ioctl handling     */
           DBG_MBUF   0x00000100 /* dumping mbuf info  */
           DBG_REGS   0x00000200 /* register access    */
           DBG_LRO    0x00000400 /* lro processing     */
           DBG_ASSERT 0x80000000 /* debug assert       */
           DBG_ALL    0xFFFFFFFF /* flying monkeys     */

     For example, to debug an issue in the receive path on bxe0:

           # sysctl dev.bxe.0.debug=0x22

     When finished turn the logging back off:

           # sysctl dev.bxe.0.debug=0

     For support questions please contact your QLogic approved reseller or
     QLogic Technical Support at, or by E-mail at

     netstat(1), altq(4), arp(4), netintro(4), ng_ether(4), vlan(4),

     The bxe device driver first appeared in FreeBSD 9.0.

     The bxe driver was written by Eric Davis <>,
     David Christensen <>, and
     Gary Zambrano <>.

FreeBSD 11.0-PRERELEASE         April 29, 2012         FreeBSD 11.0-PRERELEASE


Want to link to this manual page? Use this URL:

home | help