Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 03 章: VXLAN / EVPN とオーバーレイ を参照。
裏取りステータス: code-verified
sonic-swss/orchagent/vnetorch.cpp:445/477-479 で overlay_dmac、:1029-1067 で nexthops_primary / nexthops_secondary / tx/rx_monitor_timer / monitor_addr_to_pinned_state、:1013-1015 で PINNED_STATE_UP/DOWN、sonic-swss-common/common/schema.h:133/500 で APP/STATE_VNET_MONITOR_TABLE_NAME を確認。overlay_dmac は sonic-vnet.yang 取り込み済み(verified at: 2026-05-09)。
Overlay ECMP の Primary/Secondary・カスタム監視・BFD タイマ拡張¶
なぜこの拡張が必要か¶
「Overlay ECMP with BFD monitoring」HLD(SONiC/doc/vxlan/Overlay ECMP with BFD.md)の 後付け拡張 で、VxLAN VNET ルートに 4 種の機能を追加する1:
- Primary / Secondary エンドポイント の自動切替(プライマリ全滅時のみセカンダリ使用)
- カスタム監視 委譲(BFD 非対応 VTEP 向け、外部プロセスで生存確認)
- per-route BFD Tx/Rx 間隔 と directly-connected ネクストホップサポート
pinned_state: コントローラからの BFD 状態オーバーライド(SmartSwitch HA 連携)
スキーマ拡張¶
CONFIG_DB VNET¶
overlay_dmac フィールド追加(カスタム監視に渡す MAC)1:
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
- プライマリ集合の 生存メンバ で NH グループを編成
- プライマリに 1 つでも生存があれば セカンダリは NH に入らない
- プライマリ全滅 → セカンダリの生存メンバから編成
- プライマリ復旧 → 即セカンダリを外す
- 全滅 → 経路撤回(
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 セッションを 一旦削除して再作成1check_directly_connected=trueの場合、ARP で直接接続を確認し、直接接続なら 通常 ECMP で実装。primary 集合 / secondary 集合は 混在不可(全員 direct or 全員非 direct)1pinned_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 残存)1tx/rx_monitor_timerは BFD 専用(カスタム監視には未適用)- 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¶
- 03-vxlan-evpn: VxLAN / EVPN / VNET 経路
- 05-dual-tor: SmartSwitch HA と BFD 連携