コンテンツにスキップ

MUX_CABLE テーブル(per-port フィールド詳細)

概要

MUX_CABLE|<ifname> は Dual-ToR 構成で各 server-facing port に紐付く mux cable の per-port 設定エントリ1linkmgrdycabled (sonic-ycabled) が CONFIG_DBMUX_CABLE テーブルを購読し、 それぞれ cable_type / state / soc_ipv4 などを読み取ってステートマシンと gRPC チャネルを制御する。

本ページは コード由来のデフォルト・fallback 動作 に焦点を当てる。テーブル全体の概要は MUX_CABLE を参照。

key 構造

MUX_CABLE|<ifname>

<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.pyswsscommon.Table(config_db, "MUX_CABLE") で各 ASIC ごとに port_tbl を保持。 check_mux_cable_port_type()cable_typestate を参照してポートを active-active / active-standby に分類する。
  • linkmgrd: ConfigDBConnectorMUX_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 の handleMuxCfggetAttrIpPrefix() を無条件呼出しするため欠落で std::out_of_range 例外が発生し orchagent が異常終了する可能性がある。minigraph 経由では lo_addr から自動補完される。手動設定時は必須。

関連 CONFIG_DB / YANG / CLI

  • 上位ページ: MUX_CABLE — テーブル全体の概要・値依存挙動・Phase 6/7/8 分析
  • 関連 CONFIG_DB: PEER_SWITCHTUNNEL (DualToR の MuxTunnel0)
  • 関連 CLI: config muxcable modeshow mux statusshow 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>' ... で手動設定する際は両フィールドを必ず指定する。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'MUX_CABLE|Ethernet0'
show mux status
show mux config