用工具读取 DDM:CLI、ethtool、SNMP、OpenConfig
同样的 A2h 字节可以通过许多途径到达你手中:交换机 CLI、Linux 网卡、SNMP 轮询器、流式遥测管道,或者编程器给出的原始十六进制转储。本文是一份操作手册:列出命令、OID 和路径,并说明当手边的工具不做解码时,如何手动解析一份原始转储。
交换机与路由器 CLI
| 平台 | DDM 命令 | 说明 |
|---|---|---|
| Cisco IOS / IOS-XE | show interfaces transceiver detail | 阈值与数值一并显示;识别信息用 show idprom interface |
| Cisco NX-OS | show interface ethernet1/1 transceiver details | QSFP 按通道显示 |
| Cisco IOS-XR | show controllers optics 0/0/0/0 | 包含告警和通道表 |
| Juniper Junos | show interfaces diagnostics optics xe-0/0/0 | 包含阈值和告警状态 |
| Arista EOS | show interfaces ethernet 1 transceiver dom | … transceiver detail 会加上阈值 |
| Huawei VRP | display transceiver interface XGigabitEthernet0/0/1 verbose | — |
| MikroTik RouterOS | /interface ethernet monitor sfp1 | sfp-temperature、sfp-tx-power、sfp-rx-power、sfp-tx-bias-current |
| Dell OS10 | show interface ethernet 1/1/1 transceiver | — |
| NVIDIA Cumulus / Onyx | l1-show swp1 / show interfaces ethernet 1/1 transceiver | 模块详情用 mlxlink -d <dev> -p <port> -m |
| SONiC | show interfaces transceiver eeprom -d Ethernet0 | sfputil show eeprom -d;… presence、… lpmode |
面向身份信息的对应命令及应关注的内容,参见 在交换机上验证光模块。
Linux:ethtool
ethtool -m eth0 # 解码后的身份信息 + DDM(当驱动支持模块 EEPROM 时)
ethtool -m eth0 raw on hex on # 原始转储:A0h 位于 0x0000–0x00ff,A2h 位于 0x0100–0x01ff(SFP)
ethtool -m eth0 hex on offset 256 length 128 # 仅 A2h 低位页
ethtool --show-fec eth0 # FEC 模式
ethtool -S eth0 | grep -i fec # fec_corrected_blocks / fec_uncorrectable_blocks
对 QSFP/CMIS 模块,转储内容遵循驱动程序暴露的分页结构(低位页、高位页 00h,然后是页 01h/02h/03h/10h/11h,视驱动支持而定)。ethtool 能完整解码 SFF-8472 和 SFF-8636,对 CMIS 则视内核版本部分解码。
手动解码原始 A2h 转储
在 ethtool -m … raw on hex on 的转储中,A2h 的低位页位于偏移量 0x0100。实时监测量从 A2h 字节 96 开始,对应转储偏移量 0x0160:
0x0160: 1a 80 80 e8 1b 58 0f a0 03 e8 ...
└─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘ └─┬─┘
temp Vcc bias Tx Rx
| 字节 | 原始值 | 换算 | 数值 |
|---|---|---|---|
| 96–97 温度 | 1A 80 = 6784(有符号) | ÷ 256 | 26.5 °C |
| 98–99 Vcc | 80 E8 = 33000 | × 100 µV | 3.300 V |
| 100–101 Tx 偏置电流 | 1B 58 = 7000 | × 2 µA | 14.0 mA |
| 102–103 Tx 功率 | 0F A0 = 4000 | × 0.1 µW = 400 µW;10·log10(0.400) | −3.98 dBm |
| 104–105 Rx 功率 | 03 E8 = 1000 | × 0.1 µW = 100 µW | −10.0 dBm |
这些换算假定为内部校准(A0h 字节 92 位 5);若为外部校准,需先套用 A2h 56–91 的常数(参见校准)。阈值位于 A2h 0–39,格式相同;状态/控制和标志位位于 110–117(参见阈值与告警)。 QSFP:模块级监测量位于低位页字节 22–27,通道级监测量位于 34–57;CMIS:低位页 14–25 和页 11h 154–201(参见分通道诊断)。
SNMP
标准:ENTITY-SENSOR-MIB(RFC 3433)
大多数平台把每个 DDM 数值都暴露为一个物理传感器:
| 对象 | OID | 含义 |
|---|---|---|
| entPhySensorType | 1.3.6.1.2.1.99.1.1.1.1 | 4 = voltsDC,5 = amperes,8 = celsius,14 = dBm |
| entPhySensorScale | 1.3.6.1.2.1.99.1.1.1.2 | 8 = units,7 = milli,6 = micro… |
| entPhySensorPrecision | 1.3.6.1.2.1.99.1.1.1.3 | 数值的小数位数 |
| entPhySensorValue | 1.3.6.1.2.1.99.1.1.1.4 | 读数本身 |
| entPhySensorOperStatus | 1.3.6.1.2.1.99.1.1.1.5 | 1 = ok,2 = unavailable,3 = nonoperational |
传感器的索引通过 ENTITY-MIB(entPhysicalDescr、entPhysicalContainedIn)映射到具体端口。类型为 14(dBm)、量程为 8、精度为 2、数值为 −1234,表示 −12.34 dBm。
厂商 MIB
| 厂商 | MIB / 示例对象 |
|---|---|
| Cisco | CISCO-ENTITY-SENSOR-MIB 的 entSensorValue(1.3.6.1.4.1.9.9.91.1.1.1.1.4),阈值在 entSensorThresholdTable 中 |
| Juniper | JUNIPER-DOM-MIB:jnxDomCurrentRxLaserPower(…2636.3.60.1.1.1.1.5,0.01 dBm)、jnxDomCurrentTxLaserBiasCurrent(.6)、jnxDomCurrentTxLaserOutputPower(.7)、jnxDomCurrentModuleTemperature(.8) |
| Arista、Dell 及其他许多厂商 | 仅 ENTITY-SENSOR-MIB |
| 华为 | HUAWEI-ENTITY-EXTENT-MIB 的光学对象(Rx/Tx 功率、偏置电流、温度) |
| MikroTik | MIKROTIK-MIB 的 mtxrOpticalTable(Rx/Tx 功率、温度、电压、偏置电流) |
开源 NMS(LibreNMS、Zabbix 模板、Observium)能自动发现这些对象并绘制曲线;Prometheus 使用 snmp_exporter 配合相同的 OID。
流式遥测(gNMI / OpenConfig)
openconfig-platform-transceiver 把模块建模为一个带有物理通道的组件:
/components/component[name=Ethernet1/1]/transceiver/state/… 厂商、型号、序列号、封装形式
/components/component[name=…]/transceiver/physical-channels/channel[index=0]/state/input-power/instant
/components/component[name=…]/transceiver/physical-channels/channel[index=0]/state/output-power/instant
/components/component[name=…]/transceiver/physical-channels/channel[index=0]/state/laser-bias-current/instant
/components/component[name=…]/state/temperature/instant
每个叶子节点在采样周期内都带有 instant、avg、min、max。以 SAMPLE 模式按 10–60 s 订阅;常见流程是 gnmic → Prometheus/InfluxDB → Grafana。厂商私有模型(Cisco、Juniper、 Arista)在各自的路径下暴露相同数据,通常还会加上 FEC 计数器和告警状态。
Windows 及其他主机
Windows 没有原生的 DDM 工具;网卡厂商自带的工具(服务器网卡)有时能显示模块数据。FreeBSD 在受支持的驱动上可以用 ifconfig <if> -v 显示 SFP 身份信息和 DDM。主机无法读取模块时,工作台就是备用方案。
轮询频率与注意事项
- 模块监测量每秒刷新若干次;每 1–5 分钟轮询一次,既足以做趋势分析,也不会给两线总线造成负担。
- 部分平台把所有模块读取都串行化到一颗管理 CPU 上,对数百个端口做高强度的 SNMP walk 可能导致变慢或超时。
- 主机正在轮询的总线上,绝不要再运行第二个主设备(编程器夹具、带内工具)(参见 双线接口)。
比较不同来源
CLI、SNMP 和遥测读取的都是同一批字节;它们之间几分之一 dB 的差异来自采样时刻不同,而不是误差。同一模块在主机上的读数与工作台读数之间的差异值得弄清楚:温度、Vcc 和校准处理方式都会影响数值(参见精度与局限)。
CodingBox 中的呈现
CodingBox 是工作台一侧的入口:DDM 显示解码后的监测量和标志位,点一下就能在 EEPROM editor 中看到原始字节,CSV 导出又能接入消费 SNMP 或遥测数据的同一套仪表盘,这样一个模块从来料检验到退役就只有一份历史记录(参见 监测)。