コンテンツにスキップ

SWITCH_HASH テーブル

概要

ECMP / LAG ハッシュに使うフィールド集合とハッシュアルゴリズムをスイッチ全体で設定する Generic Hash 設定テーブル1orchagentCONFIG_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 構造

SWITCH_HASH|GLOBAL

シングルトン (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 上の意味は保存される)。

購読者

  • orchagentSwitchOrch の 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 ハッシュは別経路

関連リファレンス

引用元

関連ページ

値依存挙動マトリクス

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 後に既定値へ戻る。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'SWITCH_HASH|GLOBAL'
show switch-hash global