CodingBox ドキュメント

ツールで DDM を読む:CLI、ethtool、SNMP、OpenConfig

同じ A2h のバイト列は、スイッチの CLI、Linux の NIC、SNMP ポーラー、ストリーミングテレメトリのパイプライン、あるいはプログラマーで取得した生の hex ダンプなど、さまざまな経路から手元に届きます。このページはクックブックです。コマンド、OID とパス、そして目の前のツールがデコードしてくれないときに生ダンプを手作業でデコードする方法をまとめます。

スイッチとルーターの CLI

プラットフォームDDM コマンド備考
Cisco IOS / IOS-XEshow interfaces transceiver detailしきい値も値と並べて表示される。識別情報には show idprom interface
Cisco NX-OSshow interface ethernet1/1 transceiver detailsQSFP はレーンごとに表示
Cisco IOS-XRshow controllers optics 0/0/0/0アラームとレーンテーブルを含む
Juniper Junosshow interfaces diagnostics optics xe-0/0/0しきい値とアラーム状態を含む
Arista EOSshow interfaces ethernet 1 transceiver dom… transceiver detail でしきい値も追加表示
Huawei VRPdisplay transceiver interface XGigabitEthernet0/0/1 verbose
MikroTik RouterOS/interface ethernet monitor sfp1sfp-temperaturesfp-tx-powersfp-rx-powersfp-tx-bias-current
Dell OS10show interface ethernet 1/1/1 transceiver
NVIDIA Cumulus / Onyxl1-show swp1 / show interfaces ethernet 1/1 transceiverモジュールの詳細には mlxlink -d <dev> -p <port> -m
SONiCshow interfaces transceiver eeprom -d Ethernet0sfputil 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(符号付き)÷ 25626.5 °C
98–99 Vcc80 E8 = 33000× 100 µV3.300 V
100–101 Tx バイアス1B 58 = 7000× 2 µA14.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意味
entPhySensorType1.3.6.1.2.1.99.1.1.1.14 voltsDC、5 amperes、8 celsius、14 dBm
entPhySensorScale1.3.6.1.2.1.99.1.1.1.28 = units、7 = milli、6 = micro…
entPhySensorPrecision1.3.6.1.2.1.99.1.1.1.3値の小数点以下の桁数
entPhySensorValue1.3.6.1.2.1.99.1.1.1.4測定値
entPhySensorOperStatus1.3.6.1.2.1.99.1.1.1.51 ok、2 unavailable、3 nonoperational

センサーのインデックスは、ENTITY-MIB(entPhysicalDescrentPhysicalContainedIn)を通じてポートに対応付けられます。タイプ 14(dBm)、スケール 8、精度 2、値 −1234 は −12.34 dBm を意味します。

ベンダー MIB

ベンダーMIB/オブジェクト例
CiscoCISCO-ENTITY-SENSOR-MIB の entSensorValue(1.3.6.1.4.1.9.9.91.1.1.1.1.4)、しきい値は entSensorThresholdTable
JuniperJUNIPER-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 のみ
HuaweiHUAWEI-ENTITY-EXTENT-MIB の光学オブジェクト(Rx/Tx パワー、バイアス、温度)
MikroTikMIKROTIK-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

各リーフは、サンプリング間隔にわたって instantavgminmax を保持します。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つの履歴が残ります(監視)。


この記事に不正確な点や誤りを見つけた場合は、該当する箇所を選択して Ctrl+Enter を押すと、できます。