コンテンツにスキップ

APPL_DB FIXED_MIRROR_SESSION_TABLE (P4RT)

概要

APPL_DB FIXED_MIRROR_SESSION_TABLEP4RT ランタイムが書き込む ERSPAN ミラーセッション定義テーブル。 p4orch 内の MirrorSessionManagerAPPL_DB を購読し、SAI MIRROR_SESSION オブジェクトに変換する1

通常の CONFIG_DB MIRROR_SESSION テーブルとは独立したパスであり、P4RT 経由のプログラムにのみ利用される。 セッションタイプは常に ERSPAN (Enhanced Remote SPAN) に固定され、GRE トンネルパラメータをすべて明示的に指定する必要がある。

key 構造

FIXED_MIRROR_SESSION_TABLE|{"match/mirror_session_id":"<id>"}

key は JSON 形式でエンコードされる。<id> は P4RT テーブルのマッチフィールド mirror_session_id の値。

主要フィールド

フィールド 必須 既定 説明
action string mirror_as_ipv4_erspan yes - アクション識別子。固定値のみ受け付ける
param/port string (物理ポート名) yes - ミラーパケット送出先の物理ポート
param/src_ip ip-address yes - ERSPAN 外側 IP のソース
param/dst_ip ip-address yes - ERSPAN 外側 IP の宛先
param/src_mac mac-address yes - ERSPAN 外側イーサネットの送信元 MAC
param/dst_mac mac-address yes - ERSPAN 外側イーサネットの宛先 MAC
param/ttl hex uint8 yes - ERSPAN 外側 IP の TTL (16 進数文字列)
param/tos hex uint8 yes - ERSPAN 外側 IP の TOS (DSCP+ECN, 16 進数文字列)

全フィールドが必須。1 つでも欠けると processAddRequest()SWSS_RC_INVALID_PARAM を返しセッションは作成されない2

制約

  • param/port は物理ポート (Port::Type::PHY) のみ有効。VLAN / PortChannel は拒否される3
  • actionmirror_as_ipv4_erspan のみ有効。他の値は SWSS_RC_INVALID_PARAM4
  • APPL_DB のキー形式は JSON エンコード。パース失敗時は SWSS_RC_INVALID_PARAM4
  • 更新時は個別フィールドを部分的に送信できる (has_* フラグで管理)。

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

フィールド APP_DB デフォルト C++ 実装デフォルト 種別 備考
param/ttl なし (必須) uint8_t ttl = 0 (struct 初期値) 必須フィールド — デフォルト無効 has_ttl=false のまま ADD 操作を行うと SWSS_RC_INVALID_PARAM
param/tos なし (必須) uint8_t tos = 0 (struct 初期値) 必須フィールド — デフォルト無効 has_tos=false のまま ADD 操作を行うと SWSS_RC_INVALID_PARAM
SAI_MIRROR_SESSION_ATTR_IPHDR_VERSION (APP_DB フィールドなし) 4 (IPv4 固定) ハードコード MIRROR_SESSION_DEFAULT_IP_HDR_VER = 4 (mirror_session_manager.h:20) — IPv6 ヘッダ非対応
SAI_MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE (APP_DB フィールドなし) 0x88be ハードコード GRE_PROTOCOL_ERSPAN = 0x88be (mirror_session_manager.h:21) — 変更不可
SAI_MIRROR_SESSION_ATTR_TYPE (APP_DB フィールドなし) SAI_MIRROR_SESSION_TYPE_ENHANCED_REMOTE ハードコード セッションタイプは ERSPAN 固定。SPAN は不可
SAI_MIRROR_SESSION_ATTR_ERSPAN_ENCAPSULATION_TYPE (APP_DB フィールドなし) SAI_ERSPAN_ENCAPSULATION_TYPE_MIRROR_L3_GRE_TUNNEL ハードコード L3 GRE トンネルカプセル化固定

主要な discrepancy 詳細

IP ヘッダバージョン固定 = 4 — IPv6 ERSPAN 非対応: prepareSaiAttrs() では SAI_MIRROR_SESSION_ATTR_IPHDR_VERSION に定数 MIRROR_SESSION_DEFAULT_IP_HDR_VER = 4 を設定する。 src_ip / dst_ip に IPv6 アドレスを渡しても、SAI には IPv4 ヘッダバージョンが設定されるため動作しない。 P4RT ERSPAN は IPv4 outer ヘッダのみサポート。

GRE type ハードコード = 0x88be — 設定変更不可: prepareSaiAttrs()SAI_MIRROR_SESSION_ATTR_GRE_PROTOCOL_TYPE に定数 GRE_PROTOCOL_ERSPAN = 0x88be をハードコードする。 APP_DB に gre_type フィールドは存在せず変更できない。CONFIG_DB MIRROR_SESSION.gre_type (Mellanox で 0x8949) のような platform 分岐もない。

TOS と TTL は hex 文字列 — 0 は有効な値だが省略不可: deserializeP4MirrorSessionAppDbEntry() は TOS / TTL を std::stoul(value, 0, 16) で 16 進数としてパースする。 0x00 (= 0) は有効値として受け付けられるが、フィールド自体の省略は has_ttl=false / has_tos=false のまま ADD を発行することになり SWSS_RC_INVALID_PARAM が返る。

購読者

  • p4orch 内の MirrorSessionManager (orchagent/p4orch/mirror_session_manager.cpp)
  • CONFIG_DB MIRROR_SESSION テーブルの MirrorOrch とは独立した別経路

関連リファレンス

  • CONFIG_DB MIRROR_SESSION — 通常の SPAN/ERSPAN セッション設定 (CLI 経由)
  • P4RT: APP_P4RT_MIRROR_SESSION_TABLE_NAME = "FIXED_MIRROR_SESSION_TABLE" (sonic-swss-common/common/schema.h:70)

確認コマンド

# APPL_DB の FIXED_MIRROR_SESSION_TABLE を確認
sonic-db-cli APPL_DB keys 'FIXED_MIRROR_SESSION_TABLE*'
sonic-db-cli APPL_DB hgetall 'FIXED_MIRROR_SESSION_TABLE|{"match/mirror_session_id":"my_session"}'

引用元