コンテンツにスキップ

MIRROR_SESSION テーブル

概要

ポートミラーリング (SPAN / ERSPAN) セッションを CONFIG_DB で定義するテーブル。MirrorOrchCONFIG_DB を購読し、SAI MIRROR_SESSION オブジェクトに変換する1。ERSPAN では outer GRE/IP ヘッダ用パラメータ (src_ip / dst_ip / dscp / ttl / gre_type) を伴い、SPAN では dst_port (ローカル物理ポートまたは CPU) を指定する。

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

flowchart LR
  CDB[("CONFIG_DB<br/>MIRROR_SESSION")]
  DM["MirrorOrch"]
  CDB --> DM
  SAI["SAI<br/>sai_mirror_api"]
  DM --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

MIRROR_SESSION|<name>

<name> は 1〜32 文字、英数字始まりで [-a-zA-Z0-9_] を含む。

主要フィールド

フィールド 必須 既定 説明
type enum ERSPAN/SPAN no ERSPAN セッションタイプ
src_ip ip-address ERSPAN 時 - ERSPAN 外側 IP のソース
dst_ip ip-address ERSPAN 時 - ERSPAN 外側 IP の宛先
gre_type hex / dec uint16 no 0x88be ERSPAN 外側 GRE type
dscp uint8 (0..63) no - ERSPAN 外側 DSCP
ttl uint8 (0..255) no - ERSPAN 外側 TTL
queue uint8 no - ミラーフレームを送出する egress queue
dst_port leafref PORT.name または CPU SPAN 時 - SPAN 出力ポート
src_port string (1..2048) no - SPAN/ERSPAN 共通: ソース PORT または PORTCHANNEL のリスト
direction enum RX/TX/BOTH no BOTH キャプチャ方向
policer leafref POLICER.name no - 鏡像トラフィックに適用する policer

制約

  • src_ipdst_ip は同一 IP version でなければならない (must 制約)
  • src_ip/dst_ip/gre_type/dscp/ttltype = 'ERSPAN' のときのみ有効 (when)
  • dst_porttype = 'SPAN' のときのみ有効

購読者

  • swss 内の orchagent (MirrorOrch)
  • 関連 STATE_DB: MIRROR_SESSION_TABLE にセッションのアクティブ状態が反映される

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: POLICERPORTPORTCHANNEL
  • 関連 CLI: config mirror_session add/remove
  • 関連 YANG: sonic-mirror-sessionsonic-policer

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: MIRROR_SESSION|<session-name> (例 everflow0)。
  • type: SPAN(L2 ローカル)または ERSPAN(L3 遠隔)。
  • ERSPAN 必須: src_ip / dst_ip / gre_type (0x88be / 0x8949) / dscp / ttl
  • policer: 制限する場合のみ。

よくある誤設定

  • dst_ip が経路解決できないと session は inactive のまま hardware に降りない。
  • src_ip を 0.0.0.0 にすると mirror_session は作成されても ASIC が drop する。
  • gre_type0x88be (Cisco) と 0x8949 (Broadcom) の対向ミスマッチで mirror パケットが収集側で parse できない。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'MIRROR_SESSION|everflow0'
sonic-db-cli STATE_DB hgetall 'MIRROR_SESSION_TABLE|everflow0'
show mirror_session

例外条件・特殊挙動

  • セッション名が不正形式 → YANG が拒否: pattern '[a-zA-Z0-9]{1}([-a-zA-Z0-9_]{0,31})' / 長さ 1-32 文字。違反は YANG バリデーションで拒否される。
  • src_ip と dst_ip のアドレスファミリ不一致 → YANG must + orchagent が task_invalid_entry: YANG の must 制約でファミリ一致を強制。mirrororch.cpp L495-499 でも address family チェックを行い task_invalid_entry を返す。
  • dscp が 0-63 の範囲外 → YANG 拒否 / orchagent が例外キャッチ: YANG range "0..63" で制約。to_uint 変換例外を catch して task_invalid_entry (mirrororch.cpp L484-490)。
  • queue がハードウェア最大 TC 数以上 → task_invalid_entry: entry.queue >= m_maxNumTC の場合 "Failed to get valid queue" をログし中止 (mirrororch.cpp L427-430)。
  • 参照する policer が存在しない → task_need_retry: m_policerOrch->policerExists() が false の場合 task_need_retry。policer が後から追加されると再処理される (mirrororch.cpp L437-444)。
  • HW リソース不足 → task_failed: isHwResourcesAvailable() が false の場合 "HW resources are not available" をログし task_failed (mirrororch.cpp L501-505)。
  • 参照カウンタが正の状態での削除 → 例外スロー: session.refCount > 0 の場合 runtime_error をスロー。ACL 等で参照中のセッションは削除できない (mirrororch.cpp L266)。
  • type のデフォルト = "ERSPAN": YANG default "ERSPAN"。type を省略すると ERSPAN として処理される。SPAN セッションは明示的に type = SPAN を指定し dst_port も必須。
  • gre_type のデフォルト = 0x88be: YANG default 0x88be。ERSPAN over GRE のデフォルト EtherType。

値依存挙動マトリクス

フィールド 挙動
type ERSPAN (default) GRE/IP ヘッダ付きで dst_ip へ転送。routeOrch に dstIp を attach して nexthop 解決後に active
type SPAN ローカル物理ポート (dst_port) に転送。nexthop 解決不要
direction RX 受信パケットのみミラー
direction TX 送信パケットのみミラー
direction BOTH (default) 送受信両方をミラー
gre_type 0x88be (default) ERSPAN Type II (Cisco) GRE EtherType
gre_type 0x8949 ERSPAN Type III (Broadcom) GRE EtherType
queue 0 (default) best-effort queue でミラーパケット送出
queue ≥ m_maxNumTC task_invalid_entry — HW TC 数超過
policer 指定あり ミラートラフィックにレート制限を適用
policer 未存在 leafref task_need_retry — policer 追加後に再処理

セッション状態は STATE_DB MIRROR_SESSION_TABLE.status で "active"/"inactive" を確認可能。