MIIBUS(4)

πŸ’– MIIBUS(4) β€” the Kernel Interfaces Manual page, but make it cute πŸ’–

okay bestie, gather round, because today we're talking about miibus β€” that's IEEE 802.3 Media Independent Interface network bus, in case you were wondering what the acronym was serving. no cap, this little guy is the whole reason your NIC even knows what speed it's running at. πŸ¦‹


✨ SYNOPSIS ✨

for most network interface cards (NIC), it's literally just:

device miibus

that's it. one line. iconic. πŸ’…


🌸 DESCRIPTION 🌸

so the miibus driver is the middleman of the networking world β€” it provides an interconnection between the Media Access Control (MAC) sublayer, the Physical Layer entities (PHY), Station Management (STA) entities, and the PHY Layer as defined by the IEEE 802.3 Standard. it's giving glue code, but make it glamorous. ✨

the miibus layer is what lets network device drivers share common support code for all the various external PHY devices out there. most 10/100 network interface cards either use an MII transceiver or have built-in transceivers that can be programmed using an MII interface. and the miibus driver currently handles all of the media detection, selection, and reporting using the ifmedia interface. like, all of it. she does it all. πŸ‘‘

also there's a generic driver included for all PHYs that aren't handled by a specific driver β€” and the reason that's even possible is because all 10/100 PHYs implement the same general register set along with their vendor specific register set. so like, they all speak the same language, they just have accents. 🫢

the following network device drivers use the miibus interface β€” roll call, everybody say hi:

  • ae(4) β€” Attansic/Atheros L2 Fast Ethernet
  • age(4) β€” Attansic/Atheros L1 Gigabit Ethernet
  • alc(4) β€” Atheros AR8131/AR8132 PCIe Ethernet
  • ale(4) β€” Atheros AR8121/AR8113/AR8114 PCIe Ethernet
  • aue(4) β€” ADMtek USB Ethernet
  • axe(4) β€” ASIX Electronics AX88172 USB Ethernet
  • axge(4) β€” ASIX Electronics AX88178A/AX88179 USB Ethernet
  • bce(4) β€” Broadcom NetXtreme II Gigabit Ethernet
  • bfe(4) β€” Broadcom BCM4401 Ethernet
  • bge(4) β€” Broadcom BCM570xx Gigabit Ethernet
  • cas(4) β€” Sun Cassini/Cassini+ and National Semiconductor DP83065 Saturn
  • dc(4) β€” DEC/Intel 21143 and various workalikes
  • ed(4) β€” NE[12]000, SMC Ultra, 3c503, DS8390 cards
  • et(4) β€” Agere ET1310 Gigabit Ethernet
  • fxp(4) β€” Intel EtherExpress PRO/100B
  • gem(4) β€” Sun ERI, Sun GEM and Apple GMAC Ethernet
  • hme(4) β€” Sun HME Ethernet
  • jme(4) β€” JMicron JMC250 Gigabit/JMC260 Fast Ethernet
  • lge(4) β€” Level 1 LXT1001 NetCellerator Gigabit Ethernet
  • msk(4) β€” Marvell/SysKonnect Yukon II Gigabit Ethernet
  • nfe(4) β€” NVIDIA nForce MCP Networking Adapter
  • nge(4) β€” National Semiconductor DP83820/DP83821 Gigabit Ethernet
  • pcn(4) β€” AMD Am79C97x PCI 10/100
  • re(4) β€” RealTek 8139C+/8169/8169S/8110S
  • rl(4) β€” RealTek 8129/8139
  • rue(4) β€” RealTek RTL8150 USB To Fast Ethernet
  • sf(4) β€” Adaptec AIC-6915
  • sge(4) β€” Silicon Integrated Systems SiS190/191 Ethernet
  • sis(4) β€” Silicon Integrated Systems SiS 900/SiS 7016
  • sk(4) β€” SysKonnect SK-984x and SK-982x Gigabit Ethernet
  • smsc(4) β€” SMSC LAN9xxx USB Fast Ethernet
  • ste(4) β€” Sundance ST201 (D-Link DFE-550TX)
  • stge(4) β€” Sundance/Tamarack TC9021 Gigabit Ethernet
  • tl(4) β€” Texas Instruments ThunderLAN
  • tx(4) β€” SMC EtherPower II (83c170)
  • udav(4) β€” Davicom DM9601 USB Ethernet
  • ure(4) β€” RealTek RTL8152 USB To Fast Ethernet
  • vge(4) β€” VIA VT612x PCI Gigabit Ethernet
  • vr(4) β€” VIA Rhine, Rhine II
  • vte(4) β€” DM&P Vortex86 RDC R6040 Fast Ethernet
  • wb(4) β€” Winbond W89C840F
  • xl(4) β€” 3Com 3c90x

look at that list. that's a whole friend group. 🌈


πŸŽ€ COMPATIBILITY πŸŽ€

ngl, the implementation of miibus was originally intended to have similar API interfaces to BSD/OS 3.0 and NetBSD, but as a result, they are not well behaved newbus device drivers. that's not me being mean, that's just what the page says. it's a canon event. 😭


πŸ¦‹ SEE ALSO πŸ¦‹

go read these, bestie, they're all connected:

ae(4), age(4), alc(4), ale(4), arp(4), aue(4), axe(4), axge(4), bce(4), bfe(4), bge(4), cas(4), dc(4), ed(4), et(4), fxp(4), gem(4), hme(4), jme(4), lge(4), msk(4), netintro(4), nfe(4), nge(4), pcn(4), re(4), rgephy(4), rl(4), rue(4), sf(4), sge(4), sis(4), sk(4), smsc(4), ste(4), stge(4), tl(4), tx(4), udav(4), ure(4), vge(4), vr(4), vte(4), wb(4), xl(4)

(and yes, rgephy(4) and netintro(4) are in there even though they weren't in the big list above β€” they're in the SEE ALSO, and I would never leave them out. ✨)


⭐ STANDARDS ⭐

want more info on MII? more information on MII can be found in the IEEE 802.3 Standard. that's the source, periodt. πŸ“š


πŸ’œ HISTORY πŸ’œ

the miibus driver first appeared in FreeBSD 3.3. she's been around a while and she's still serving. πŸ‘‘


🌸 AUTHORS 🌸

this manual page was written by Tom Rhodes <trhodes@FreeBSD.org>. thank you Tom, you ate. 🫢


and that's the whole vibe check bestie β€” Debian, December 1, 2015, MIIBUS(4). mwah. πŸ’‹

πŸ“¦ where this page comes from