コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 06 章: L2 / VLAN / LAG を参照。

裏取りステータス: Code-verified(基本構成のみ)

現行 master の sonic-swss/cfgmgr/stpmgrd.cpp:47-49STP_MST / STP_MST_INST / STP_MST_PORT テーブルを TableConnector に登録、stpmgr クラスが存在することを確認。sonic-yang-modelssonic-spanning-tree.yang も存在。CLI / IS-IS のような MSTP 専用 CLI 詳細は元 HLD 参照(verified at: 2026-05-09)。

Multiple Spanning Tree Protocol (MSTP) on SONiC

読み手が知りたいこと

  1. PVST / RSTP に比べて MSTP を選ぶ理由 は?
  2. どのテーブル を編集すれば MSTP が動くのか?
  3. MST Region とは何か、何を一致させると同一リージョンになるのか?
  4. MSTP モードへの 切替時に通信は揺れる のか?
  5. ルートが期待どおりに選ばれない ときに見る場所は?

1. なぜ MSTP か

IEEE 802.1Q-2014 準拠の Spanning Tree。RSTP / PVST に対し VLAN 群を 1 つの MSTI(インスタンス)にまとめてインスタンス単位でトポロジを計算する」 のが特徴。VLAN 数が多くても MSTI 数だけの STP インスタンスで済むためスケールに有利1

flowchart LR
    CLI[config spanning-tree] --> CDB[(CONFIG_DB STP / STP_MST*)]
    CDB --> SM[stpmgrd]
    SM --> ADB[(APPL_DB STP_*)]
    ADB --> STPD[stpd in stp container]
    STPD --> SO[STP Orch]
    SO -->|SAI_STP_*| ASIC[(ASIC)]

stp コンテナで stpd が走り、stpmgrdCONFIG_DBAPPL_DB を橋渡しする。

2. 設定(CONFIG_DB と CLI)

CONFIG_DB スキーマ

STP|GLOBAL
    mode             = "mst" | "rstp" | "pvst"
    rootguard_timeout, forward_delay, hello_time, max_age, ...

STP_MST|GLOBAL
    region_name      = string
    revision         = uint
    max_hops         = uint

STP_MST_INST|<instance_id>
    bridge_priority  = uint
    vlan_list        = comma-list

STP_MST_PORT|<instance_id>|<ifname>
    priority         = uint
    path_cost        = uint

STP_PORT|<ifname>
    enabled          = bool
    bpdu_guard / root_guard / edge_port / ... = bool

CIST (instance 0) は常に存在し IST と呼ぶ。MSTI は instance_id 1..n1

Table 説明
STP グローバル設定(mode 等)
STP_MST MSTP リージョン情報
STP_MST_INST MSTI 単位の VLAN マッピング + bridge priority
STP_MST_PORT MSTI × port の priority / path_cost
STP_PORT 共通 port パラメータ(bpdu_guard 等)

CLI と設定例

sudo config spanning-tree mode mst
sudo config spanning-tree mst region-name region1
sudo config spanning-tree mst revision 1
sudo config spanning-tree mst instance 1 vlan 10,20,30
sudo config spanning-tree mst instance 1 priority 4096
show spanning-tree mst instance 1

詳細サブコマンド(Disabled Commands、show spanning-tree counters 系)は HLD の対応節を参照。

3. MST Region

MST Region は次が 完全一致 するスイッチの集合1:

  • region_name
  • revision
  • VLAN → MSTI マッピング

Region 境界では IST 経由で BPDU 交換する。max_hops は Region 内の MSTI BPDU TTL。1 文字でも違うと別リージョン になるので注意。

4. モード切替と SAI マッピング

主要シーケンス

sequenceDiagram
    participant CFG as CONFIG_DB
    participant MGR as stpmgrd
    participant APP as APPL_DB
    participant STPD as stpd
    CFG->>MGR: STP|GLOBAL.mode=mst
    MGR->>APP: STP_TABLE / STP_MST_TABLE
    APP->>STPD: notify
    STPD->>STPD: enable MSTP, BPDU 送受信
    STPD-->>APP: port roles, port states
    APP-->>MGR: applied state

mode を rstp / pvst から mst へ切り替える際、stpd は内部状態を破棄して MSTP モードで再起動する。瞬間的に L2 トポロジが揺れる 可能性あり1

SAI

  • CIST が SAI の default STP オブジェクト
  • 各 MSTI は追加の SAI_STP_OBJECT_ID インスタンス
  • Port × MSTI ごとに SAI_STP_PORT_ATTR_STATE を operate

MSTI 数の上限は SAI_SWITCH_ATTR_MAX_STP_INSTANCE に依存。

5. 他機能との干渉

  • VLAN / Port-Channel / FDB: MSTP の Port State 変化(Forwarding ↔ Discarding)に応じて FDB 学習・転送が変化
  • PVST / RSTP: 同じ STP|GLOBAL.mode を共有するため同時動作不可
  • BPDU Guard / Root Guard / Edge Port: 共通の STP_PORT 経由で MSTP でも有効

6. トラブルシューティング

症状 最初に見る場所
ルートが期待どおり選ばれない show spanning-tree mst instance <id> で bridge priority と root bridge を確認
リージョン境界で IST にしか入らない region_name / revision / VLAN→MSTI マッピングが対向と完全一致しているか
BPDU が出ない STP_PORT.enabled=true か、stpd ログで送信エラー

コマンド例

MSTP インスタンス / port role を確認する。

show spanning-tree
show spanning-tree mst
show spanning-tree mst-instance brief

既知の問題

SONiC のデフォルト STP サポートについて(#184)

SONiC はデフォルトで STP (Spanning Tree Protocol) をサポートしない。 STP/RSTP/MSTP パケットは CPU にトラップされず、SONiC はスパニングツリーの状態機械を実行しない設計となっている。SONiC は主にデータセンターのスパイン・リーフ構成(L3 ルーティングが主体)を前提としており、アクセス層向けの STP は想定外のユースケースとなっている。

MSTP が必要な場合は本 HLD(MSTP サポート)の実装を使用すること。MSTP コンテナが有効化されていない環境では STP パケットはフラッディングまたはドロップされる。

制限事項

  • HLD は v0.2 (50KB) のため、ここでは中心テーブルとフローのみ抜粋。詳細は HLD doc/MSTP/MSTP.md
  • MSTP モード切替は stpd 再起動を伴う
  • MSTI 数は SAI 依存
  • Warm Boot 中の BPDU タイマ整合性は実装側の対応を別途確認

関連トピック

引用元

関連 Topics


  1. sonic-net/SONiC doc/MSTP/MSTP.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06