コンテンツにスキップ

MCLAG_DOMAIN / MCLAG_INTERFACE / MCLAG_UNIQUE_IP テーブル

概要

MC-LAG (Multi-Chassis Link Aggregation) のドメイン設定とメンバー / unique-IP 設定を CONFIG_DB に保持する 3 テーブル1iccpd (docker-iccpd) がこれらを購読し、ICCP セッションと MC-LAG メンバー LAG の同期を制御する。

  • MCLAG_DOMAIN — 1 ドメインの基本パラメータ(最大 1 エントリ)
  • MCLAG_INTERFACE — ドメインに紐づく MC-LAG メンバー PortChannel
  • MCLAG_UNIQUE_IP — MC-LAG ピア間で VLAN インターフェースに 異なる IP を持たせる対象 VLAN

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>MCLAG_DOMAIN")]
  DM["MlagOrch"]
  CDB --> DM
  SAI["SAI<br/>sai_fdb_api"]
  DM --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

MCLAG_DOMAIN|<domain_id>
MCLAG_INTERFACE|<domain_id>|<if_name>
MCLAG_UNIQUE_IP|<if_name>

MCLAG_DOMAIN フィールド

フィールド デフォルト 説明
domain_id (key) uint16 (1..4095) MC-LAG ドメイン ID
source_ip inet:ipv4-address ICCP セッションのソース IP
peer_ip inet:ipv4-address ICCP セッションのピア IP
peer_link union leafref → PORT.name または PORTCHANNEL.name ピアリンク(バックアップデータパス)
keepalive_interval uint16 (1..60) [秒] 1 ICCP keepalive 間隔
session_timeout uint16 (1..3600) [秒] 30 ICCP セッションタイムアウト

must 制約: keepalive_interval * 3 <= session_timeout

max-elements: 1 — ドメインは 1 件のみ

MCLAG_INTERFACE フィールド

フィールド 説明
domain_id (key) leafref → MCLAG_DOMAIN.domain_id 所属ドメイン
if_name (key) leafref → PORTCHANNEL.name MC-LAG メンバー LAG
if_type string プレースホルダ(インスタンス作成用)

MCLAG_UNIQUE_IP フィールド

フィールド 説明
if_name (key) string パターン Vlan<id> unique-ip を許可する VLAN インターフェース名
unique_ip enum enable 有効化フラグ(無効時はエントリ削除)

must 制約: MCLAG_DOMAIN_LIST が少なくとも 1 つ存在すること

YANG コメントによれば、本来 MCLAG_UNIQUE_IP.if_nameVLAN.name への leafref にしたいが libyang back-links の制約で plain string になっている。

購読者

  • iccpd (docker-iccpd) — MC-LAG 制御プレーン
  • 間接的に teamd (PortChannel のメンバー同期)

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: PORTCHANNELPORTCHANNEL_MEMBERVLANVLAN_INTERFACEPORT
  • 関連 YANG: sonic-mclagsonic-portchannelsonic-port
  • 関連 CLI: config mclag

関連リファレンス

引用元

関連ページ

運用ヒント

典型値

  • key 形式: MCLAG_DOMAIN|<domain-id> (1..4095)。
  • source_ip / peer_ip: keepalive 用 IP(Loopback 推奨)。
  • peer_link: PortChannel0001 等の ICL/peer-link。
  • mclag_system_mac: 両 ToR で同一 MAC。

よくある誤設定

  • mclag_system_mac を両 ToR で別値にすると LACP system-id が異なり MC-LAG が組まれない。
  • peer_link を VLAN trunk にしないと peer 間の MAC 同期が動かない。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'MCLAG_DOMAIN|1'
mclagdctl -i 1 dump state
show mclag brief

例外条件・特殊挙動

  • domain_id が 1-4095 の範囲外: YANG range "1..4095" / error-message "MCLAG Domain ID out of range" により拒否される。
  • keepalive_interval が 1-60 の範囲外 (デフォルト 1): YANG range "1..60" で制約。
  • session_timeout が 1-3600 の範囲外 (デフォルト 30): YANG range "1..3600" で制約。
  • keepalive_interval × 3 > session_timeout → YANG must 制約違反: YANG must "(keepalive_interval * 3) <= session_timeout" に違反するとバリデーション段階で拒否される。
  • 変更差分なし → 重複更新を無視: !attrBmap && !attrDelBmap の場合 "no change - duplicate update" を SWSS_LOG_NOTICE してリターン。iccpd への送信は行われない (mclaglink.cpp L812)。
  • 存在しないドメインの DEL → SWSS_LOG_WARN + スキップ: "Domain [%d] deletion - domain not found" を WARN ログして処理を終了。iccpd へは送信されない (mclaglink.cpp L836)。
  • 既存エントリへの SET 時の差分更新: source_ippeer_ippeer_link は既存値との差分のみを iccpd へ通知。空文字列で上書きした場合は MCLAG_CFG_OPER_ATTR_DEL を発行する (mclaglink.cpp L749-L795)。

値依存挙動マトリクス

フィールド 挙動
keepalive_interval 1 (default) 1秒ごとに ICCP keepalive 送信
keepalive_interval N (1..60) N 秒ごとに送信。session_timeout >= N*3 が YANG must 制約で必須
session_timeout 30 (default) 30秒 ICCP 応答なしでセッション断
session_timeout < keepalive_interval*3 YANG must 制約違反 → バリデーション拒否
unique_ip enable 当該 VLAN IF に対してピア ToR 間で異なる IP アドレスを許可
if_type (MCLAG_INTERFACE) 任意文字列 プレースホルダ。実際の制御動作に影響なし (エントリ存在でメンバー登録)

enum: unique_ip = enable のみ (無効化はエントリ削除)。