VRF テーブル¶
概要¶
L3 トラフィック分離のための Virtual Routing and Forwarding インスタンスを定義する3。vrfmgrd がこのテーブルを購読し、Linux VRF (ip vrf / cgroup) を作成する。各種 *_INTERFACE テーブルから vrf_name で leafref 参照される。EVPN VXLAN では vni を介して L3 VNI と紐付く。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>VRF")]
DM["vrfmgrd"]
CDB --> DM
APPDB[("APP_DB<br/>APP_VRF_TABLE")]
DM --> APPDB
SYNCD["syncd"]
APPDB --> SYNCD
SAI["SAI<br/>sai_virtual_router_api"]
SYNCD --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<name> は Vrf プレフィクス + [a-zA-Z0-9_-]+ のパターン制約あり(例: Vrf_blue)。
フィールド一覧¶
| フィールド | 型 | 必須 | デフォルト | 説明 |
|---|---|---|---|---|
name (key) |
string Vrf<...> |
✅ | - | VRF 名 |
fallback |
boolean | - | false |
指定 VRF からデフォルト経路へフォールバック |
vni |
uint32 (0..16777215) | - | 0 |
この VRF にマップする L3 VNI |
購読者¶
vrfmgrd: Linux VRF / cgroup を作成・破棄intfmgrd: 各*_INTERFACEのvrf_name参照を反映bgpcfgd/frr-mgmt-framework:BGP_GLOBALS|<vrf>と組合わせて FRRvrf <name>設定生成orchagentVRFOrch: SAI VR (Virtual Router) を生成
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
INTERFACE、VLAN_INTERFACE、PORTCHANNEL_INTERFACE、LOOPBACK_INTERFACE、BGP_GLOBALS、MGMT_VRF_CONFIG - 関連 CLI:
config vrf add/del - 関連 YANG:
sonic-vrf
値依存挙動マトリクス¶
| フィールド | 値 | 実挙動 |
|---|---|---|
fallback |
false |
デフォルト。当該 VRF の経路テーブルのみ参照 |
fallback |
true |
VRF に経路がない場合にデフォルト VRF(main routing table)へフォールバック |
vni |
0 |
L3 VNI マッピングなし(デフォルト、YANG default 0) |
vni |
1〜16777215 |
EVPN L3 VNI マッピングを設定。vrfmgrd が VXLAN_TUNNEL_MAP に evpn_map_<vni>_<vrf> エントリを作成 (vrfmgr.cpp:510) |
vni |
重複 VNI | vrfmgrd が "vni %d is already mapped to vrf %s" でエラーして破棄 (vrfmgr.cpp:441) |
vni |
既存 VRF の VNI 変更 | "vrf %s is already mapped to vni %d" でエラー。一旦 vni=0 にしてから再設定必要 (vrfmgr.cpp:461) |
name |
Vrf で始まる |
有効。sonic-cfggen / orchagent が VRF として認識 |
name |
Vrf で始まらない |
YANG "Invalid VRF name" エラーで reject |
例外条件・特殊挙動 ¶
- 名前パターン (YANG):
pattern "Vrf[a-zA-Z0-9_-]+"— 違反は"Invalid VRF name"エラーで reject される2。 - VNI 重複禁止: 同じ VNI が別 VRF にマップ済みの場合
vrfmgrdはSWSS_LOG_ERROR("vni %d is already mapped to vrf %s")を記録してエントリを破棄する1。 - VRF への VNI 再マップ禁止: 既に VNI が設定されている VRF に別の VNI を設定しようとすると
SWSS_LOG_ERROR("vrf %s is already mapped to vni %d")でエラー1。 - 削除遅延: VRF 削除時に orchagent の VRF オブジェクトが残存している場合
vrfmgrdは削除をリトライ待ち(isVrfObjExist()チェック)1。 - Linux netdev 作成失敗:
SWSS_LOG_ERROR("Failed to create vrf netdev")を記録1。 - VNI マップ設定失敗:
SWSS_LOG_ERROR("VRF VNI Map Config Failed")を記録してエントリを破棄1。 - デフォルト補完:
fallbackのデフォルトfalse、vniのデフォルト0(マッピングなし)2。
関連リファレンス¶
- YANG:
sonic-vrf - CLI:
config vrf
引用元¶
関連ページ¶
運用ヒント¶
典型値¶
- key 形式:
VRF|Vrf<name>(例VRF|VrfRed)。 vni: L3 VNI(VXLAN EVPN tenant L3)。fallback:trueで default VRF にフォールバック。
よくある誤設定¶
- VRF 名が
Vrfで始まらないと sonic-cfggen / orchagent が認識しない。 vniを tenant 間で重複させると EVPN route が混線する。
確認コマンド¶
-
sonic-swss/cfgmgr/vrfmgr.cpphttps://github.com/sonic-net/sonic-swss/blob/master/cfgmgr/vrfmgr.cpp ↩↩↩↩↩ -
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-vrf.yanghttps://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-vrf.yang ↩↩ -
YANG 定義:
sonic-vrf.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-vrf.yang ↩