コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 03 章: VXLAN / EVPN とオーバーレイ を参照。

裏取りステータス: code-verified

sonic-swss/orchagent/vnetorch.cpp:445/477-479overlay_dmac:1029-1067nexthops_primary / nexthops_secondary / tx/rx_monitor_timer / monitor_addr_to_pinned_state:1013-1015PINNED_STATE_UP/DOWNsonic-swss-common/common/schema.h:133/500APP/STATE_VNET_MONITOR_TABLE_NAME を確認。overlay_dmacsonic-vnet.yang 取り込み済み(verified at: 2026-05-09)。

Overlay ECMP の Primary/Secondary・カスタム監視・BFD タイマ拡張

なぜこの拡張が必要か

「Overlay ECMP with BFD monitoring」HLDSONiC/doc/vxlan/Overlay ECMP with BFD.md)の 後付け拡張 で、VxLAN VNET ルートに 4 種の機能を追加する1:

  1. Primary / Secondary エンドポイント の自動切替(プライマリ全滅時のみセカンダリ使用)
  2. カスタム監視 委譲(BFD 非対応 VTEP 向け、外部プロセスで生存確認)
  3. per-route BFD Tx/Rx 間隔directly-connected ネクストホップサポート
  4. pinned_state: コントローラからの BFD 状態オーバーライド(SmartSwitch HA 連携)

スキーマ拡張

CONFIG_DB VNET

overlay_dmac フィールド追加(カスタム監視に渡す MAC)1:

VNET|<vnet_name>
    vxlan_tunnel = ...
    vni          = ...
    overlay_dmac = MAC ADDR   ; OPTIONAL

APPL_DB VNET_ROUTE_TUNNEL_TABLE 追加フィールド

primary                  = ip-addr list   ; 指定時のみ primary/secondary モード
monitoring               = "custom"       ; BFD でなくカスタム監視
rx_monitor_timer         = ms             ; BFD 専用
tx_monitor_timer         = ms             ; BFD 専用
check_directly_connected = bool           ; 直接接続なら通常 ECMP へ
adv_prefix               = ip-prefix      ; 集約広報プレフィクス
pinned_state             = none|up|down   ; BFD 状態 override

APPL_DB / STATE_DB VNET_MONITOR_TABLE(新規)

monitoring=custom の場合、VnetOrch が APPL_DB に endpoint 情報(packet_type=vxlan / interval / multiplier / overlay_dmac)を書き、カスタム監視モジュールは STATE_DB 側に state=up/down を返す。

Primary/Secondary 切替ルール

stateDiagram-v2
    [*] --> Primary
    Primary --> Secondary: all primaries down
    Secondary --> Primary: any primary up
    Primary --> Empty: all primaries down + no secondary
    Secondary --> Empty: all endpoints down
    Empty --> Primary: any primary up
  1. プライマリ集合の 生存メンバ で NH グループを編成
  2. プライマリに 1 つでも生存があれば セカンダリは NH に入らない
  3. プライマリ全滅 → セカンダリの生存メンバから編成
  4. プライマリ復旧 → 即セカンダリを外す
  5. 全滅 → 経路撤回(adv_prefix 広報も止まる)

primary 未指定なら従来 flat ECMP1

カスタム監視の経路

flowchart LR
    APP[VNET_ROUTE_TUNNEL_TABLE\nmonitoring=custom] --> VO[VnetOrch]
    VO --> VMA[APPL_DB\nVNET_MONITOR_TABLE]
    VMA --> CM[Custom Monitor]
    CM --> VMS[STATE_DB\nVNET_MONITOR_TABLE]
    VMS --> VO
    VO --> RT[ASIC route]

VNET.overlay_dmac は VNET_MONITOR_TABLE 経由で監視モジュールに渡る。packet_type=vxlan のみサポート1

per-route BFD / directly-connected / pinned_state

  • tx/rx_monitor_timer 変更時は BFD セッションを 一旦削除して再作成1
  • check_directly_connected=true の場合、ARP で直接接続を確認し、直接接続なら 通常 ECMP で実装。primary 集合 / secondary 集合は 混在不可(全員 direct or 全員非 direct)1
  • pinned_state = none / up / down。SmartSwitch HA で planned maintenance や誤検知抑止に使用。詳細は SmartSwitch HA HLD §6.4.1

設定例

# primary/secondary
sonic-db-cli APPL_DB HSET 'VNET_ROUTE_TUNNEL_TABLE:Vnet_3000:100.100.2.1/32' \
  endpoint '1.1.1.2,2.2.2.2,3.3.3.3,4.4.4.4' \
  endpoint_monitor '1.1.2.2,2.2.3.3,3.3.4.4,4.4.5.5' \
  primary '1.1.1.2,2.2.2.2'

# カスタム監視
sonic-db-cli APPL_DB HSET 'VNET_ROUTE_TUNNEL_TABLE:Vnet_3000:100.100.2.1/32' \
  endpoint '1.1.1.2' monitoring 'custom'

新規 SONiC CLI は無く、コントローラから APPL_DB 直書きが前提(show vnet routes は引き続き利用可能)。

制限事項

  • VNET_MONITOR_TABLE キーには vnet 名が含まれない(HLD に TODO 残存)1
  • tx/rx_monitor_timerBFD 専用(カスタム監視には未適用)
  • directly-connected 混在は構成エラー

干渉する機能

  • BfdOrch: per-route タイマ更新で BFD 再生成、pinned_state 非固定時はフラップしうる
  • BGP ADVERTISE_NETWORK_TABLE: adv_prefix 経路は NH 消失で広報停止まで連動
  • SmartSwitch HA: pinned_state / check_directly_connected は hamgrd 操作前提

トラブルシューティング

sonic-db-cli STATE_DB hgetall 'BFD_SESSION_TABLE|default|...'   # BFD 生存
sonic-db-cli STATE_DB keys 'VNET_MONITOR_TABLE*'                # カスタム監視応答
sonic-db-cli APPL_DB hgetall 'VNET_ROUTE_TUNNEL_TABLE:Vnet_3000:100.100.2.1/32'
  • プライマリに戻らない → endpoint_monitor の生存状態を確認
  • カスタム監視で経路が上がらない → APPL_DB / STATE_DB 双方を個別確認

関連 Topics

引用元

関連 Topics


  1. sonic-net/SONiC doc/vxlan/Overlay ECMP ehancements.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06