APPL_DB FIXED_MIRROR_SESSION_TABLE (P4RT)¶
概要¶
APPL_DB FIXED_MIRROR_SESSION_TABLE は P4RT ランタイムが書き込む ERSPAN ミラーセッション定義テーブル。
p4orch 内の MirrorSessionManager が APPL_DB を購読し、SAI MIRROR_SESSION オブジェクトに変換する1。
通常の CONFIG_DB MIRROR_SESSION テーブルとは独立したパスであり、P4RT 経由のプログラムにのみ利用される。
セッションタイプは常に ERSPAN (Enhanced Remote SPAN) に固定され、GRE トンネルパラメータをすべて明示的に指定する必要がある。
key 構造¶
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。actionはmirror_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"}'
引用元¶
-
MirrorSessionManager説明:orchagent/p4orch/mirror_session_manager.hL69-70. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/mirror_session_manager.h#L69-L70 ↩ -
processAddRequest()の必須フィールドチェック:orchagent/p4orch/mirror_session_manager.cppL339-363. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/mirror_session_manager.cpp#L339-L363 ↩ -
物理ポート制約:
orchagent/p4orch/mirror_session_manager.cppL124-135. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/mirror_session_manager.cpp#L124-L135 ↩ -
deserializeP4MirrorSessionAppDbEntry():orchagent/p4orch/mirror_session_manager.cppL190-323. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/p4orch/mirror_session_manager.cpp#L190-L323 ↩↩