コンテンツにスキップ

DASH_ROUTE_* テーブル

概要

DASH (Disaggregated APIs for SONiC Hosts) データプレーンのルーティングポリシーを定義する 3 テーブル群。SDN コントローラ / gNMI 経由で APP_DB に書き込まれ、DashRouteOrch が protobuf デコードして DASH SAI API (Outbound / Inbound Routing) 経由で DPU ハードウェアに反映する。

  • DASH_ROUTE_GROUP_TABLE: ルートグループ(ルートの集合単位)を作成。ENI からグループへのバインドは DASH_ENI_ROUTE_TABLE で管理される。
  • DASH_ROUTE_TABLE: アウトバウンドルート。CA (Customer Address) プレフィックス単位で routing_type を指定し、VNet 転送・直接転送・ドロップ等を制御する。
  • DASH_ROUTE_RULE_TABLE: インバウンドルート。VNI + SIP プレフィックス単位でデカプセル動作と PA 検証を指定する。

YANG 未定義

3 テーブルはすべて YANG モジュールで未定義。スキーマの正本は sonic-swss/orchagent/dash/dashrouteorch.{h,cpp}

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

flowchart LR
  APPDB[("APP_DB<br/>DASH_ROUTE_*_TABLE")]
  DM["DashRouteOrch"]
  APPDB --> DM
  SYNCD["syncd"]
  DM --> SYNCD
  SAI_OUT["SAI<br/>sai_dash_outbound_routing_api"]
  SAI_IN["SAI<br/>sai_dash_inbound_routing_api"]
  SYNCD --> SAI_OUT
  SYNCD --> SAI_IN

凡例

APP_DB から SAI までの典型経路。DASH テーブルは CONFIG_DB ではなく APP_DB に書かれる点に注意(SDN コントローラ / gNMI 経由で投入)。

テーブル構造

DASH_ROUTE_GROUP_TABLE

ルートグループを定義する。グループ自体に SAI 属性は持たず、存在(OID)を SAI に登録するだけ。

DASH_ROUTE_GROUP_TABLE:<group_id>
フィールド 必須 説明
version string 省略可 管理用バージョン文字列。orchagent は参照しない(結果テーブルに書き戻すのみ)

addRouteGroupcreate_outbound_routing_group を呼び出す際に SAI 属性を 0 個渡す。versionwriteResultToDB の第 3 引数として結果 DB に書き込まれる。

DASH_ROUTE_TABLE

アウトバウンドルートを定義する(DASH_ROUTE_GROUP_TABLE のグループに属する CA プレフィックス単位のエントリ)。

DASH_ROUTE_TABLE:<group_id>:<prefix>
フィールド 必須 説明
routing_type enum 必須 vnet, vnet_direct, direct, drop のいずれか。action_type は同義の非推奨フィールド
action_type enum 非推奨 routing_type が UNSPECIFIED の場合に自動コピーされる
vnet string 条件付き routing_type=vnet または vnet_direct 時に必須。VNET 名(DASH_VNET_TABLE 参照)
overlay_ip ip_address 条件付き routing_type=vnet_direct 時に必須。ルックアップ対象の overlay IP
underlay_sip ip_address 省略可 アンダーレイ送信元 IP(servicetunnel / privatelink 用)
metering_class_or uint32 省略可 メータリングクラス OR ビット
metering_class_and uint32 省略可 メータリングクラス AND ビット
tunnel string 省略可 routing_type=direct 時のネクストホップトンネル名(DASH_TUNNEL_TABLE 参照)

routing_type 互換処理

proto3 において routing_type が UNSPECIFIED (=0) のまま届いた場合、orchagent は非推奨の action_type フィールドをコピーして routing_type として扱う(後方互換)。

DASH_ROUTE_RULE_TABLE

インバウンドルートを定義する(ENI 単位の VNI + SIP プレフィックス + 優先度 によるデカプセル制御)。

DASH_ROUTE_RULE_TABLE:<eni>:<vni>:<prefix/tag>:<priority>
フィールド 必須 説明
vnet string 省略可 マッピング先 VNET 名
pa_validation bool 省略可 PA 検証を行うか。true = TUNNEL_DECAP_PA_VALIDATE, false = TUNNEL_DECAP。省略時 = false
metering_class_or uint32 省略可 メータリングクラス OR ビット
metering_class_and uint32 省略可 メータリングクラス AND ビット

<priority> フィールドがキー末尾に付く新形式を推奨。旧形式(priority なし)では priority=0 にフォールバックする。

購読者

  • orchagent DashRouteOrch: 3 テーブルを subscribe し、SAI Outbound/Inbound Routing API 経由で DPU に反映
  • ルートグループは ENI とのバインド管理を内部カウンタ (route_group_bind_count_) で追跡

関連 CONFIG_DB / YANG / CLI

  • 関連 APP_DB: DASH_ENI_ROUTE_TABLE(グループと ENI のバインド)、DASH_VNET_TABLEDASH_TUNNEL_TABLE
  • 関連 CLI: なし(SDN コントローラ / gNMI 経由投入が主体)
  • 関連 YANG: なし

