PBH_TABLE / PBH_RULE テーブル¶
概要¶
Policy Based Hashing (PBH) は、packet match 条件ごとに ECMP / LAG hash profile を切り替えるための CONFIG_DB テーブル群。PBH_TABLE が適用 interface の集合を定義し、PBH_RULE が table 内の match 条件、priority、適用する PBH_HASH を持つ1。hash profile と hash field は同じ YANG モジュールの PBH_HASH / PBH_HASH_FIELD で定義され、実装側のテーブル名定数は schema.h も参照する2。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>PBH_TABLE")]
DM["PbhOrch"]
CDB --> DM
SAI["SAI<br/>sai_acl_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
PBH_TABLE|<table_name>
PBH_RULE|<table_name>|<rule_name>
PBH_HASH|<hash_name>
PBH_HASH_FIELD|<hash_field_name>
PBH_RULE.table_name は PBH_TABLE.table_name への leafref。
主要フィールド¶
PBH_TABLE¶
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
interface_list |
ordered leaf-list PORT / PORTCHANNEL leafref |
yes | PBH table を適用する interface 群 |
description |
string 1..255 | yes | table の説明 |
PBH_RULE¶
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
priority |
uint32 | - | rule priority。mandatory |
gre_key |
hex value/mask | - | GRE key match |
ether_type |
hex uint16 string | - | EtherType match |
ip_protocol |
hex uint8 string | - | IPv4 protocol match |
ipv6_next_header |
hex uint8 string | - | IPv6 next-header match |
l4_dst_port |
hex uint16 string | - | L4 destination port match |
inner_ether_type |
hex uint16 string | - | inner EtherType match |
hash |
leafref PBH_HASH.hash_name |
- | 適用する hash。mandatory |
packet_action |
enum | SET_ECMP_HASH |
rule action |
flow_counter |
enum | DISABLED |
packet / byte counter の有効化 |
制約¶
PBH_TABLE.interface_listは 1 要素以上で、PORTまたはPORTCHANNELへの leafref。PBH_TABLE.description、PBH_RULE.priority、PBH_RULE.hashは mandatory。- match field の多くは
0x...形式、または0x.../0x...形式の文字列 pattern で検証される。 PBH_RULE.hashはPBH_HASH、PBH_HASH.hash_field_listはPBH_HASH_FIELDへの leafref。
購読者¶
sonic-utilities/scripts/pbh(CLI 側スクリプト): CONFIG_DB の PBH table / rule / hash / hash-field を読み取り、ユーザ向け CLI を提供する(独立したpbhmgrdプロセスは master には存在しない)。orchagentのPbhOrch(sonic-swss/orchagent/pbhorch.cpp): CONFIG_DB の PBH 設定を直接 subscribe して SAI hash / ACL 相当のオブジェクトへ反映する。
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
PBH_HASH、PBH_HASH_FIELD、PORT、PORTCHANNEL - 関連 CLI:
config pbh - 関連 YANG:
sonic-pbh
値依存挙動マトリクス¶
PBH_RULE.packet_action¶
| 値 | SAI 挙動 |
|---|---|
SET_ECMP_HASH (デフォルト) |
マッチパケットに ECMP hash profile を適用 |
SET_LAG_HASH |
マッチパケットに LAG hash profile を適用 |
PBH_RULE.flow_counter¶
| 値 | 挙動 |
|---|---|
DISABLED (デフォルト) |
カウンタ無効 |
ENABLED |
ACL の packet / byte カウンタを有効化 |
PBH_HASH_FIELD.hash_field¶
| 値 | 抽出フィールド |
|---|---|
INNER_IP_PROTOCOL |
inner IP プロトコル番号 |
INNER_L4_DST_PORT |
inner L4 宛先ポート |
INNER_L4_SRC_PORT |
inner L4 送信元ポート |
INNER_DST_IPV4 |
inner 宛先 IPv4 アドレス |
INNER_SRC_IPV4 |
inner 送信元 IPv4 アドレス |
INNER_DST_IPV6 |
inner 宛先 IPv6 アドレス |
INNER_SRC_IPV6 |
inner 送信元 IPv6 アドレス |
ip_mask は IPv4 フィールドの場合 . 含む、IPv6 フィールドの場合 : 含むアドレスのみ受理 (must 条件)。
例外条件・特殊挙動¶
YANG スキーマ検証¶
PBH_HASH_FIELD.hash_field、sequence_id、PBH_RULE.priority、PBH_RULE.hash、PBH_TABLE.descriptionは mandatory。ip_maskはwhen+must条件: IPv4 フィールドに:を含む address や IPv6 フィールドに.を含む address は reject。PBH_HASH.hash_field_listはmin-elements 1。PBH_TABLE.interface_listはmin-elements 1。PBH_RULE.table_name/hashは leafref 参照整合性チェックあり。
consumer (pbhorch) 例外動作¶
- 重複 SET:
Failed to create PBH table(%s) in SAI: object already exists→return false。 - type / stage / ports / validate 失敗: 各
SWSS_LOG_ERROR+return false。 - SAI 能力チェック失敗 (ADD/UPDATE/REMOVE 不対応):
unsupported capabilities→return false。 - DEL で存在しない table:
object doesn't exist→return false。 packet_action未指定時 default:SET_ECMP_HASH。flow_counter未指定時 default:DISABLED。
関連リファレンス¶
引用元¶
運用ヒント¶
典型値¶
- key 形式:
PBH_TABLE|<name>、PBH_RULE|<table>|<rule>、PBH_HASH|<hash>、PBH_HASH_FIELD|<field>。 - match field は
0x.../0x.../0x...(mask 付) の hex 文字列。 packet_action=SET_ECMP_HASHが一般的。
よくある誤設定¶
priorityが他 rule と衝突して評価順序が予測不能。hashフィールドに未定義のPBH_HASHを指定し leafref エラー。interface_listに未登録のPORTCHANNELを入れる。