Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 07 章: ACL / CoPP / Mirror を参照。
裏取りステータス: code-verified (2026-05-11)
テストプラン本体は sonic-mgmt 側の Ansible / PTF テストスクリプトに対する仕様だが、被テストの mirror 機能 (MIRROR_SESSION 制御パス: src/dst IP / DSCP / TTL / GRE type / next-hop / queue / status) は sonic-swss/orchagent/mirrororch.cpp L15-L24 ほか 1611 行に渡って実装されている。P4 mirror manager 系も orchagent/p4orch/mirror_session_manager.cpp で存在を確認。sonic-mgmt ツリーはローカルキャッシュ未取り込みのためテストスクリプト本体の文言一致は別バッチに委ねる。
Everflow テストプラン(ingress + egress mirror、LAG / ECMP / IPv6)¶
概要¶
Everflow(SAI mirror session ベースのトラフィックミラーリング)について、SAI API の単体テストではなく 本番に近い構成での functional / negative テスト を行うプラン1。LAG・BGP route advertise・ECMP next-hop 変動・neighbor MAC 変更・policer DSCP enforcement を含む。
旧 Everflow テストプランからの拡張点:
- Egress ACL table と Egress mirror session の追加カバレッジ
- ACL rule で
IN_PORTSマッチ(既存スクリプトでは未カバー) - ICMP
type/codeマッチ - IPv6 Everflow
動作仕様¶
テスト構成¶
flowchart LR
PEER[BGP peers\n(PTF host)] -->|advertise prefixes| DUT[SONiC DUT]
DUT -->|ACL match -> mirror| COL[Collector]
LAG[LAG members] -.- DUT
PTF[PTF テスト] -->|trigger traffic| DUT
PTF -->|verify mirrored packet| COL
事前条件: BGP セッション、LAG、ACL table / rule、mirror session が configured な「running SONiC system」を用意する1。テストは特定 SAI API ではなく end-to-end 機能 の検証。
事前準備(apply_config)¶
acl_rule_persistent.jsonをacl-loaderで投入session.jsonでMIRROR_SESSIONをconfig mirror_session addで投入acl_table.jsonでACL_TABLE(mirror 用)を投入
テストケース(既存 1〜5)¶
| # | 目的 |
|---|---|
| 1 | best match 解決 route 経由でミラーされる |
| 2 | neighbor MAC 変更後、新 MAC で encap される |
| 3 | ECMP route 変更(mirror に使われていない NH 削除)でも mirror が継続 |
| 4 | ECMP route 変更(mirror に使われている NH 削除)で迅速に他 NH に切替 |
| 5 | policer enforcement で mirror パケットの DSCP が ACL 設定通り |
拡張ケース(本プランの追加)¶
- Egress ACL table + Egress mirror: ingress では落とさず egress 段階で mirror する。Egress 側 SAI ACL がある platform 限定1
- ACL rule
IN_PORTS一致: 入力ポートマッチでの mirror。LAG メンバーポートの個別指定にも使える - ICMP
type/codeマッチ: ping / unreachable など特定 ICMP のみ取る - IPv6 Everflow: IPv6 src/dst で match し、collector へは IPv6-in-IPv6 / GRE で encap
LAG 環境固有の注意¶
LAG + Everflow は 専用テストベッドでのみ実行1。LAG hash の決定性に依存するため、テストの入力フローを LAG 全メンバーに分散させる前提で組む。
📋 検証エビデンス: sonic-net/SONiC/doc/acl/Everflow-test-plan.md#L60-L66 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
出典:
sonic-net/SONiC/doc/acl/Everflow-test-plan.md#L60-L66 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)
抜粋:
The test is targeting a running SONIC system with fully functioning configuration.
The purpose of the test is not to test specific SAI API, but functional testing of Everflow on SONiC system,
making sure that traffic flows correctly, according to BGP routes advertised by BGP peers of SONIC switch,
and the LAG configuration.
判断根拠: テストの目的(SAI 単体ではなく end-to-end 機能)の根拠。
設定¶
関連する CLI¶
| Command | 用途 |
|---|---|
config acl add table <name> <type> |
ACL table 作成 |
config acl update full <json> |
ACL rules を一括投入 |
acl-loader update full <json> |
同上、JSON ファイルから |
aclshow |
rule 単位カウンタ表示 |
config mirror_session add |
mirror session(dst IP / DSCP / TTL / GRE type) |
sonic-cfggen -j <json> --write-to-db |
テスト config の流し込み |
制限事項¶
- LAG ケースは LAG-specific testbed が必須1
- platform が egress ACL / IPv6 ACL に対応していない場合、当該テストは skip
- BGP peer / collector の接続性は事前条件(
get_neighbor_info.yml等で確認)
干渉する機能¶
- ACL Flex Counter:
aclshowの counter は別 framework 由来(rule 単位)。テストの counter assertion はここに依存 - Mirror session resolve: best match route 経由・neighbor MAC で encap header を組むため、route / neighbor 変動に追随する [neighorch / mirrororch] 挙動が前提
- Policer: rule に policer を載せた場合の rate / DSCP enforcement 確認
トラブルシューティング¶
- mirror パケットが届かない → BGP route で collector への best match が取れているか確認、neighbor MAC 解決確認
- LAG 越しに偏る → LAG hash 確認。テスト側の flow 多様化を確認
コマンド例: Everflow / mirror 確認¶
下記コマンドを順に実行することで、関連する CONFIG_DB / APP_DB / STATE_DB のエントリと、 CLI 表示・syslog の整合を一通り突き合わせ確認できる。
# Mirror session と関連 ACL の状態を確認
show mirror_session
redis-cli -n 4 hgetall 'MIRROR_SESSION|everflow0'
# ACL_RULE のヒットカウントで mirror trigger を確認
show acl counters
裏取り済み実装位置 (2026-05-11)¶
- Mirror session 制御フィールド:
sonic-swss/orchagent/mirrororch.cppL15-L24 (MIRROR_SESSION_STATUS/STATUS_ACTIVE/STATUS_INACTIVE/NEXT_HOP_IP/SRC_IP/DST_IP/GRE_TYPE/DSCP/TTL/QUEUE) - MirrorOrch 本体: 同
mirrororch.cpp(1611 行) とmirrororch.h - P4 経路の MirrorSessionManager:
sonic-swss/orchagent/p4orch/mirror_session_manager.cpp/.h(SAI mirror session 抽象化)
sonic-mgmt配下の Everflow テストスクリプト本体(Ansible playbook / PTF)と本テストプランの文言一致は本ローカルでは確認できないため、別バッチで.cache/sonic-sources/sonic-mgmtを取り込んだ後に再検証する。