ツールで DDM を読む:CLI、ethtool、SNMP、OpenConfig
同じ A2h のバイト列は、スイッチの CLI、Linux の NIC、SNMP ポーラー、ストリーミングテレメトリのパイプライン、あるいはプログラマーで取得した生の hex ダンプなど、さまざまな経路から手元に届きます。このページはクックブックです。コマンド、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 # decoded identity + DDM (when the driver supports module EEPROM)
ethtool -m eth0 raw on hex on # raw dump: A0h at 0x0000–0x00ff, A2h at 0x0100–0x01ff (SFP)
ethtool -m eth0 hex on offset 256 length 128 # A2h lower page only
ethtool --show-fec eth0 # FEC mode
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 | HUAWEI-ENTITY-EXTENT-MIB の光学オブジェクト(Rx/Tx パワー、バイアス、温度) |
| MikroTik | MIKROTIK-MIB の mtxrOpticalTable(Rx/Tx パワー、温度、電圧、バイアス) |
オープンソースの NMS(LibreNMS、Zabbix テンプレート、Observium)はこれらを自動検出してグラフ化し、Prometheus は同じ OID を使う snmp_exporter を利用します。
ストリーミングテレメトリ(gNMI / OpenConfig)
openconfig-platform-transceiver は、モジュールを物理チャネルを持つコンポーネントとしてモデル化します。
/components/component[name=Ethernet1/1]/transceiver/state/… vendor, part, serial, form-factor
/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 を保持します。10–60 秒の SAMPLE モードで購読するのが一般的で、gnmic → Prometheus/InfluxDB → Grafana というパイプラインがよく使われます。ベンダー独自のモデル(Cisco、Juniper、Arista)も同じデータを自社のパスの下で公開し、通常は FEC カウンターとアラーム状態も追加します。
Windows とその他のホスト
Windows にはネイティブの DDM ツールがありません。NIC ベンダーのユーティリティ(サーバーアダプター向け)がモジュールデータを表示することもあります。対応するドライバーでは、FreeBSD は ifconfig <if> -v で SFP の識別情報と DDM を表示します。モジュールを読み取れないホストでは、ベンチが最後の手段になります。
ポーリング間隔とマナー
- モジュール監視項目は1秒間に数回更新されます。トレンド把握には1–5分間隔のポーリングで十分であり、2線バスへの負荷も抑えられます。
- 一部のプラットフォームは、すべてのモジュール読み取りを1つの管理 CPU で直列に処理します。数百ポートに対する積極的な SNMP ウォークは、遅延やタイムアウトを招くことがあります。
- ホストがポーリングしているバスでは、第2のマスター(プログラマークリップやインバンドツール)を絶対に動かさないでください(2線インターフェース)。
情報源を比較する
CLI、SNMP、テレメトリはすべて同じバイトを読み取っており、それらの間に生じる数十分の1 dB 程度の差はタイミングによるもので、誤差ではありません。ホストの読み値とベンチでの同一モジュールの読み値との差は、理解しておく価値があります。温度、Vcc、校正の扱いが数値を変えるからです(精度と限界)。
CodingBox では
CodingBox はベンチ側の入口です。DDM はデコード済みの監視項目とフラグを表示し、ワンクリックで EEPROM editor から生のバイト列を確認できます。CSV エクスポートは SNMP やテレメトリが供給するのと同じダッシュボードに取り込まれるため、モジュールには受入検査から廃棄まで1つの履歴が残ります(監視)。