EM(4)

πŸ“¦
version 15.1 Β· 2 versions
, in freebsd 15.1

✨ EM(4) ✨

okay bestie, listen up β€” this is the manual page for em, lem, and igb, aka the Intel(R) PRO/1000 Gigabit Ethernet adapter driver and honestly? it's giving networking royalty πŸ‘‘


🌸 SYNOPSIS 🌸

so if you wanna bake this driver into the kernel (permanent commitment energy πŸ’), you drop these lines in your kernel config file:

device iflib
device em

or if you're more of a "load it at boot like a little module" girlie, put this line in loader.conf(5):

if_em_load="YES"

πŸ’– DESCRIPTION πŸ’–

okay so the em driver is out here providing support for PCI/PCI-X Gigabit Ethernet adapters based on these Intel chips: 82540, 82541ER, 82541PI, 82542, 82543, 82544, 82545, 82546, 82546EB, 82546GB, and 82547. iconic lineup, no notes ✨

and that's not all β€” it also provides support for PCI Express Gigabit Ethernet adapters based on the Intel 82571, 82572, 82573, 82574, and 82583 Ethernet controller chips. we love a multi-chip serve πŸ’…

oh and it also provides support for Gigabit Ethernet adapters connected to I/O Controller Hub (ICH) and Platform Controller Hub (PCH), including: Intel 80003ES2LAN, 82562, 82566, 82567, 82577, 82578, 82579, i217, i218, and i219. the way it just keeps going?? main character energy fr fr 🌈

and one more for the road β€” it provides support for PCI Express Gigabit Ethernet adapters based on the Intel 82575, 82576, 82580, i210, i211, and i35x. these ones show up as igb interfaces, which is literally just to maintain compatibility with existing infrastructure (iykyk 🫢).

so what else does it do? it supports Transmit/Receive checksum offload and Jumbo Frames on all adapters β€” literally every single one β€” except the 82542-based ones. sorry 82542 girlies, you don't get jumbo frames 😭

