コンテンツにスキップ

TUNNEL_ENCAP_TABLE

YANG 未定義 / APPL_DB テーブル

FIXED_TUNNEL_TABLE は CONFIG_DB ではなく APPL_DB (P4RT_TABLE) のテーブルであり、sonic-yang-models には対応モジュールが存在しない。本ページは schema.h の定数と gre_tunnel_manager.cpp の実装からフィールドを起こしたもの。

概要

P4RT controller が APPL_DB の P4RT_TABLE:FIXED_TUNNEL_TABLE に書き込む GRE IP-in-IP encap トンネルエントリ。orchagentGreTunnelManager がこれを購読し、SAI sai_tunnel_api->create_tunnels() を呼び出してハードウェアに GRE トンネルを設定する1

テーブル名定数は schema.hAPP_P4RT_TUNNEL_TABLE_NAME = "FIXED_TUNNEL_TABLE"2

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

flowchart LR
  P4RT["P4RT Controller"]
  APPDB[("APPL_DB<br/>P4RT_TABLE:FIXED_TUNNEL_TABLE")]
  GM["GreTunnelManager<br/>(orchagent)"]
  SAI["SAI<br/>sai_tunnel_api"]
  P4RT --> APPDB
  APPDB --> GM
  GM --> SAI

凡例

P4RT controller から SAI までの典型経路。CONFIG_DB を経由しない点が他のトンネルテーブルと異なる。

DB / key

APPL_DB:   P4RT_TABLE:FIXED_TUNNEL_TABLE:<json_key>
# json_key 例: {"match/tunnel_id":"tunnel-1"}

フィールド

フィールド 必須 説明
match/tunnel_id (key) string トンネル識別子
action string mark_for_p2p_tunnel_encap アクション種別(固定値のみ受け入れ)
param/router_interface_id string アンダーレイ RIF ID
param/encap_src_ip IPv4/IPv6 アドレス GRE encap 送信元 IP
param/encap_dst_ip IPv4/IPv6 アドレス GRE encap 宛先 IP(neighbor_id を兼ねる)
controller_metadata string - コントローラメタデータ(無視される)

制約

  • action"mark_for_p2p_tunnel_encap" のみ受け入れる(他の値は INVALID_PARAM エラー)
  • encap_src_ip / encap_dst_ip はゼロ IP (0.0.0.0 / ::) を渡すと INVALID_PARAM エラー
  • 既存エントリへの Update (再 SET) は SWSS_RC_UNIMPLEMENTED — 変更には DEL → SET が必要
  • 未知フィールドは INVALID_PARAM エラー(controller_metadata を除くホワイトリスト方式)

購読者

  • GreTunnelManager (orchagent): SAI SAI_OBJECT_TYPE_TUNNEL (IP-in-IP GRE) 作成/削除

コード由来デフォルト・暗黙挙動

以下のデフォルト値は DB フィールドとして公開されず、gre_tunnel_manager.cpp 内でハードコードまたは暗黙的に設定される。

フィールド / SAI 属性 デフォルト / 実挙動 根拠
action mark_for_p2p_tunnel_encap 固定 p4orch_util.h:111 kTunnelAction
encap_src_ip parse 初期値 0.0.0.0 (省略時は INVALID_PARAM エラー) gre_tunnel_manager.cpp:326
encap_dst_ip parse 初期値 0.0.0.0 (省略時は INVALID_PARAM エラー) gre_tunnel_manager.cpp:327
SAI_TUNNEL_ATTR_TYPE SAI_TUNNEL_TYPE_IPINIP_GRE ハードコード gre_tunnel_manager.cpp:42
SAI_TUNNEL_ATTR_PEER_MODE SAI_TUNNEL_PEER_MODE_P2P ハードコード gre_tunnel_manager.cpp:46
SAI_TUNNEL_ATTR_OVERLAY_INTERFACE gUnderlayIfId (グローバルループバック RIF を代用) gre_tunnel_manager.cpp:420
neighbor_id encap_dst_ip と同値 (BRCM SAI 要件) gre_tunnel_manager.h:44, gre_tunnel_manager.cpp:406
Update (SET on existing) SWSS_RC_UNIMPLEMENTED エラー gre_tunnel_manager.cpp:280
controller_metadata 無視 (ホワイトリスト外スキップ) gre_tunnel_manager.cpp:371-375

詳細

SAI トンネルタイプ (SAI_TUNNEL_TYPE_IPINIP_GRE): DB にトンネル種別フィールドはなく、prepareSaiAttrs() が常に SAI_TUNNEL_TYPE_IPINIP_GRE をセットする3

SAI ピアモード (SAI_TUNNEL_PEER_MODE_P2P): action 名の mark_for_p2p_tunnel_encap が示す通り、P4 GRE encap トンネルは常に P2P モードで動作する3

overlay_if_oid = gUnderlayIfId: SAI SAI_TUNNEL_ATTR_OVERLAY_INTERFACE は必須属性だが、専用オーバーレイ RIF を作成せずグローバルアンダーレイ RIF を代用する。コード内に TODO: Remove when SAI_TUNNEL_ATTR_OVERLAY_INTERFACE is not mandatory と明記されており将来修正予定4

neighbor_id = encap_dst_ip: BRCM SAI の実装要件から neighbor_idencap_dst_ip と同値に固定される。GRE トンネルを作成する前に、該当 neighbor エントリが存在している必要がある4

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: なし(P4RT は CONFIG_DB を経由しない)
  • 関連 YANG: なし
  • 関連 CLI: なし(P4RT controller が直接 APPL_DB に書き込む)

関連リファレンス

  • (関連リンクなし)

引用元