Runbook: Y-cable firmware download / activate が失敗¶
実行前提
Y-cable firmware の activate は対象ポートのトラフィックを 30〜120 秒中断する。activate 中は dualtor ペアの片系で実行し、対向 ToR は manual で active に固定すること。失敗時のロールバックは config muxcable firmware rollback <port> で旧 image に戻す。両系同時 activate 禁止。
症状¶
config muxcable firmware download <port> <file>がFailed/Timeoutshow muxcable firmware version <port>で Bank A/B のバージョンが揃わない- activate 後にリンクが UP しない / mux state が
unknown
想定原因(優先度順)¶
- firmware image 不一致: ベンダ / model に合わない image
- I2C bus 競合: 同時に複数ポートで download 実行 / pmon が同 I2C を占有
- mux state が
standbyでない: 一部ベンダは standby 側でのみ activate 可 - 電源 / power budget 不足: download 中の追加電流で reset
ycableddaemon 異常: STATE_DBMUX_CABLE_INFOが更新されない
切り分け手順¶
flowchart TD
A[Y-cable FW update 失敗] --> B{ycabled プロセス動作?}
B -- No --> B1[ycabled を起動 / ログ確認]
B -- Yes --> C{SoC との I2C 通信 OK?}
C -- No --> C1[I2C bus / mux 設定を確認]
C -- Yes --> D{image 整合性 OK?}
D -- No --> D1[image を再配置 / checksum 確認]
D -- Yes --> E[FW update API の戻り値とログを精査]
確認コマンド¶
1. 現状把握¶
2. STATE_DB¶
sonic-db-cli STATE_DB hgetall "MUX_CABLE_INFO|<port>"
sonic-db-cli STATE_DB hgetall "MUX_CABLE_TABLE|<port>"
sonic-db-cli STATE_DB hgetall "TRANSCEIVER_INFO|<port>" | grep -iE "vendor|model"
3. daemon ログ¶
docker logs pmon 2>&1 | grep -iE "ycable|firmware" | tail -100
sudo cat /var/log/syslog | grep -iE "ycable|y_cable" | tail -100
4. image 検証¶
5. I2C bus 確認¶
対処方法¶
- ベンダ image 不一致: 正しい model 用 image を入手
- mux state が active: 片側を
config muxcable mode standby <port>に切替 → download → activate - I2C 競合: 同時実行ポートを 1 つに絞り、
config muxcable firmware downloadを逐次化 - 失敗後のロールバック:
config muxcable firmware rollback <port>(y_cable_base.pyのrollback_firmware) - daemon hang:
docker exec pmon supervisorctl restart ycable(注意: dualtor では先に対向 ToR を active に固定)