and furthermore (yes we're still going) it supports TCP segmentation offload (TSO) on all adapters except those based on the 82542, 82543, 82544, and 82547 controller chips.

the identification LEDs of the adapters supported by the em driver? they can be controlled via the led(4) API for localization purposes β€” so you can literally make your server blink. for further hardware info, check the README that comes with the driver πŸ“–

got questions about hardware requirements? refer to the documentation that shipped with your Intel PRO/1000 adapter. all the hardware requirements listed there apply to use with FreeBSD πŸ’œ

Jumbo Frames are handled via the interface MTU setting. if you pick an MTU larger than 1500 bytes using the ifconfig(8) utility, the adapter gets configured to receive and transmit Jumbo Frames. and the maximum MTU size for Jumbo Frames is 16114 β€” that's the ceiling bestie, don't push it πŸŽ€

this driver supports hardware assisted VLANs. and the em driver supports these media types:

  • autoselect β€” enables auto-negotiation for speed and duplex, it just figures it out πŸ’…
  • 10baseT/UTP β€” sets 10Mbps operation. use the mediaopt option to pick full-duplex mode.
  • 100baseTX β€” sets 100Mbps operation. use the mediaopt option to pick full-duplex mode.
  • 1000baseSX β€” sets 1000Mbps operation. only full-duplex mode is supported at this speed.
  • 1000baseTX β€” sets 1000Mbps operation. only full-duplex mode is supported at this speed.

and the em driver supports these media options:

  • full-duplex β€” forces full-duplex operation πŸ”₯
  • half-duplex β€” forces half-duplex operation.
⚠️ okay important: only use mediaopt to set the driver to full-duplex. if mediaopt isn't specified, the driver defaults to half-duplex. periodt.

for more info on configuring this device, see ifconfig(8) πŸ¦‹


πŸŽ€ HARDWARE πŸŽ€

the em driver supports Gigabit Ethernet adapters based on the Intel 82540, 82541ER, 82541PI, 82542, 82543, 82544, 82545, 82546, 82546EB, 82546GB, 82547, 82571, 82572, 82573, 82574, 82575, 82576, and 82580 controller chips β€” and here's the full list, no cap:

  • Intel Gigabit ET Dual Port Server Adapter (82576)
  • Intel Gigabit VT Quad Port Server Adapter (82575)
  • Intel Single, Dual and Quad Gigabit Ethernet Controller (82580)
  • Intel i210 and i211 Gigabit Ethernet Controller
  • Intel i350 and i354 Gigabit Ethernet Controller
  • Intel PRO/1000 CT Network Connection (82547)
  • Intel PRO/1000 F Server Adapter (82543)
  • Intel PRO/1000 Gigabit Server Adapter (82542)
  • Intel PRO/1000 GT Desktop Adapter (82541PI)
  • Intel PRO/1000 MF Dual Port Server Adapter (82546)
  • Intel PRO/1000 MF Server Adapter (82545)
  • Intel PRO/1000 MF Server Adapter (LX) (82545)
  • Intel PRO/1000 MT Desktop Adapter (82540)
  • Intel PRO/1000 MT Desktop Adapter (82541)
  • Intel PRO/1000 MT Dual Port Server Adapter (82546)
  • Intel PRO/1000 MT Quad Port Server Adapter (82546EB)
  • Intel PRO/1000 MT Server Adapter (82545)
  • Intel PRO/1000 PF Dual Port Server Adapter (82571)
  • Intel PRO/1000 PF Quad Port Server Adapter (82571)
  • Intel PRO/1000 PF Server Adapter (82572)
  • Intel PRO/1000 PT Desktop Adapter (82572)
  • Intel PRO/1000 PT Dual Port Server Adapter (82571)
  • Intel PRO/1000 PT Quad Port Server Adapter (82571)
  • Intel PRO/1000 PT Server Adapter (82572)
  • Intel PRO/1000 T Desktop Adapter (82544)
  • Intel PRO/1000 T Server Adapter (82543)
  • Intel PRO/1000 XF Server Adapter (82544)
  • Intel PRO/1000 XT Server Adapter (82544)

that's the whole lineup bestie, every single one accounted for πŸ’–


🌟 LOADER TUNABLES 🌟

so these tunables can be set at the loader(8) prompt before booting the kernel, or you can just store them in loader.conf(5). and psst β€” see iflib(4) for per-instance variables πŸ‘€

  • hw.em.disable_crc_stripping β€” disable or enable hardware stripping of the CRC field. this is mostly useful on BMC/IPMI shared interfaces where stripping the CRC causes remote access over IPMI to fail. default is 0 (enabled).
  • hw.em.eee_setting β€” disable or enable Energy Efficient Ethernet. default is 1 (disabled).
  • hw.em.smart_pwr_down β€” enable or disable smart power down features on newer adapters. default is 0 (disabled).
  • hw.em.sbp β€” show bad packets when in promiscuous mode. default is 0 (off).
  • hw.em.rx_int_delay β€” this value delays the generation of receive interrupts in units of 1.024 microseconds. the default value is 0, because adapters may hang with this feature being enabled 😬 (yes, hang. be careful).
  • hw.em.rx_abs_int_delay β€” if hw.em.rx_int_delay is non-zero, this tunable limits the maximum delay in which a receive interrupt is generated.
  • hw.em.tx_int_delay β€” this value delays the generation of transmit interrupts in units of 1.024 microseconds. the default value is 64.
  • hw.em.tx_abs_int_delay β€” if hw.em.tx_int_delay is non-zero, this tunable limits the maximum delay in which a transmit interrupt is generated.
  • hw.em.max_interrupt_rate β€” maximum interrupts per second. the default value is 8000.
  • hw.em.rx_process_limit β€” maximum number of received packets to process at a time, -1 means unlimited. the default value is 100.

πŸ¦‹ FILES πŸ¦‹

  • /dev/led/em* β€” identification LED device nodes ✨

πŸ’œ EXAMPLES πŸ’œ

wanna make the identification LED of em0 blink? iconic. do this:

echo f2 > /dev/led/em0

and to turn the identification LED of em0 off again:

echo 0 > /dev/led/em0

πŸ”₯ DIAGNOSTICS πŸ”₯

  • em%d: Unable to allocate bus resource: memory β€” a fatal initialization error has occurred.
  • em%d: Unable to allocate bus resource: interrupt β€” a fatal initialization error has occurred.
  • em%d: watchdog timeout -- resetting β€” the device has stopped responding to the network, or there's a problem with the network connection (cable). check your cables bestie 😭

🌈 SUPPORT 🌈

for general info and support, go to the Intel support website at: http://support.intel.com.

if an issue is identified with the released source code on the supported kernel with a supported adapter, email the specific information related to the issue to ⟨freebsd@intel.com⟩ πŸ“§


⭐ SEE ALSO ⭐

altq(4), arp(4), iflib(4), led(4), netintro(4), ng_ether(4), polling(4), vlan(4), ifconfig(8)


πŸ‘‘ HISTORY πŸ‘‘

the em device driver first appeared in FreeBSD 4.4. and then em was merged with the lem and igb device drivers and converted to the iflib(4) framework in FreeBSD 12.0. glow-up era πŸ’…


🧚 AUTHORS 🧚

the em driver was originally written by Intel Corporation ⟨freebsd@intel.com⟩. it was merged with the igb driver and converted to the iflib(4) framework by Matthew Macy ⟨mmacy@mattmacy.io⟩ and Sean Bruno ⟨sbruno@FreeBSD.org⟩. legends only 🫢


πŸ’Œ okay that's the whole page bestie β€” courtesy of Debian, dated March 20, 2024, and this little EM(4) icon slays another day. go forth and network responsibly βœ¨πŸŽ€πŸ’–
πŸ“¦ where this page comes from
  • freebsd 15.1: base 15.1
  • πŸ“œ the page's license: BSD-3-Clause
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms