コンテンツにスキップ

VRF テーブル

概要

L3 トラフィック分離のための Virtual Routing and Forwarding インスタンスを定義する3vrfmgrd がこのテーブルを購読し、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 構造

VRF|<name>

<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: 各 *_INTERFACEvrf_name 参照を反映
  • bgpcfgd / frr-mgmt-framework: BGP_GLOBALS|<vrf> と組合わせて FRR vrf <name> 設定生成
  • orchagent VRFOrch: SAI VR (Virtual Router) を生成

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: INTERFACEVLAN_INTERFACEPORTCHANNEL_INTERFACELOOPBACK_INTERFACEBGP_GLOBALSMGMT_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 116777215 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 にマップ済みの場合 vrfmgrdSWSS_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 のデフォルト falsevni のデフォルト 0(マッピングなし)2

関連リファレンス

引用元

関連ページ

運用ヒント

典型値

  • 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-db-cli CONFIG_DB keys 'VRF|*'
show vrf
ip vrf show