Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 03 章: VXLAN / EVPN とオーバーレイ を参照。
裏取りステータス: code-verified
sonic-swss/orchagent/vnetorch.cpp で STATE_ADVERTISE_NETWORK_TABLE_NAME 管理、sonic-swss-common/common/schema.h で APP_BGP_PROFILE_TABLE_NAME、sonic-buildimage/src/sonic-bgpcfgd/bgpcfgd/managers_rm.py RouteMapMgr を確認(verified at: 2026-05-09)。
Overlay ECMP with BFD monitoring¶
なぜ必要か¶
VxLAN VNet 経路 (VNET_ROUTE_TUNNEL_TABLE) に 複数 endpoint を ECMP で並べ、各 endpoint の生存性を BFD で確認 し、Down メンバを NHG から外したい。SDN コントローラから REST / gNMI で投入された経路を VnetOrch が処理する1。
監視対象 (endpoint_monitor) と 実トンネル送信先 (endpoint) を分離できるのが特徴で、共通 monitoring IP への multi-hop BFD で生存確認できる。健全な経路は ADVERTISE_NETWORK_TABLE 経由で BGP に広報される。
全体フロー¶
flowchart LR
APP[VNET_ROUTE_TUNNEL_TABLE] --> VO[VnetOrch]
VO --> NHG[Tunnel NHG]
VO -->|monitor IP| BFD[BFD_SESSION_TABLE]
BFD --> BO[BfdOrch] --> SDB[(STATE_DB)]
SDB --> VO
VO -->|advertise| ADV[(ADVERTISE_NETWORK_TABLE)]
ADV --> BGPCFGD[bgpcfgd] --> FRR
VnetOrch の動作1:
- 同一 endpoint set/NHG があれば再利用、
SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHTで重み付け - 各 endpoint の monitoring IP へ multi-hop BFD セッション(既存があれば共有)
- BFD Down メンバは NHG から外す
- アクティブメンバが 1 つ以上あれば
ADVERTISE_NETWORK_TABLEに書き出し → bgpcfgd → BGP 広報
スキーマ¶
CONFIG_DB:
VXLAN_TUNNEL|<name> src_ip, [dst_ip]
VNET|<vnet> vxlan_tunnel, vni, [scope], [advertise_prefix]
APPL_DB:
VNET_ROUTE_TUNNEL_TABLE:<vnet>:<prefix>
endpoint, endpoint_monitor, [mac_address], [vni], [weight], [profile]
BGP_PROFILE_TABLE:<name> community_id
STATE_DB:
ADVERTISE_NETWORK_TABLE|<prefix> profile=<name>
profile に対応する BGP_PROFILE_TABLE の community_id が route-map 経由で community として付与される1。
スケール(HLD 規定)¶
| Item | 規定 |
|---|---|
| ECMP groups / members | 512 / 128 |
| Tunnel routes / endpoints | 16k / 4k |
| BFD monitoring sessions | 4k |
必須 SAI 属性: 既存 TUNNEL API + BFD HW offload + SAI_SWITCH_ATTR_VXLAN_DEFAULT_ROUTER_MAC / _PORT1。
設定例¶
sonic-cfggen -a '{
"VXLAN_TUNNEL": {"tunnel_v4": {"src_ip": "10.1.0.32"}},
"VNET": {"Vnet_3000": {"vxlan_tunnel": "tunnel_v4", "vni": "3000",
"advertise_prefix": "true"}}
}' --write-to-db
sonic-db-cli APPL_DB HSET 'VNET_ROUTE_TUNNEL_TABLE:Vnet_3000:100.100.2.1/32' \
endpoint '1.1.1.2' endpoint_monitor '1.1.2.2' profile 'FROM_SDN_SLB_ROUTES'
show vnet routes all
制限事項¶
- 1 endpoint に対し monitoring endpoint は 1 つだけ
profile_nameは 1 つのみ(複数 profile の同時適用不可)1- BFD HW offload 前提(SW BFD のみのプラットフォームは挙動が異なる)
干渉する機能¶
- VnetOrch / TunnelOrch: 「ECMP 複数 endpoint」「BFD state 連動」を既存実装に追加
- BfdOrch / BFD HW offload: 大量 multi-hop BFD(4k)を扱う前提
- bgpcfgd / FRR:
network広告と community 付与 - 後継 Overlay ECMP Enhancements: primary/secondary / custom monitoring / per-route BFD timer /
pinned_stateを追加
トラブルシューティング¶
sonic-db-cli STATE_DB HGETALL 'ADVERTISE_NETWORK_TABLE|10.0.0.0/8'
sonic-db-cli STATE_DB KEYS 'BFD_SESSION_TABLE|default|default|*'
redis-cli -n 1 KEYS 'ASIC_STATE:SAI_OBJECT_TYPE_NEXT_HOP_GROUP_MEMBER:*' | wc -l
関連 Topics¶
- 03-vxlan-evpn/advanced: VxLAN VNet と ECMP
- 04-vrf-ecmp/advanced: ECMP 全般
- 02-bgp/internals: bgpcfgd と ADVERTISE_NETWORK_TABLE