SWITCH_HASH テーブル¶
概要¶
ECMP / LAG ハッシュに使うフィールド集合とハッシュアルゴリズムをスイッチ全体で設定する Generic Hash 設定テーブル1。
orchagent が CONFIG_DB から読んで SAI SAI_SWITCH_ATTR_ECMP_DEFAULT_HASH_* / SAI_SWITCH_ATTR_LAG_DEFAULT_HASH_* 系属性として SAI に push する。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>SWITCH_HASH")]
DM["SwitchOrch"]
CDB --> DM
SAI["SAI<br/>sai_hash_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
シングルトン (GLOBAL の 1 行のみ)。
フィールド¶
| フィールド | 型 | 説明 |
|---|---|---|
ecmp_hash |
leaf-list of hash-field enum |
ECMP パケットを分散させるためのハッシュフィールド集合 |
lag_hash |
leaf-list of hash-field enum |
LAG メンバ間分散用のハッシュフィールド集合 |
ecmp_hash_algorithm |
hash-algorithm enum |
ECMP に使うハッシュアルゴリズム (CRC / XOR / Random / CRC_32LO 等、sonic-types) |
lag_hash_algorithm |
hash-algorithm enum |
LAG に使うハッシュアルゴリズム |
hash-field enum (sonic-hash.yang):
IN_PORT / DST_MAC / SRC_MAC / ETHERTYPE / VLAN_ID / IP_PROTOCOL / DST_IP / SRC_IP / L4_DST_PORT / L4_SRC_PORT / INNER_* 同等 / IPV6_FLOW_LABEL
ordered-by user が付くため、ユーザー設定順が保たれる (実装上はベンダーによっては順序を無視するが、YANG 上の意味は保存される)。
購読者¶
orchagent(SwitchOrchの Generic Hash 拡張)
関連 CONFIG_DB / YANG / CLI¶
- 関連 CLI:
config switch-hash global ecmp/config switch-hash global lag - 関連 YANG:
sonic-hash - 関連:
FG_NHG(fine-grained ECMP),PORT.lag_hash等の per-port ハッシュは別経路
関連リファレンス¶
- YANG:
sonic-hash - CLI:
config switch-hash
引用元¶
関連ページ¶
値依存挙動マトリクス¶
ecmp_hash / lag_hash — hash-field 全列挙¶
IN_PORT / DST_MAC / SRC_MAC / ETHERTYPE / VLAN_ID / IP_PROTOCOL / DST_IP / SRC_IP / L4_DST_PORT / L4_SRC_PORT / INNER_DST_MAC / INNER_SRC_MAC / INNER_ETHERTYPE / INNER_IP_PROTOCOL / INNER_DST_IP / INNER_SRC_IP / INNER_L4_DST_PORT / INNER_L4_SRC_PORT / IPV6_FLOW_LABEL
ecmp_hash_algorithm / lag_hash_algorithm — hash-algorithm 全列挙¶
CRC / XOR / RANDOM / CRC_32LO / CRC_32HI / CRC_CCITT / CRC_XOR
| フィールド | 値 | SAI 挙動 |
|---|---|---|
ecmp_hash / lag_hash |
ASIC 非サポートフィールドを含む | SET 拒否 (capability is not supported) |
ecmp_hash_algorithm |
ASIC 非サポートアルゴリズム | SET 拒否 (同上) |
| 任意フィールド | DEL | 拒否 (operation is not supported) |
例外条件・特殊挙動¶
- ASIC capability 未サポート:
SwitchOrchが SAI から取得した capability に設定値が含まれない場合、"Failed to validate switch ECMP/LAG hash: capability is not supported"を LOG_ERROR して SET を拒否する(return false)。適用されず CONFIG_DB の値は保留状態のまま。 - SAI set 失敗: SAI API 呼び出しが
SAI_STATUS_SUCCESS以外を返すと"Failed to set switch ECMP/LAG hash in SAI"を LOG_ERROR して処理を中断する。 - DEL 操作不可:
ecmp_hash/lag_hash/ecmp_hash_algorithm/lag_hash_algorithmはいずれも DEL 操作をサポートしない。削除を試みると"Failed to remove switch ECMP/LAG hash configuration: operation is not supported"を LOG_ERROR してreturn false。 - ASIC/CONFIG_DB 乖離: 初期化時に ASIC 側と CONFIG_DB 側の値が食い違っている場合、SET 時に
"Failed to set switch hash: ASIC and CONFIG DB are diverged"、DEL 時に"Failed to remove switch hash: operation is not supported: ASIC and CONFIG DB are diverged"を LOG_ERROR。 - 空キー: key が空文字列だと
"Failed to parse switch hash key: empty string"を LOG_ERROR してエントリをスキップする。
運用ヒント¶
典型値¶
- key 形式:
SWITCH_HASH|GLOBAL。 ecmp_hash:DST_MAC,SRC_MAC,ETHERTYPE,IP_PROTOCOL,SRC_IP,DST_IP,L4_SRC_PORT,L4_DST_PORT。LAG hash も同類。
よくある誤設定¶
- hash 設定変更後
config saveを忘れて reboot 後に既定値へ戻る。