Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 04 章: VRF / ECMP / 経路選択 を参照。
裏取りステータス: Code-verified
本テストプランは sonic-mgmt 上の test_vrf.py 設計記述。config vrf / config interface vrf bind CLI、frr.conf.j2 の VRF テンプレート、acl-loader の redirect:<ip>@<intf> action、1000 VRF スケールテストの現行挙動は未裏取り。
VRF Ansible テストプラン(T0 上で BGP/ACL/loopback/warm-reboot 含む E2E 検証)¶
概要¶
vrf-vs-test-plan が SwSS 内部の DB 反映を見るのに対し、本プランは 実 SONiC スイッチ上で VRF 機能を E2E 検証 する。t0 トポロジ前提で、PortChannel / VLAN を 2 つの VRF (Vrf1 / Vrf2) に分け、neighbor / route 学習、ACL redirect、loopback、warm-reboot を網羅する1。
動作仕様¶
Topology / VRF 配置例1¶
| VRF | bind 対象 |
|---|---|
Vrf1 |
PortChannel0001 / PortChannel0002 / Vlan1000 |
Vrf2 |
PortChannel0003 / PortChannel0004 / Vlan2000 |
PORTCHANNEL_INTERFACE の <pc>\|<addr/prefix> で v4 / v6 アドレス、<pc> キーの vrf_name で VRF bind1。
BGP(FRR)VRF 設定の生成¶
/usr/share/sonic/templates/frr.conf.j2 を VRF 対応に拡張。各 VRF に独立した router bgp 65100 vrf VrfX ブロックを生成し、IPv4/IPv6 unicast、neighbor、route-map (set-next-hop-global-v6、RM_SET_SRC[6] 等) を VRF 毎に持つ1:
router bgp 65100 vrf Vrf2
bgp router-id 10.1.0.32
neighbor 10.0.0.61 remote-as 64600
bgp listen range 10.255.0.0/25 peer-group BGPSLBPassive
...
BGP_PEER_RANGE / BGP_NEIGHBOR の各 entry にも vrf_name または Vrf<N>|<addr> キーで VRF を伝える1。
ACL redirect(VRF 別 nexthop)¶
VRF 跨ぎリダイレクトでは outgoing interface も明示 が必要1:
"VRF_ACL_REDIRECT_V4|rule1": {
"priority": "55",
"SRC_IP": "10.0.0.1",
"packet_action": "redirect:<ip1>@<intf1>,<ip2>@<intf2>"
}
<ip>@<intf> 形式で nexthop の interface を VRF とともに固定する。
テストケース 10 項目1¶
| # | 観点 | 主な手順 |
|---|---|---|
| 1 | VRF 作成 / bind | config load vrf → kernel + APP_DB 確認 |
| 2 | neighbor 学習 | DUT から VM へ ping、トラフィックで neighbor 検証 |
| 3 | route 学習 | bgp で各 VM が 6.4K v4 + 6.4K v6 route を広報、トラフィック検証 |
| 4 | VRF 隔離 | 異 VRF で同一 prefix を広報し、neighbor / route が混ざらないこと |
| 5 | ACL redirect | <ip>@<intf> リダイレクト先で受信、複数 nexthop の load balance |
| 6 | loopback IF | 異 VRF の loopback、loopback を bgp update-source に使い session Established |
| 7 | warm-reboot | system warm + swss warm 中の連続トラフィック無断 |
| 8 | 1000 VRF | 1000 VLAN + 1000 VRF を CLI 生成、エラー無し + ping 通る |
| 9 | unbind | VRF unbind 時の neighbor/route 削除と他 IF への波及無し |
| 10 | VRF 削除 | bind 中 IF ごと VRF 削除、IP/neighbor/route が連動削除、他 VRF 不変 |
PTF traffic 判定¶
src_mac オプションテストでは PTF が L3 forward 後の dst_mac を見て、設定済 VRF src_mac と一致した場合のみ forward 判定する1。
制限事項¶
t0トポロジ前提- TODO(HLD 末尾):
fallback_lookup属性、VRF 間 route leak、everflow VRF 対応、ssh 等 application の VRF 対応 は 本プラン範囲外1 - 1000 VRF テストは生成時間 / メモリの観点で実機制約を受ける可能性あり
干渉する機能¶
- FRR (zebra/bgpd): VRF 別ルーティングテーブルの中核
- ACL redirect:
redirect:<ip>@<intf>action の VRF 跨ぎ振る舞い - warm-reboot: system + swss warm の双方で連続トラフィックを保証
引用元¶
裏取りメモ (batch 30, 2026-05-11)¶
本ページは sonic-mgmt 配下の Ansible テストプラン記述で、対象実装側 (SONiC NOS) の確認ポイント:
sonic-swss/cfgmgr/vrfmgr.cpp:12-26でVRF_TABLE_START 1001/VRF_TABLE_END 5097/MGMT_VRF_TABLE_ID 6000を持ち、m_appVrfTableProducer(appDb, APP_VRF_TABLE_NAME)/m_appVxlanVrfTableProducer(appDb, APP_VXLAN_VRF_TABLE_NAME)/m_stateVrfTable(stateDb, STATE_VRF_TABLE_NAME)/m_stateVrfObjectTable(stateDb, STATE_VRF_OBJECT_TABLE_NAME)を open。テストプランが要求するconfig vrf→ CONFIG_DB → vrfmgrd → APPL_DB / Linux kernel の流路は cfgmgr に実装済み。- 4096 VRF(VRF_TABLE_START=1001, END=5097)のレンジが定義されており、HLD/プランの「1000 VRF スケール」記述と整合。
テストプラン自体は記述で、現行 master の vrfmgrd 実装と整合。code-verified に昇格。