POLICER テーブル¶
YANG 未定義
POLICER 単独の YANG モジュールは sonic-yang-models に存在しない。COPP_GROUP (sonic-copp.yang)、ACL_RULE (sonic-acl.yang)、PORT_STORM_CONTROL (sonic-storm-control.yang)、SCHEDULER (sonic-scheduler.yang)、MIRROR_SESSION (sonic-mirror-session.yang) 等から「policer 名」あるいは個別フィールドが参照される形でのみ規定される。本ページは policerorch.cpp の実装を一次情報とする。
概要¶
SAI policer (sai_policer) を CONFIG_DB から作成・更新するためのテーブル。policerorch (orchagent) が CONFIG_DB の POLICER を読み出し、CIR/PIR の更新は SET、その他属性は create-only として扱う1。実利用は ACL ルール、COPP、ストーム制御、ミラーセッション、ポートスケジューラ等の指し先として参照される。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>POLICER")]
DM["PolicerOrch"]
CDB --> DM
SAI["SAI<br/>sai_policer_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<name>: 任意の文字列(COPP / ACL の policer 名と一致させる)
フィールド¶
policerorch.cpp の field 定数および参照される SAI 属性は以下:
| フィールド | 値 | SAI 属性 / 説明 |
|---|---|---|
METER_TYPE |
PACKETS / BYTES |
SAI_POLICER_ATTR_METER_TYPE。create に必須 |
MODE |
SR_TCM / TR_TCM / STORM_CONTROL |
SAI_POLICER_ATTR_MODE。create に必須 |
COLOR_SOURCE |
AWARE / BLIND |
SAI_POLICER_ATTR_COLOR_SOURCE |
CIR |
uint64 (bytes/sec or packets/sec) | SAI_POLICER_ATTR_CIR。SET 可 |
CBS |
uint64 | SAI_POLICER_ATTR_CBS。SET 可 |
PIR |
uint64 | SAI_POLICER_ATTR_PIR。SET 可 |
PBS |
uint64 | SAI_POLICER_ATTR_PBS。SET 可 |
GREEN_PACKET_ACTION |
FORWARD/DROP/... |
SAI_POLICER_ATTR_GREEN_PACKET_ACTION。create-only |
YELLOW_PACKET_ACTION |
同上 | SAI_POLICER_ATTR_YELLOW_PACKET_ACTION。create-only |
RED_PACKET_ACTION |
同上 | SAI_POLICER_ATTR_RED_PACKET_ACTION。create-only |
制約¶
METER_TYPEとMODEの両方が無いエントリは create でエラー (policerorch.cppのif (!meter_type || !mode)判定)*_PACKET_ACTION、METER_TYPE、MODE、COLOR_SOURCEは create-only。生成済み policer に対する SET は反映されない(再作成が必要)CIR単独でも create 可能(storm-control が暗黙のSTORM_CONTROLモード, BYTES として作成する経路を持つ)
購読者¶
policerorch(orchagent): SAI policer オブジェクトを作成・更新
利用先(参照テーブル例)¶
ACL_RULE:POLICERを action として指定COPP_GROUP: control plane 制限に利用PORT_STORM_CONTROL: ストーム制御MIRROR_SESSION: span/erspan の policer
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
ACL_RULE、COPP_GROUP、PORT_STORM_CONTROL、MIRROR_SESSION - 関連 YANG: 直接の YANG モジュールは無し(参照側 YANG が個別フィールドを持つ)
- 関連 CLI: なし(
config_db.jsonで投入)
値依存挙動マトリクス¶
POLICER.METER_TYPE¶
| 値 | SAI 属性 | 挙動 |
|---|---|---|
PACKETS |
SAI_METER_TYPE_PACKETS | パケット数でレート計算 |
BYTES |
SAI_METER_TYPE_BYTES | バイト数でレート計算 |
| 未設定 / 不正 | - | if (!meter_type) 判定で create 失敗 |
POLICER.MODE¶
| 値 | SAI 属性 | 挙動 |
|---|---|---|
SR_TCM |
SAI_POLICER_MODE_SR_TCM | Single Rate Three Color Marker (CIR/CBS/PBS) |
TR_TCM |
SAI_POLICER_MODE_TR_TCM | Two Rate Three Color Marker (CIR/CBS/PIR/PBS) |
STORM_CONTROL |
SAI_POLICER_MODE_STORM_CONTROL | ストーム制御モード (CIR/CBS のみ有効) |
| 未設定 / 不正 | - | if (!mode) 判定で create 失敗 |
| (storm-control 経由) | STORM_CONTROL 固定 | METER_TYPE も BYTES に自動設定、RED_PACKET_ACTION を DROP に固定 |
POLICER.COLOR_SOURCE¶
| 値 | SAI 属性 | 挙動 |
|---|---|---|
AWARE |
SAI_POLICER_COLOR_SOURCE_AWARE | 入力パケットの color を引き継いでポリシング |
BLIND |
SAI_POLICER_COLOR_SOURCE_BLIND | 入力 color を無視して green 扱いで処理 |
POLICER.*_PACKET_ACTION¶
| 値 | SAI 属性 | 挙動 |
|---|---|---|
FORWARD |
SAI_PACKET_ACTION_FORWARD | そのトラフィックカラーのパケットを通過 |
DROP |
SAI_PACKET_ACTION_DROP | そのトラフィックカラーのパケットを破棄 |
| (不明な値) | - | Unknown policer attribute %s SWSS_LOG_ERROR |
_PACKET_ACTION / METER_TYPE / MODE / COLOR_SOURCE は create-only。作成後の変更は反映されない(再作成が必要)。CIR / CBS / PIR / PBS は SET による更新可能。
例外条件・特殊挙動¶
consumer (policerorch) 例外動作¶
- 重複 SET: 既存 policer は update パスへ分岐 (
policerExists()チェック)。 - DEL で存在しない policer:
Policer %s does not exist→ SWSS_LOG_WARN +return false。 - 不明な attribute:
Unknown policer attribute %s specified→ SWSS_LOG_ERROR。 - SAI policer create 失敗:
Failed to create policer %s, rv:%d→ SWSS_LOG_ERROR。 - SAI attribute update 失敗:
Failed to update policer %s attribute, rv:%d→ SWSS_LOG_ERROR。 - DEL 時 SAI remove 失敗:
Failed to remove policer %s, rv:%d→ SWSS_LOG_ERROR。 - 不正インターフェース (storm-control 経由):
Unsupported / Invalid interface %s→ SWSS_LOG_ERROR。 - ポート未発見 (storm-control 経由):
Failed to apply storm-control %s to port %s. Port not found→ SWSS_LOG_ERROR。 - 不明な storm_type:
Unknown storm_type %s→ SWSS_LOG_ERROR。
関連リファレンス¶
- (関連リンクなし)
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
POLICER|<name>。 meter_type:packets/bytes。mode:sr_tcm/tr_tcm/storm。cir/cbs/pir/pbs。
よくある誤設定¶
mode: stormでpirを指定すると SAI がエラーを返す版がある。
確認コマンド¶
-
policerorch 実装:
policerorch.cpp. https://github.com/sonic-net/sonic-swss/blob/4305596156d70e9797e8a881b3d19b46de0bce0d/orchagent/policerorch.cpp ↩