コンテンツにスキップ

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 構造

DASH_VNET|<name>

<name>Vnet[a-zA-Z0-9_-]+ パターン必須(YANG バリデーション。例: Vnet1, Vnet-prod1

主要フィールド

フィールド 必須 説明
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)

制約

  • nameVnet[a-zA-Z0-9_-]+ パターン必須1
  • vni1..16777215 の範囲必須(YANG range constraint)
  • DASH_APPLIANCE エントリが先に存在しないと VNET エントリは SAI に反映されない(orchagent がリトライ待ちになる)2

購読者

  • DashVnetOrch (sonic-swss/orchagent/dash/dashvnetorch.cpp): APPL_DB DASH_VNET_TABLE を ZmqOrch 経由で購読。 protobuf バイナリ形式のエントリを parsePbMessage() でデシリアライズし、SAI_VNET_ATTR_VNIsai_dash_vnet_api に渡してハードウェア VNET エントリを作成する2

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: DASH_APPLIANCEDASH_ENIDASH_QOSDASH_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": {
    "Vnet1": {
      "vni": "45654",
      "guid": "559c6ce8-26ab-4193-b946-ccc6e8f930b2"
    }
  }
}

引用元

コード由来の暗黙デフォルト

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