COPP_GROUP テーブル¶
概要¶
CPU 宛トラフィックをレート制限する Control Plane Policing (CoPP) のグループ定義。各グループに CPU 受信キューと埋め込み policer (sr_TCM / tr_TCM / storm) を持ち、COPP_TRAP の trap_group から参照される1。copp.json テンプレ → coppmgr → APPL_DB → orchagent (CoppOrch) → SAI HOSTIF_TRAP_GROUP / POLICER の流れで反映される。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>COPP_GROUP")]
DM["coppmgrd"]
CDB --> DM
APPDB[("APP_DB<br/>APP_DB")]
DM --> APPDB
SYNCD["syncd"]
APPDB --> SYNCD
SAI["SAI<br/>sai_hostif_api"]
SYNCD --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
主要フィールド¶
| フィールド | 型 | 必須 | 既定 | 説明 |
|---|---|---|---|---|
queue |
uint32 | no | 0 | CPU 受信キュー番号 (大きいほど高優先) |
trap_priority |
uint32 | no | 0 | trap の優先度 |
trap_action |
enum policer_packet_action |
yes | - | trap 対象パケットへの動作 (forward/drop/copy 等) |
meter_type |
enum meter_type |
yes | - | metering 単位 (packets / bytes) |
mode |
enum sr_tcm/tr_tcm/storm |
yes | - | policer モード |
color |
enum policer_color_source |
no | - | color awareness mode (aware / blind) |
cir |
uint64 | no | 0 | committed information rate |
cbs |
uint64 | no | 0 | committed burst size。cbs >= cir |
pir |
uint64 | tr_tcm 時 | - | peak information rate |
pbs |
uint64 | sr_tcm/tr_tcm 時 | - | peak burst size。pbs >= cbs |
green_action / yellow_action / red_action |
enum | no | forward |
カラー別アクション |
制約¶
cbsを設定するにはcir > 0が必須pirはmode = 'tr_tcm'のときのみ有効 (when)pbsはmode = 'sr_tcm'または'tr_tcm'のときのみ有効yellow_actionはsr_tcm/tr_tcmモードのみ
例外条件・特殊挙動¶
- NULL cfg → デフォルト設定のマージをスキップ: ユーザー設定エントリのフィールドが
"NULL"の場合、coppmgrのmergeConfig()はそのキー全体を init (デフォルトcopp.json) からも除外する。 - 重複エントリ → APPL_DB 更新スキップ:
isDupEntry()で APPL_DB の既存値と全フィールドが一致する場合、m_appCoppTable.set()を呼ばない。SAI の不要な呼び出しを回避。 - policer の meter / mode / color は変更不可: 既存ポリサーへの
meter_type/mode/color_source変更を試みた場合SWSS_LOG_ERRORを出力し当該属性の変更はスキップされる。他の属性の更新は続行。 - 未知フィールド → task_failed:
parseTrapGroupAttribute()で認識できないフィールドが来た場合SWSS_LOG_ERROR("Unknown copp field specified:%s")を出力し処理失敗となる。 - task_failed → プロセス終了:
CoppOrchはtask_failedが返った場合 syslog にエラーを出力してプロセス (orchagent) を終了する。
値依存挙動マトリクス¶
| フィールド | 値 | 挙動 |
|---|---|---|
mode |
sr_tcm |
Single Rate TCM。cir + cbs + pbs を使用。yellow_action が有効。pir は無効(YANG when)。SAI SAI_POLICER_MODE_SR_TCM。 |
mode |
tr_tcm |
Two Rate TCM。cir + cbs + pir + pbs を使用。pir が有効(YANG when)。SAI SAI_POLICER_MODE_TR_TCM。 |
mode |
storm |
Storm Control。cir のみ使用。yellow_action は無効。SAI SAI_POLICER_MODE_STORM_CONTROL。 |
meter_type |
packets |
cir/pir の単位が pps(パケット/秒)。SAI SAI_METER_TYPE_PACKETS。 |
meter_type |
bytes |
cir/pir の単位が bps(バイト/秒)。SAI SAI_METER_TYPE_BYTES。 |
color |
aware |
入力 DSCP/color を引き継いで多段ポリシングが可能。SAI SAI_POLICER_COLOR_SOURCE_AWARE。 |
color |
blind |
すべてのパケットを green として扱う。SAI SAI_POLICER_COLOR_SOURCE_BLIND。 |
trap_action / *_action |
drop |
CPU に送らずに廃棄。SAI SAI_PACKET_ACTION_DROP。 |
trap_action / *_action |
forward |
通常転送。CPU にコピーしない。SAI SAI_PACKET_ACTION_FORWARD。 |
trap_action / *_action |
copy |
CPU へコピーしつつ転送継続。SAI SAI_PACKET_ACTION_COPY。 |
trap_action / *_action |
trap |
CPU に送り、ネットワーク転送を中止。SAI SAI_PACKET_ACTION_TRAP。 |
注意: mode / color は作成後の変更が不可(copporch.cpp:1337 でエラーログを出力してスキップ)。変更するにはエントリを削除して再作成が必要。
購読者¶
coppmgr(docker-swss内): CONFIG_DB のCOPP_GROUP/COPP_TRAPを結合し APPL_DBCOPP_TABLEに書き込むorchagentのCoppOrch: SAI hostif trap group / policer を生成
関連 CONFIG_DB / YANG / CLI¶
関連リファレンス¶
- YANG:
sonic-copp - CLI:
config copp
引用元¶
関連 Topics¶
運用ヒント¶
典型値¶
- key 形式:
COPP_GROUP|<group-name>(queue4_group1等)。 queue: CPU queue 番号。cir: 例6000(pps)。trap_action:trap/forward/copy/drop。
よくある誤設定¶
cirを過小に設定すると BGP keepalive がドロップされて peer が落ちる。