NIC tools and diagnostics: reading a module from the server
A server has no show interface transceiver, but it has the same information one layer down: the NIC driver reads the module EEPROM and exposes it through ethtool, vendor utilities and, on Windows and ESXi, through their own commands. This page lists the tools per OS and vendor, what each shows (identity, DDM, FEC counters, link state, PCIe), and how to interpret the output when a link is down or errors accumulate.
| Command | Shows |
|---|
ethtool eth0 | link state, speed, duplex, auto-negotiation, supported/advertised modes, port type (FIBRE/DA) |
ethtool -m eth0 (--module-info) | decoded EEPROM: identifier, vendor, PN, SN, date, compliance, wavelength, lengths; DDM (temperature, Vcc, bias, Tx/Rx power, thresholds, alarm flags) if the module has it |
ethtool -m eth0 raw on hex on | raw A0h (and A2h) dump for byte-level comparison (Memory map) |
ethtool -m eth0 page 0x11 … (newer) | CMIS pages on 400G+ modules |
ethtool -i eth0 | driver, version, firmware/NVM version, bus address |
ethtool -S eth0 | statistics incl. CRC errors, FEC corrected/uncorrected on some drivers |
ethtool --show-fec eth0 / --set-fec eth0 encoding rs | FEC mode configured and active |
ethtool -s eth0 speed 25000 duplex full autoneg off | force speed |
ethtool -p eth0 5 | blink port LED to identify the port |
ethtool --show-priv-flags eth0 | driver-specific flags (e.g. link-down-on-close) |
Other Linux sources: dmesg filtered for sfp, module and link (driver messages about module qualification), lspci -vv -s <addr> (PCIe link width/speed under LnkSta), ip -s link show eth0 (counters), /sys/class/net/eth0/ (carrier, speed).
| Vendor | Tool | Key uses |
|---|
| Nvidia / Mellanox | mlxlink -d <pci> -m -e -c | module info and DDM (-m), eye/BER and FEC (-e, -c), link partner; mlxlink … --fec_override, --speeds |
| Nvidia / Mellanox | mlxconfig -d <pci> q / set | port type (IB/ETH), link type, KEEP_ETH_LINK_UP, FEC override, breakout |
| Nvidia / Mellanox | mst status, mlxfwmanager | device list, firmware |
| Nvidia / Mellanox | ibstat, ibportstate, iblinkinfo | InfiniBand port state, width, speed (IB fabric) |
| Intel | ethtool -m | primary; Intel has no dedicated module dump tool |
| Intel | nvmupdate64e, epct64e | NVM firmware update; port configuration (E810 port options, e.g. 2×100G vs 4×25G) |
| Intel | dmesg | ixgbe/i40e/ice: unsupported module messages (Optics compatibility) |
| Broadcom | bnxtnvm, niccli | NVM, port settings, FEC/AN, transceiver info |
| Marvell | qedctl | — |
| AMD Solarflare | sfupdate, sfboot | firmware, port modes |
| Chelsio | cxgbtool | — |
Windows
| Command | Shows |
|---|
Get-NetAdapter | link state, speed |
Get-NetAdapterAdvancedProperty -Name "Ethernet 2" | speed/duplex, FEC mode, jumbo — settable with Set-NetAdapterAdvancedProperty |
Get-NetAdapterHardwareInfo | PCIe slot, link width/speed |
Get-NetAdapterStatistics | counters |
Intel PROSet: Get-IntelNetAdapter, Get-IntelNetAdapterSetting | Intel-specific settings; module info in Device Manager → Link Speed tab |
Nvidia WinOF-2: mlx5cmd -Stat, mlxlink (Windows build) | module info and link diagnostics |
| Event Viewer → System | driver messages about unsupported modules |
Windows drivers rarely expose DDM; use vendor tools or read the module on the bench.
VMware ESXi
| Command | Shows |
|---|
esxcli network nic list / get -n vmnic0 | link, speed, driver, firmware |
esxcli network nic stats get -n vmnic0 | counters |
esxcli system module parameters list -m ixgben / set -m ixgben -p "…" | driver parameters where supported |
esxcli intnet … (Intel plugin), esxcli mellanox … / mlxlink (Nvidia plugin) | vendor diagnostics incl. module info |
vmkernel.log | "unsupported module", link flaps |
esxcli hardware pci list | PCIe link status |
Reading the output
| Observation | Meaning | Next |
|---|
ethtool -m: "Cannot get module EEPROM information: Operation not supported" | driver does not expose it, port has no module, or module I²C not answering | check dmesg, reseat, try another port (Read & write errors) |
Identity readable, Link detected: no, Rx power normal | speed/FEC/AN mismatch | ethtool --show-fec, compare with switch (FEC & AN) |
| Rx power −40 dBm / "-inf" | no light | fibre, far end, polarity (No link) |
| Bias and Tx power fine, Rx marginal | dirty connector, long link | clean, budget (Rx power & budget) |
| FEC uncorrectable counters rising | link at the edge | DDM levels, cable class, temperature (VDM & FEC metrics) |
| Temperature > 70 °C in a 1U server | airflow | reposition, OCP slot (Ports & PCIe) |
LnkSta: Speed 8GT/s, Width x8 on a 2×100G card | PCIe bottleneck | slot/bifurcation |
dmesg: unsupported module | driver whitelist | Optics compatibility on NICs |
Monitoring from the server
ethtool -m output is parseable; a cron job or a node exporter with the ethtool collector exports DDM to Prometheus-style monitoring (Monitoring).- Nvidia
mlxlink JSON output (--json) and Intel ethtool -S FEC counters make good pre-failure signals (Link reliability & monitoring). - Poll intervals of 30–60 s are enough; DDM itself updates every second at best.
In CodingBox
ethtool -m raw on hex on and CodingBox read the same bytes: when a module behaves differently on a NIC and on the bench, compare the two dumps field by field — a driver that rewrites nothing will show identical data, and any difference points at the module's own dynamic pages or at a reading error (Check transceiver, Reading DDM with tools).