MIRROR_SESSION テーブル¶
概要¶
ポートミラーリング (SPAN / ERSPAN) セッションを CONFIG_DB で定義するテーブル。MirrorOrch が CONFIG_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 構造¶
<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_ipとdst_ipは同一 IP version でなければならない (must制約)src_ip/dst_ip/gre_type/dscp/ttlはtype = 'ERSPAN'のときのみ有効 (when)dst_portはtype = 'SPAN'のときのみ有効
購読者¶
swss内のorchagent(MirrorOrch)- 関連 STATE_DB:
MIRROR_SESSION_TABLEにセッションのアクティブ状態が反映される
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
POLICER、PORT、PORTCHANNEL - 関連 CLI:
config mirror_session add/remove - 関連 YANG:
sonic-mirror-session、sonic-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_typeを0x88be(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.cppL495-499 でも address family チェックを行いtask_invalid_entryを返す。 - dscp が 0-63 の範囲外 → YANG 拒否 / orchagent が例外キャッチ: YANG
range "0..63"で制約。to_uint変換例外を catch してtask_invalid_entry(mirrororch.cppL484-490)。 - queue がハードウェア最大 TC 数以上 → task_invalid_entry:
entry.queue >= m_maxNumTCの場合"Failed to get valid queue"をログし中止 (mirrororch.cppL427-430)。 - 参照する policer が存在しない → task_need_retry:
m_policerOrch->policerExists()が false の場合task_need_retry。policer が後から追加されると再処理される (mirrororch.cppL437-444)。 - HW リソース不足 → task_failed:
isHwResourcesAvailable()が false の場合"HW resources are not available"をログしtask_failed(mirrororch.cppL501-505)。 - 参照カウンタが正の状態での削除 → 例外スロー:
session.refCount > 0の場合runtime_errorをスロー。ACL 等で参照中のセッションは削除できない (mirrororch.cppL266)。 - 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" を確認可能。