コンテンツにスキップ

VNET / VNET_ROUTE テーブル

概要

VNETVXLAN overlay 上の仮想ネットワークを CONFIG_DB に定義するテーブル群。VNET が VNI と VXLAN tunnel の対応を持ち、VNET_ROUTEVNET_ROUTE_TUNNELVNET スコープの静的経路を表す4schema.h では APPL_DB 側の VNET_TABLE / VNET_ROUTE_TABLE / VNET_ROUTE_TUNNEL_TABLE と、CONFIG_DB 側の VNET_ROUTE / VNET_ROUTE_TUNNEL 定数が定義されている5

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>VNET")]
  DM["vrfmgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_VNET_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 構造

VNET|<name>
VNET_ROUTE|<vnet_name>|<prefix>
VNET_ROUTE_TUNNEL|<vnet_name>|<prefix>

<vnet_name>VNET.name への leafref。<prefix> は IPv4 prefix。

主要フィールド

VNET

フィールド 必須 説明
vxlan_tunnel leafref VXLAN_TUNNEL.name yes この VNET が使う VXLAN tunnel
vni vnid_type yes overlay header に入る VNI
peer_list string no peer 情報
guid string no 任意 GUID
scope string default no VNET scope
advertise_prefix boolean no VNET route prefix の広告フラグ
overlay_dmac mac-address no VNET ping 用 overlay destination MAC
src_mac mac-address no VNET source MAC

VNET_ROUTE

フィールド 必須 説明
nexthop IPv4 address list yes nexthop IP 群
ifname string yes nexthop に対応する interface 名

VNET_ROUTE_TUNNEL

フィールド 必須 説明
endpoint IPv4 address list yes tunnel endpoint / nexthop IP 群
mac_address MAC address list no encapsulated packet の inner destination MAC
vni VNI list no encapsulated packet に使う VNI
consistent_hashing_buckets uint16 no consistent hashing bucket 数
metric uint8 no route 分類用 metric。YANG コメント上、経路動作には影響しない

制約

  • VNET.vxlan_tunnelVXLAN_TUNNEL への leafref。
  • VNET.vniVNET_ROUTE.nexthop / ifnameVNET_ROUTE_TUNNEL.endpoint は mandatory。
  • VNET_ROUTE / VNET_ROUTE_TUNNELvnet_name は既存 VNET への leafref。
  • YANG 上の prefix 型は IPv4 prefix に限定されている。

購読者

  • vxlanmgrd / vnetorch 系: CONFIG_DB の VNET 設定を APPL_DB VNET_TABLE 系へ投影し、orchagent 側で SAI overlay / route に反映する。
  • orchagent: APPL_DB VNET_TABLE / VNET_ROUTE_TABLE / VNET_ROUTE_TUNNEL_TABLE を消費する。

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: VXLAN_TUNNELVXLAN_TUNNEL_MAPINTERFACEVLAN_INTERFACEVLAN_SUB_INTERFACE
  • 関連 CLI: config vxlan
  • 関連 YANG: sonic-vnetsonic-vxlan

値依存挙動マトリクス

フィールド 実挙動
scope "default" YANG pattern で唯一許可される値。デフォルト VRF スコープ
scope その他 YANG バリデーションで "Invalid VRF name" エラー (sonic-vnet.yang)
advertise_prefix true VNET ルートプレフィクスを BGP に広告
advertise_prefix false 広告しない(デフォルト動作)
vni 任意 VNI VXLAN overlay header に使用する VNI。同一デバイス内で重複すると orchagent が後勝ちで上書き
VNET_ROUTE_TUNNEL.metric uint8 経路選択に影響しない(YANG コメント: "not used for route selection, but for route classification")
VNET_ROUTE_TUNNEL.consistent_hashing_buckets uint16 複数 endpoint 時の ECMP consistent hashing バケット数を制御
VNET_ROUTE.nexthop カンマ区切り IP リスト ECMP nexthop として複数 IP 指定可(ipv4-address-list 型)

例外条件・特殊挙動

  • vrf_name パターン (YANG): pattern "default" のみ許可。それ以外は YANG バリデーションで "Invalid VRF name" エラー2
  • vxlan_tunnel + vni 必須: 両方が揃うまで vxlanmgrd はメッセージを破棄して再送待ち("information is incomplete, just ignore this message")1
  • VXLAN トンネル未作成: 参照 VXLAN_TUNNEL がキャッシュに存在しない場合リトライ待ち1
  • VRF 未 ready: isVrfStateOk() が false の場合リトライ待ち1
  • MAC アドレス未設定: ルータ MAC が未取得の場合もリトライ1
  • VxLAN デバイス作成失敗: SWSS_LOG_ERROR("Cannot create vxlan %s") を記録して false を返す1
  • orchagent VR オブジェクト作成失敗: std::runtime_error を throw し、呼び出し元でキャッチして SWSS_LOG_ERROR を記録3

関連リファレンス

引用元

運用ヒント

典型値

  • key 形式: VNET|Vnet_<name>
  • vxlan_tunnel: 紐付ける VXLAN_TUNNEL 名。
  • vni: L3 VNI。
  • peer_list: peer VNet 名(マルチサイト)。
  • scope: default / evpn

よくある誤設定

  • vxlan_tunnelVXLAN_TUNNEL に未存在だと VNet が active にならない。
  • vni を同一 device 内で重複させると orchagent が後勝ちで上書きし silent に壊れる。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'VNET|Vnet_1000'
show vnet brief
show vnet routes all