VNET / VNET_ROUTE テーブル¶
概要¶
VNET は VXLAN overlay 上の仮想ネットワークを CONFIG_DB に定義するテーブル群。VNET が VNI と VXLAN tunnel の対応を持ち、VNET_ROUTE と VNET_ROUTE_TUNNEL が VNET スコープの静的経路を表す4。schema.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.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_tunnelはVXLAN_TUNNELへの leafref。VNET.vniとVNET_ROUTE.nexthop/ifname、VNET_ROUTE_TUNNEL.endpointは mandatory。VNET_ROUTE/VNET_ROUTE_TUNNELのvnet_nameは既存VNETへの leafref。- YANG 上の prefix 型は IPv4 prefix に限定されている。
購読者¶
vxlanmgrd/vnetorch系: CONFIG_DB の VNET 設定を APPL_DBVNET_TABLE系へ投影し、orchagent 側で SAI overlay / route に反映する。orchagent: APPL_DBVNET_TABLE/VNET_ROUTE_TABLE/VNET_ROUTE_TUNNEL_TABLEを消費する。
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
VXLAN_TUNNEL、VXLAN_TUNNEL_MAP、INTERFACE、VLAN_INTERFACE、VLAN_SUB_INTERFACE - 関連 CLI:
config vxlan - 関連 YANG:
sonic-vnet、sonic-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。
関連リファレンス¶
- YANG:
sonic-vnet - CLI:
config vxlan
引用元¶
運用ヒント¶
典型値¶
- key 形式:
VNET|Vnet_<name>。 vxlan_tunnel: 紐付けるVXLAN_TUNNEL名。vni: L3 VNI。peer_list: peer VNet 名(マルチサイト)。scope:default/evpn。
よくある誤設定¶
vxlan_tunnelがVXLAN_TUNNELに未存在だと VNet が active にならない。vniを同一 device 内で重複させると orchagent が後勝ちで上書きし silent に壊れる。
確認コマンド¶
-
sonic-swss/cfgmgr/vxlanmgr.cpphttps://github.com/sonic-net/sonic-swss/blob/master/cfgmgr/vxlanmgr.cpp ↩↩↩↩↩ -
sonic-buildimage/src/sonic-yang-models/yang-models/sonic-vnet.yanghttps://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-yang-models/yang-models/sonic-vnet.yang ↩ -
sonic-swss/orchagent/vnetorch.cpphttps://github.com/sonic-net/sonic-swss/blob/master/orchagent/vnetorch.cpp ↩ -
YANG 定義:
sonic-vnet.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-vnet.yang ↩ -
テーブル名定数:
schema.h. https://github.com/sonic-net/sonic-swss-common/blob/158de8d3463ff4b841653f6d57190bb142b80d9c/common/schema.h ↩