MACSEC_PROFILE テーブル
概要
IEEE 802.1AE MACsec のセキュリティプロファイルを定義するテーブル。
PORT.macsec (port 側の leaf) から名前参照され、macsecmgrd / wpa_supplicant ベースの MKA (MACsec Key Agreement) 実装が CAK/CKN を読んで MACsec SA を確立する。
データフロー (自動生成)
flowchart LR
CDB[("CONFIG_DB<br/>MACSEC_PROFILE")]
DM["macsecmgrd"]
CDB --> DM
APPDB[("APP_DB<br/>APP_DB")]
DM --> APPDB
SYNCD["syncd"]
APPDB --> SYNCD
SAI["SAI<br/>sai_macsec_api"]
SYNCD --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造
<name>: 1–128 文字。
フィールド
| フィールド |
型 |
既定 |
説明 |
priority |
uint8 |
255 |
MKA アクター優先度。小さいほど key server になりやすい |
cipher_suite |
enum GCM-AES-128 / GCM-AES-256 / GCM-AES-XPN-128 / GCM-AES-XPN-256 |
GCM-AES-128 |
データ暗号化アルゴリズム |
primary_cak |
hex 66 文字 (128-bit + KCK) または 130 文字 (256-bit) |
— (mandatory) |
プライマリ CAK |
primary_ckn |
hex 32 / 64 文字 |
— (mandatory) |
プライマリ CKN |
fallback_cak |
hex 66 / 130 文字 |
— |
プライマリ失敗時のフォールバック CAK |
fallback_ckn |
hex 32 / 64 文字 |
— |
フォールバック CKN |
policy |
integrity_only / security |
security |
認証のみか暗号化込みか |
enable_replay_protect |
boolean |
false |
リプレイ保護の有効化 |
replay_window |
uint32 |
— |
enable_replay_protect = true 時のみ意味を持つ |
send_sci |
boolean |
true |
送信フレームに SCI を含める |
rekey_period |
uint32 |
0 |
能動的 SAK 再生成周期 [秒]。0 で再生成しない |
制約 (YANG must)
fallback_cak を設定する場合は primary_cak と同じ長さ
fallback_ckn != primary_ckn
購読者
macsecmgrd (sonic-swss の MacSecMgr)、macsecorch
- 配下で
wpa_supplicant が MKA セッションを実行
関連 CONFIG_DB / YANG / CLI
- 関連 CONFIG_DB:
PORT (macsec フィールドでプロファイル名参照)
- 関連 YANG:
sonic-macsec
関連リファレンス
引用元
関連ページ
運用ヒント
典型値
- key 形式:
MACSEC_PROFILE|<profile-name>。
cipher_suite: GCM-AES-XPN-256、priority: 64、policy: security、rekey_period: 0(手動)。
よくある誤設定
- 鍵 (
primary_cak/fallback_cak) を 16/32B 以外で入れると MKA セッションが上がらない。
確認コマンド
sonic-db-cli CONFIG_DB keys 'MACSEC_PROFILE|*'
show macsec
値依存挙動マトリクス
policy
| 値 |
挙動 |
security(デフォルト) |
MKA SA 確立 + データ暗号化 |
integrity_only |
MKA SA 確立のみ。実データは平文(認証のみ) |
| その他 |
throw std::invalid_argument("Invalid policy : ...") → task_invalid_entry(破棄) |
cipher_suite(CAK 長と連動)
| 値 |
CAK 長 |
挙動 |
GCM-AES-128(デフォルト) |
66 hex 文字 |
128-bit AES 暗号化 |
GCM-AES-256 |
130 hex 文字 |
256-bit AES 暗号化 |
GCM-AES-XPN-128 |
66 hex 文字 |
Extended Packet Numbering 付き 128-bit AES |
GCM-AES-XPN-256 |
130 hex 文字 |
Extended Packet Numbering 付き 256-bit AES |
| CAK 長不一致 |
— |
throw std::invalid_argument("Invalid length for cipher_string : ...") → task_invalid_entry |
| その他 |
— |
throw std::invalid_argument("Invalid cipher_suite : ...") → task_invalid_entry |
rekey_period
| 値 |
挙動 |
0(デフォルト) |
能動的 SAK 再生成なし(MKA 自然な鍵更新のみ) |
| 正値 |
指定秒数ごとに SAK を再生成(mka_rekey_period として wpa_supplicant に設定) |
enable_replay_protect
| 値 |
挙動 |
false(デフォルト) |
リプレイ保護なし(macsec_replay_protect = 0) |
true |
リプレイ保護有効。replay_window の値も wpa_supplicant に渡す(macsec_replay_window = N) |
send_sci
| 値 |
挙動 |
true(デフォルト) |
送信フレームに SCI を含める |
false |
SCI を含めない(特定機器との相互接続で必要な場合がある) |
例外条件・特殊挙動
| 条件 |
挙動 |
policy に不正値 |
throw std::invalid_argument("Invalid policy : ...") → SWSS_LOG_WARN → task_invalid_entry(破棄・再試行なし) |
cipher_suite に不正値または CAK 長不正 |
throw std::invalid_argument("Invalid length for cipher_string : ...") → task_invalid_entry |
fallback_cak 設定時に fallback_ckn なし |
GetValue(ta, fallback_ckn) が false → フォールバックキー設定スキップ。MKA フォールバック機能が動作しない |
wpa_supplicant 起動失敗 |
SWSS_LOG_WARN("Cannot start the wpa_supplicant of the port '%s' : %s") → MACsec 無効のままポート継続動作 |
| フィールド値の型変換失敗 |
SWSS_LOG_ERROR("Cannot convert value(%s) in field(%s)") → デフォルト / 前回値を使用 |
| MACsec 有効化で例外発生 |
SWSS_LOG_WARN("Enable MACsec fail : %s") → ポートは非暗号化のまま継続 |
| MACsec 無効化失敗 |
SWSS_LOG_WARN("Disable MACsec fail : %s") → wpa_supplicant プロセスが残留する可能性 |