MUX_CABLE テーブル(per-port フィールド詳細)¶
概要¶
MUX_CABLE|<ifname> は Dual-ToR 構成で各 server-facing port に紐付く mux cable の per-port 設定エントリ1。
linkmgrd と ycabled (sonic-ycabled) が CONFIG_DB の MUX_CABLE テーブルを購読し、
それぞれ cable_type / state / soc_ipv4 などを読み取ってステートマシンと gRPC チャネルを制御する。
本ページは コード由来のデフォルト・fallback 動作 に焦点を当てる。テーブル全体の概要は MUX_CABLE を参照。
key 構造¶
<ifname> は PORT.name への leafref。
フィールド¶
| フィールド | 型 | YANG default | 説明 |
|---|---|---|---|
cable_type |
enum active-active/active-standby |
active-standby |
ケーブル種別。ycabled と linkmgrd のステートマシン分岐を決定 |
state |
enum auto/manual/detach/active/standby |
auto |
MUX 動作モード。auto が自動 failover |
server_ipv4 |
ipv4-prefix | — | サーバ IPv4 アドレス (orchagent が無条件参照するため実質 mandatory) |
server_ipv6 |
ipv6-prefix | — | サーバ IPv6 アドレス (同上) |
soc_ipv4 |
ipv4-prefix | — | SoC IPv4 (active-active 専用。ycabled の gRPC セットアップに必須) |
soc_ipv6 |
ipv6-prefix | — | SoC IPv6 (active-active 専用。ycabled 未参照、linkmgrd は no-op) |
prober_type |
enum hardware/software |
software |
ICMP prober モード。ASIC 非対応時は silent に software 降格 |
neighbor_mode |
enum prefix-route/host-route |
host-route |
neighbor 経路モード。SAI 非対応 ASIC では silent に host-route 動作 |
購読者¶
- ycabled (
sonic-ycabled):y_cable_table_helper.pyがswsscommon.Table(config_db, "MUX_CABLE")で各 ASIC ごとにport_tblを保持。check_mux_cable_port_type()がcable_typeとstateを参照してポートを active-active / active-standby に分類する。 - linkmgrd:
ConfigDBConnectorでMUX_CABLEを購読。processPortCableType()/processProberType()/processSoCIpAddress()で per-port 設定を反映。 - orchagent (
MuxOrch):CFG_MUX_CABLE_TABLE_NAMEを購読し SAI nexthop を操作。
コード由来の暗黙デフォルト (Phase A)¶
| フィールド | YANG default | コード実装の fallback / 乖離 | 乖離種別 |
|---|---|---|---|
cable_type |
active-standby |
ycabled: 欠落時 None → else ブランチで "active-standby" 扱い (y_cable_helper.py:317); linkmgrd: "active-standby" 明示 fallback (DbInterface.cpp:827) |
乖離なし |
state |
auto |
ycabled: state キー自体が存在しない場合 (False, None) を返しポートをスキップ (y_cable_helper.py:319); linkmgrd: 欠落で MUXLOGERROR + 処理続行 (DbInterface.cpp:996) |
キー欠落時のスキップ |
soc_ipv4 |
— (optional) | ycabled: "state" in dict and "soc_ipv4" in dict の二重条件 (y_cable_helper.py:672) — 欠落で gRPC セットアップ未実施; linkmgrd: 欠落 → no-op (DbInterface.cpp:922) |
active-active 時に実質 mandatory |
soc_ipv6 |
— (optional) | ycabled: 参照なし; linkmgrd: 欠落 → no-op | 乖離なし |
prober_type |
software |
hw_offload_capable=false または欠落 → 強制 "software" (DbInterface.cpp:880-881) |
プラットフォーム依存 silent 降格 |
server_ipv4 |
— (optional) | orchagent: getAttrIpPrefix("server_ipv4") を無条件呼出し (muxorch.cpp:2206) — 欠落で std::out_of_range 例外 |
YANG optional vs 実装 mandatory |
server_ipv6 |
— (optional) | orchagent: 同上 (muxorch.cpp:2207) | YANG optional vs 実装 mandatory |
neighbor_mode |
host-route |
SAI が SAI_NEIGHBOR_ENTRY_ATTR_NO_HOST_ROUTE 非対応 → silent に host-route 動作 (muxorch.cpp:2240) |
プラットフォーム依存 silent 無視 |
注記¶
cable_type欠落時の安全 fallback: ycabled (y_cable_helper.py:312-317) はcable_type == "active-active"を明示チェックし、それ以外(Noneを含む)は"active-standby"として扱う。linkmgrd (DbInterface.cpp:827) も同様に"active-standby"を fallback として採用。YANG default と一致しており問題なし。stateキー欠落でのポートスキップ: ycabled のcheck_mux_cable_port_type()は"state" in mux_table_dictチェックを行い、キーが存在しない場合(False, None)を返す。呼出し元ではstatus=Falseを受け取ると当該ポートへの gRPC チャネル設定を行わない。エントリ作成の直後などstateが未書き込みの瞬間がある場合はポートが無視される。soc_ipv4の active-active 時の実質 mandatory: ycabled の gRPC チャネルセットアップ (y_cable_helper.py:672) は"state" in dict and "soc_ipv4" in dictを前提条件としており、soc_ipv4が欠落するとcable_type=active-activeであっても gRPC セッションが確立されない。YANG は optional として定義しているが、active-active 構成では事実上必須。linkmgrd (processSoCIpAddress) は欠落時 no-op で graceful に処理する。prober_type = hardwareの silent 降格:SWITCH_CAPABILITY.ICMP_OFFLOAD_CAPABLE != "true"の ASIC では、hardwareと設定してもエラーなくsoftwareとして動作する。ログ (MUXLOGWARNING) のみ出力。server_ipv4/server_ipv6の実質 mandatory: YANG は optional だが、orchagent のhandleMuxCfgがgetAttrIpPrefix()を無条件呼出しするため欠落でstd::out_of_range例外が発生し orchagent が異常終了する可能性がある。minigraph 経由ではlo_addrから自動補完される。手動設定時は必須。
関連 CONFIG_DB / YANG / CLI¶
- 上位ページ:
MUX_CABLE— テーブル全体の概要・値依存挙動・Phase 6/7/8 分析 - 関連 CONFIG_DB:
PEER_SWITCH、TUNNEL(DualToR の MuxTunnel0) - 関連 CLI:
config muxcable mode、show mux status、show mux config - 関連 YANG:
sonic-mux-cable
関連リファレンス¶
引用元¶
関連 Topics¶
運用ヒント¶
よくある落とし穴¶
cable_type=active-activeポートでsoc_ipv4を設定し忘れると、ycabled が gRPC チャネルを確立せず active-active 制御が機能しない。設定後 ycabled を再起動しても状態が復旧しない場合は CONFIG_DB エントリを確認する。server_ipv4/server_ipv6を省略すると orchagent が例外で落ちる可能性がある。minigraph 使用時は自動補完されるが、sonic-db-cli CONFIG_DB hset 'MUX_CABLE|<port>' ...で手動設定する際は両フィールドを必ず指定する。
確認コマンド¶
-
YANG 定義:
sonic-mux-cable.yangcontainerMUX_CABLE/MUX_CABLE_LIST. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-mux-cable.yang ↩