DASH_VNET テーブル¶
概要¶
DASH_VNET は DPU (Data Processing Unit) 上で動作する DASH (Disaggregated APIs for SONiC Hosts) 仮想ネットワークを CONFIG_DB に定義するテーブル。
各エントリは VNI (VXLAN Network Identifier) で識別される論理ネットワークを表す1。
DASH は SmartSwitch の DPU 上で動作する高性能パケット処理レイヤーで、クラウドネットワーキングのアクセラレーションを提供する。
DASH_VNET はその最上位のネットワーク境界を定義し、DASH_ENI (Elastic Network Interface) のグルーピング単位となる。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>DASH_VNET")]
APPDB[("APPL_DB<br/>DASH_VNET_TABLE")]
CDB --> APPDB
DM["DashVnetOrch"]
APPDB --> DM
SAI["SAI<br/>sai_dash_vnet_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路。詳細・例外は本ページ本文を参照。
key 構造¶
<name> は Vnet[a-zA-Z0-9_-]+ パターン必須(YANG バリデーション。例: Vnet1, Vnet-prod)1。
主要フィールド¶
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
vni |
uint32 (1..16777215) | 実質 yes | VXLAN Network Identifier。SAI に直接渡される唯一のフィールド |
guid |
string (1..255) | no | VNET 識別用 GUID。orchagent は参照しない (dead field) |
address_spaces |
IP prefix リスト | no | この VNET に属する IP プレフィックス群。orchagent は参照しない (dead field) |
制約¶
nameはVnet[a-zA-Z0-9_-]+パターン必須1vniは1..16777215の範囲必須(YANG range constraint)DASH_APPLIANCEエントリが先に存在しないと VNET エントリは SAI に反映されない(orchagent がリトライ待ちになる)2
購読者¶
- DashVnetOrch (
sonic-swss/orchagent/dash/dashvnetorch.cpp): APPL_DBDASH_VNET_TABLEを ZmqOrch 経由で購読。 protobuf バイナリ形式のエントリをparsePbMessage()でデシリアライズし、SAI_VNET_ATTR_VNIをsai_dash_vnet_apiに渡してハードウェア VNET エントリを作成する2。
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
DASH_APPLIANCE、DASH_ENI、DASH_QOS、DASH_VNET_MAPPING_TABLE - 関連 YANG:
sonic-dash
値依存挙動マトリクス¶
| フィールド | 値 | 実挙動 |
|---|---|---|
vni |
1..16777215 | SAI_VNET_ATTR_VNI として SAI に渡される。VNET の L3 オーバーレイ識別子 |
vni |
0 または範囲外 | YANG バリデーションで拒否 (range 1..16777215) |
guid |
任意文字列 | orchagent は読まない。CONFIG_DB に保存されるのみ |
address_spaces |
IP prefix リスト | orchagent は読まない。CONFIG_DB に保存されるのみ |
| DASH_APPLIANCE 未設定時 | — | addVnet() が "Retry as no appliance table entry found" を記録してリトライ待ち |
設定例¶
引用元¶
コード由来の暗黙デフォルト¶
DASH_VNET¶
| フィールド | YANG default | コード実装デフォルト | 出典 |
|---|---|---|---|
vni |
なし (range 1..16777215) | 省略不可。protobuf デフォルト 0 は YANG range で拒否 |
sonic-dash.yang:53-58; dashvnetorch.cpp:72-74 |
guid |
なし | orchagent 未参照 (dead field)。CONFIG_DB 保存のみ | dashvnetorch.h:20-24; dashvnetorch.cpp 全行 |
address_spaces |
なし (空リスト) | orchagent 未参照 (dead field)。SAI 反映経路なし | sonic-dash.yang:67-71; dashvnetorch.cpp 全行 |
注記¶
guidの dead field 性:VnetEntry構造体 (dashvnetorch.h:20-24) は{ sai_object_id_t vni; dash::vnet::Vnet metadata; std::set<std::string> underlay_ips; }のみ。addVnet()ではmetadata.vni()のみ SAI 属性として使用し、guidフィールドは読み取られない2。address_spacesの dead field 性:addVnet()/addVnetPost()の全コードを確認したが、address_spacesを参照する行が存在しない。YANG スキーマ上は IP prefix リストとして定義されているが、DPU 側の SAI API には渡されない2。- protobuf ベースの設計: DASH VNET は CONFIG_DB の YANG フィールドを直接 orchagent が読むのではなく、protobuf シリアライズバイナリを APPL_DB
DASH_VNET_TABLE経由で渡す設計。parsePbMessage()がpbフィールドをデシリアライズする2。 - DASH_APPLIANCE 前提条件:
DashOrch::hasApplianceEntry()がfalseの場合、VNET 追加がリトライ待ちになる。DASH_VNET より先に DASH_APPLIANCE を設定する必要がある2。
-
YANG 定義:
sonic-dash.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-dash.yang ↩↩↩ -
orchagent 実装:
dashvnetorch.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/dash/dashvnetorch.cpp ↩↩↩↩↩↩