コンテンツにスキップ

Runbook: Port が admin up なのに oper down のまま

HLD-only

portsorch / xcvrd / SAI の標準動作に基づく運用ノート。

症状

  • show interface status Ethernet0Admin = up だが Oper = down
  • config interface startup Ethernet0 を発行しても変化なし
  • 対向ポートは別の機器で問題なく動作する

切り分けフロー

flowchart TD
    A[admin up / oper down] --> B{xcvr presence?}
    B -- No --> C[SFP / DAC を抜き差し、sfputil presence]
    B -- Yes --> D{autoneg / speed / FEC が一致?}
    D -- No --> E[asic-link-autoneg-mismatch.md]
    D -- Yes --> F{ASIC_DB の oper_status?}
    F -- down --> G[SAI / driver / lane 設定確認]
    F -- up --> H[Linux kernel netdev / interface_relations 確認]

確認コマンド

# Admin/Oper、speed、FEC、type を一括
show interface status Ethernet0

# Transceiver の有無 / EEPROM
sudo sfputil show presence -p Ethernet0
sudo sfputil show eeprom -p Ethernet0 | head -40

# APPL_DB / ASIC_DB
sonic-db-cli APPL_DB hgetall "PORT_TABLE:Ethernet0"
sonic-db-cli ASIC_DB keys "ASIC_STATE:SAI_OBJECT_TYPE_PORT:*" | head
sonic-db-cli STATE_DB hgetall "PORT_TABLE|Ethernet0"

# orchagent / syncd のログ
docker logs swss 2>&1 | grep -iE "Ethernet0|portsorch" | tail -50
docker logs syncd 2>&1 | grep -iE "Ethernet0|SAI_PORT" | tail -50

# kernel 側
ip -d link show Ethernet0
ethtool Ethernet0

よくある原因

  1. Transceiver 未挿入 / EEPROM 異常sfputil show presenceNot present
  2. speed / FEC / autoneg の不一致 — 25G で FEC 設定が片側 RS、片側 none など
  3. portsorch が CONFIG_DBAPPL_DB に反映できていないswss container の異常
  4. lane / serdes 設定の platform.json バグ — port-breakout 後の設定残り
  5. SAI driver / FW のリンクトレーニング失敗syncd ログに link training failed
  6. kernel netdev は up だが ASIC 側で down — host-side のみ up となる multi-asic 構成の罠

portsorchCONFIG_DBPORT 変更を SAI 属性 (SAI_PORT_ATTR_ADMIN_STATE 等) に変換して syncd へ渡し、xcvrd は EEPROM 読出し結果を STATE_DBTRANSCEIVER_INFO に書き戻す1

関連 reference / topics


  1. sonic-net/sonic-swss orchagent/portsorch.cpp (CONFIG_DBSAI mapping) と sonic-net/sonic-platform-daemonssonic-xcvrd (SFP EEPROM 監視) が分担する。