コンテンツにスキップ

Topics で読み物として読む

この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 07 章: ACL / CoPP / Mirror を参照。

裏取りステータス: code-verified(test plan)

HLD 21 ケース表と CLI チェック方法(portstat -j / intfstat -j / aclshow -a)、counterpoll port|rif enablesonic-utilities/scripts/{portstat,intfstat,aclshow} および HLD 本文で確認。SAI debug counter のベンダ実装差や L2/L3 drop counter の合算挙動は ASIC 依存のため本ページでは触れない。

ingress discards テスト計画(21 ケースで drop counter を検証)

概要

DUT が 特定の不正パケット を ingress で drop し、対応する drop counter が正しく増えるかを検証する sonic-mgmt テストプラン1。Ethernet / IP / ACL の各層の drop reason を 21 ケースで網羅する。

注: 制御プレーン traffic(VM 由来)は本テスト前に 無効化 することが前提1。drop されるパケットの destination IP は routable にしておき、「routing で出ていく」のではなく「discard されている」ことを確実にする。

動作仕様(テスト観点)

適用 topology

t0 / t1 / t1-lag / ptf321.

Counter の見方

コマンド 見るフィールド
Ethernet drop portstat -j RX_DRP
IP drop intfstat -j RX_ERR
ACL drop aclshow -a PACKETS COUNT

21 テストケース

flowchart LR
  subgraph ETH["Ethernet drop (1-4)"]
    E1[1: SMAC=DMAC]
    E2[2: 許可されない VLAN TAG]
    E3[3: Multicast SMAC]
    E4[4: Reserved DMAC]
  end
  subgraph IP["IP drop (5-19, 21)"]
    I5[5: Loop-back filter]
    I6[6: MTU 超過]
    I7[7: TTL=0]
    I8[8: non-routable @ RIF]
    I9[9: IP ヘッダ欠如]
    I10["10: 壊れた IP ヘッダ checksum/ver/IHL"]
    I11["11: Unicast IP + MC/BC DMAC"]
    I12[12: DST IP=loopback]
    I13[13: SRC IP=loopback]
    I14[14: SRC IP=multicast]
    I15[15: SRC IP=class E]
    I16[16: SRC IP=unspecified]
    I17[17: DST IP=unspecified]
    I18[18: SRC IP=link-local]
    I19[19: DST IP=link-local]
    I21[21: ERIF disabled で drop なし]
  end
  subgraph ACL["ACL drop (20)"]
    A20[20: ACL SRC IP DROP]
  end

ケース 21 は negative test 的意味合いで、ERIF(Egress RIF)を disable していると drop されない(= counter 増えない)ことを確認1

General test flow(共通手順)

  1. 関連 counter を enable: counterpoll port enablecounterpoll rif enable
  2. counter を clear: sonic-clear counters / sonic-clear rifcounters
  3. PTF から指定パターンの不正パケットを inject
  4. portstat -j / intfstat -j / aclshow -a で対応 counter が 増える ことを確認
  5. (陰性ケース)counter が増えない / 別 counter が増えないことを確認

ベンダ間 counter 集約の差異

HLD で明記されている注意点1:

different vendors can have different drop counters calculation, for example L2 and L3 drop counters can be combined and L2 drop counter will be increased for all ingress discards.

つまりベンダによっては L2 drop counter に L3 drop も合算 されうる。テストはこの両ケースを区別して扱う必要がある。

📋 検証エビデンス: sonic-net/SONiC/doc/ingress-discards-test/SONIC_Test_Ingress_Discards_HLD.md#L98-L102 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)

出典:

sonic-net/SONiC/doc/ingress-discards-test/SONIC_Test_Ingress_Discards_HLD.md#L98-L102 (sha: 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06)

抜粋:

As different vendors can have diferent drop counters calculation, for example L2 and L3 drop counters can be combined and L2 drop counter will be increased for all ingress discards.
So for valid drop counters verification there is a need to distinguish whether drop counters are combined or not for current vendor.

判断根拠: ベンダ依存の counter 集約方式(合算 vs 分離)の根拠。

設定

関連する CONFIG_DB

該当なし。テストプランで CONFIG_DB スキーマ拡張は無い。

関連する CLI

Command 用途
counterpoll port enable port counter group ON
counterpoll rif enable RIF counter group ON
portstat -j port 統計を JSON で
intfstat -j RIF (interface) 統計を JSON で
aclshow -a ACL counter
sonic-clear counters / rifcounters クリア

設定例

counterpoll port enable
counterpoll rif enable
sonic-clear counters
sonic-clear rifcounters

# テスト pkt を inject (PTF 等)
# ...

portstat -j | jq '.Ethernet0.RX_DRP'
intfstat -j | jq '.Ethernet0.RX_ERR'
aclshow -a

制限事項

  • VM trafic 無効化が前提1BGP keepalive 等が走っていると counter が汚れる
  • destination IP は routable であることを確認した上で injection(routing で出ていかない / かつ discard 経路に乗る)
  • ベンダ間で L2/L3 counter 合算挙動が異なるため、合否判定は per-vendor のロジックを必要とする
  • 21 ケース中、SAI 属性 / CONFIG_DB の特定 attribute によっては deprecated されたものがあれば注意

干渉する機能

  • debug counters / trap flow counter: 同じ drop reason を別 counter で見ることがある。本テストは port / RIF / ACL の sentinel counter を見る
  • CoPP: control plane traffic を OFF にする際に CoPP の挙動を意識
  • ACL: ケース 20 のみ ACL に依存。ACL がデフォルトで入っている前提
  • port breakout / VLAN config: ケース 2 (VLAN TAG) は VLAN 設定に強く依存

トラブルシューティング

# counter が enable になっているか
counterpoll | head
counterpoll port show
counterpoll rif show

# JSON で
portstat -j > /tmp/p.json
intfstat -j > /tmp/i.json

# ACL hit
aclshow -a | head

# ERIF 状態 (ケース 21)
redis-cli -n 1 KEYS "ASIC_STATE:SAI_OBJECT_TYPE_ROUTER_INTERFACE:*" | head

引用元

関連 Topics


  1. sonic-net/SONiC doc/ingress-discards-test/SONIC_Test_Ingress_Discards_HLD.md @ 49bab5b5ff0e924f1ea52b3d9db0dfa4191a7c06