도구로 DDM 읽기: CLI, ethtool, SNMP, OpenConfig
동일한 A2h 바이트라도 도달하는 경로는 다양합니다: 스위치 CLI, Linux NIC, SNMP 폴러, 스트리밍 텔레메트리 파이프라인, 또는 프로그래머에서 뽑은 원시 16진수 덤프. 이 페이지는 실전 안내서입니다 — 명령어, 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
각 leaf는 샘플링 주기 동안 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–5분 간격의 폴링이면 추세 파악에 충분하고 2선식 버스에도 부담이 적습니다.
- 일부 플랫폼은 모든 모듈 읽기를 하나의 관리 CPU에서 순차 처리하므로, 수백 개 포트를 공격적으로 SNMP 워크하면 느려지거나 타임아웃이 발생할 수 있습니다.
- 호스트가 폴링 중인 버스에서 두 번째 마스터(프로그래머 클립, 인밴드 도구)를 절대 실행하지 마십시오(2선식 인터페이스).
출처 비교
CLI, SNMP, 텔레메트리는 모두 동일한 바이트를 읽으므로 이들 사이의 수 십분의 1 dB 차이는 오차가 아니라 타이밍 때문입니다. 동일한 모듈에 대한 호스트 판독값과 벤치 판독값의 차이는 짚어볼 가치가 있습니다: 온도, Vcc, 교정 처리 방식이 수치를 바꿉니다(정확도와 한계).
CodingBox에서
CodingBox는 벤치 쪽 관문입니다: DDM이 디코딩된 모니터와 플래그를 보여주며, 원시 바이트는 클릭 한 번으로 EEPROM editor에서 확인할 수 있고, CSV 내보내기는 SNMP나 텔레메트리가 사용하는 것과 동일한 대시보드에 값을 공급합니다 — 그래서 모듈은 입고 검사부터 폐기까지 하나의 이력을 갖습니다(모니터링).