コンテンツにスキップ

Topics で読み物として読む

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

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

sonic-swss/orchagent/vnetorch.cppSTATE_ADVERTISE_NETWORK_TABLE_NAME 管理、sonic-swss-common/common/schema.hAPP_BGP_PROFILE_TABLE_NAMEsonic-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:

  1. 同一 endpoint set/NHG があれば再利用、SAI_NEXT_HOP_GROUP_MEMBER_ATTR_WEIGHT で重み付け
  2. 各 endpoint の monitoring IP へ multi-hop BFD セッション(既存があれば共有)
  3. BFD Down メンバは NHG から外す
  4. アクティブメンバが 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_TABLEcommunity_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

引用元

関連 Topics


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