例外条件・特殊挙動

条件 挙動
routing_type が UNSPECIFIED かつ action_type も未指定 orchagent が ROUTING_TYPE_UNSPECIFIED のまま SAI へ渡す → SAI 側でエラー
routing_type=vnetvnet フィールドが空 addOutboundRoutingtask_failed を返す
routing_type=vnet_directvnet または overlay_ip が未設定 task_failed
routing_type=directtunnel が存在しない retry (task_need_retry) — トンネル作成後に自動再試行
ルートグループが未作成の状態でルート追加 task_need_retry — グループ作成後に自動再試行
ルートグループがバインド中にルート追加 / 削除 task_failed + WARN ログ(バインド解除後に再試行が必要)
バインド中のルートグループ削除 task_failed (SAI_STATUS_OBJECT_IN_USEfalse 返却)
priority フィールドがキーに含まれない旧形式 priority=0 にフォールバック(コード内コメント明示)
pa_validation 省略 proto3 ゼロ値 = falseSAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP

コード由来の暗黙デフォルト (Phase A)

YANG 未定義テーブルのため、全デフォルトはコード実装が正本。

field × 種別 一覧

フィールド / 属性 テーブル 種別 暗黙デフォルト値 ソース
routing_type DASH_ROUTE_TABLE なし(必須) 省略時 = UNSPECIFIED → SAI エラー dashrouteorch.cpp:103-108
action_typerouting_type DASH_ROUTE_TABLE C++ fallback routing_type=UNSPECIFIED のとき action_type をコピー(後方互換) dashrouteorch.cpp:326-333
vnet DASH_ROUTE_TABLE 条件付き必須 routing_type=vnet/vnet_direct 時は必須。省略時 = task_failed dashrouteorch.cpp:78-93
overlay_ip DASH_ROUTE_TABLE 条件付き必須 routing_type=vnet_direct 時は必須。省略時 = task_failed dashrouteorch.cpp:126-141
underlay_sip DASH_ROUTE_TABLE C++ 条件分岐 省略時 = SAI 属性を設定しない(SAI 側デフォルト適用) dashrouteorch.cpp:149-157
metering_class_or DASH_ROUTE_TABLE protobuf has_ guard 省略時 = SAI 属性を設定しない dashrouteorch.cpp:159-163
metering_class_and DASH_ROUTE_TABLE protobuf has_ guard 省略時 = SAI 属性を設定しない dashrouteorch.cpp:165-169
tunnel DASH_ROUTE_TABLE protobuf has_ guard 省略時 = SAI 属性を設定しない dashrouteorch.cpp:171-183
pa_validation DASH_ROUTE_RULE_TABLE protobuf ゼロ値 省略時 = falseSAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP dashrouteorch.cpp:450
metering_class_or DASH_ROUTE_RULE_TABLE protobuf has_ guard 省略時 = SAI 属性を設定しない dashrouteorch.cpp:460-464
metering_class_and DASH_ROUTE_RULE_TABLE protobuf has_ guard 省略時 = SAI 属性を設定しない dashrouteorch.cpp:466-470
priority (キー) DASH_ROUTE_RULE_TABLE C++ fallback キーに priority がない旧形式 = priority=0(最高優先度) dashrouteorch.cpp:605-622
version DASH_ROUTE_GROUP_TABLE C++ fallback 省略時 = 空文字列。結果テーブルへの書き戻しにのみ使用 dashrouteorch.cpp:874

pa_validation による SAI アクション分岐

// dashrouteorch.cpp:450
inbound_routing_attr.value.u32 =
    ctxt.metadata.pa_validation()
        ? SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP_PA_VALIDATE
        : SAI_INBOUND_ROUTING_ENTRY_ACTION_TUNNEL_DECAP;

pa_validation を省略すると proto3 ゼロ値 false が使われ、PA 検証なしのデカプセルが適用される。

routing_type による SAI アクションマッピング (アウトバウンド)

routing_type SAI アクション
vnet SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET
vnet_direct SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_VNET_DIRECT
direct SAI_OUTBOUND_ROUTING_ENTRY_ACTION_ROUTE_DIRECT
drop SAI_OUTBOUND_ROUTING_ENTRY_ACTION_DROP
servicetunnel / appliance / その他 sOutboundAction に未登録 → task_failed

servicetunnel / privatelink / appliance 等の HLD 記載 routing_type は orchagent の sOutboundAction マップに含まれず、現行実装では task_failed となる点に注意。

ルートグループ SAI 属性ゼロ個渡し

// dashrouteorch.cpp:734
sai_status_t status = sai_dash_outbound_routing_api->create_outbound_routing_group(
    &route_group_oid, gSwitchId, 0, NULL);  // 属性なし

DASH_ROUTE_GROUP_TABLEversion フィールドは orchagent 内部では一切参照されず、SAI にも渡されない。

  • 中間トレース: meta/_intermediate/cdb-flow/dash-routing-table-defaults.md