Runbook: ASIC port が UP しない (autoneg / speed / FEC 不整合)¶
実行前提
config interface speed / config interface fec / config interface autoneg の変更は対象ポートを一旦 down させて再 up する。本番トラフィックの通る port では事前に対向側と合意し、メンテ枠で実行すること。ロールバックは変更前の値を控えておき、同コマンドで戻すか config reload で config_db.json から再構築する。
症状¶
show interface status Ethernet0でoper downのまま- カウンタが上がらない、
SFP presentだがlinkが下がる - 片側だけ UP、対向はずっと
Idle
想定原因(優先度順)¶
- speed / lane 設定不一致: 100G(4x25) vs 100G(2x50 PAM4) など lane モード差
- FEC mode 不一致:
rs/fc/noneが対向と一致していない - autoneg 設定の食い違い: 片側 on / 片側 off
- transceiver 互換性 / DOM 異常: 光出力低下 / temperature alarm
- Breakout 設定の port mapping 不整合:
port_config.iniと CONFIG_DB の不一致
切り分け手順¶
flowchart TD
A[link が up しない / 速度が想定と違う] --> B{両端 autoneg 設定一致?}
B -- No --> B1[port autoneg on/off を揃える]
B -- Yes --> C{advertised speeds が重なる?}
C -- No --> C1[adv-speeds / adv-types を見直し]
C -- Yes --> D{transceiver / cable 種別対応?}
D -- No --> D1[platform.json の対応リスト確認]
D -- Yes --> E[FEC / training の状態を確認]
確認コマンド¶
1. interface 状態¶
show interface status Ethernet0
show interface counters Ethernet0
sonic-db-cli APPL_DB hgetall "PORT_TABLE:Ethernet0"
sonic-db-cli STATE_DB hgetall "PORT_TABLE|Ethernet0"
2. transceiver 情報¶
show interface transceiver eeprom Ethernet0
show interface transceiver presence
sudo sfputil show eeprom -p Ethernet0
sudo sfputil show error-status -p Ethernet0
3. FEC / autoneg¶
sonic-db-cli CONFIG_DB hgetall "PORT|Ethernet0" | grep -iE "fec|autoneg|speed|lanes"
show interface fec Ethernet0
4. ASIC ログ¶
docker logs swss 2>&1 | grep -iE "ethernet0|portsyncd" | tail -100
sudo dmesg | grep -iE "phy|link" | tail -50
5. 対向との突合¶
- 両側で
speed/fec/autonegを一致させる(公式互換性表に従う)
対処方法¶
- speed 修正:
config interface speed Ethernet0 100000(ロールバック: 変更前の speed に同コマンドで戻す) - FEC:
config interface fec Ethernet0 rs(ロールバック: 元 FEC mode に戻す) - autoneg:
config interface autoneg Ethernet0 enabled(ロールバック: 同コマンドで disabled に) - breakout:
config interface breakout Ethernet0 "4x25G"(多大なポート再構成あり、メンテ枠必須) - transceiver 異常: 別 SFP に差し替え、ベンダ互換性表を確認
確認¶
対処後の正常化を以下で裏取りする。
- 症状解消: 「症状」節で挙げた事象 (counter / log / state) が回復していること
- 再発監視: 数分〜数十分の間隔で同コマンドを再実行し、値がフラップしていないこと
- 副作用なし: 関連サブシステム (syslog /
show interfaces counters errors/show ip bgp summary等) に新規 error が出ていないこと - 永続化:
sudo config save -y済みでconfig_db.jsonに変更が反映されていること (恒久対処の場合)
短時間で再発する場合は「想定原因」リストの次候補に進む。
関連ページ¶
引用元¶
-
sonic-net/sonic-swss @ master — portsorch.cpp ↩
-
sonic-net/sonic-platform-daemons @ master — xcvrd.py ↩