コンテンツにスキップ

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_namePBH_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.descriptionPBH_RULE.priorityPBH_RULE.hash は mandatory。
  • match field の多くは 0x... 形式、または 0x.../0x... 形式の文字列 pattern で検証される。
  • PBH_RULE.hashPBH_HASHPBH_HASH.hash_field_listPBH_HASH_FIELD への leafref。

購読者

  • sonic-utilities/scripts/pbh(CLI 側スクリプト): CONFIG_DB の PBH table / rule / hash / hash-field を読み取り、ユーザ向け CLI を提供する(独立した pbhmgrd プロセスは master には存在しない)。
  • orchagentPbhOrch (sonic-swss/orchagent/pbhorch.cpp): CONFIG_DB の PBH 設定を直接 subscribe して SAI hash / ACL 相当のオブジェクトへ反映する。

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: PBH_HASHPBH_HASH_FIELDPORTPORTCHANNEL
  • 関連 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_fieldsequence_idPBH_RULE.priorityPBH_RULE.hashPBH_TABLE.description は mandatory。
  • ip_maskwhen + must 条件: IPv4 フィールドに : を含む address や IPv6 フィールドに . を含む address は reject。
  • PBH_HASH.hash_field_listmin-elements 1PBH_TABLE.interface_listmin-elements 1
  • PBH_RULE.table_name / hash は leafref 参照整合性チェックあり。

consumer (pbhorch) 例外動作

  • 重複 SET: Failed to create PBH table(%s) in SAI: object already existsreturn false
  • type / stage / ports / validate 失敗: 各 SWSS_LOG_ERROR + return false
  • SAI 能力チェック失敗 (ADD/UPDATE/REMOVE 不対応): unsupported capabilitiesreturn false
  • DEL で存在しない table: object doesn't existreturn false
  • packet_action 未指定時 default: SET_ECMP_HASHflow_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 を入れる。

確認コマンド

sonic-db-cli CONFIG_DB keys 'PBH_*'
show pbh table
show pbh rule
show pbh statistics