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 トンネルエントリ。orchagent の GreTunnelManager がこれを購読し、SAI sai_tunnel_api->create_tunnels() を呼び出してハードウェアに GRE トンネルを設定する1。
テーブル名定数は schema.h の APP_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¶
フィールド¶
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
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を除くホワイトリスト方式)
購読者¶
コード由来デフォルト・暗黙挙動¶
以下のデフォルト値は 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_id は encap_dst_ip と同値に固定される。GRE トンネルを作成する前に、該当 neighbor エントリが存在している必要がある4。
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB: なし(P4RT は CONFIG_DB を経由しない)
- 関連 YANG: なし
- 関連 CLI: なし(P4RT controller が直接 APPL_DB に書き込む)
関連リファレンス¶
- (関連リンクなし)
引用元¶
-
GreTunnelManager 実装:
gre_tunnel_manager.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/gre_tunnel_manager.cpp ↩ -
テーブル名定数:
schema.h. https://github.com/sonic-net/sonic-swss-common/blob/158de8d3463ff4b841653f6d57190bb142b80d9c/common/schema.h#L72 ↩ -
SAI 属性設定:
gre_tunnel_manager.cppprepareSaiAttrs(). https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/gre_tunnel_manager.cpp#L37-L65 ↩↩ -
createGreTunnels()overlay_if / neighbor_id:gre_tunnel_manager.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/gre_tunnel_manager.cpp#L400-L425 ↩↩