BGP_DEVICE_GLOBAL テーブル
概要
スイッチ全体(VRF 横断)の BGP 動作スイッチを保持する。BGP_GLOBALS が VRF 単位なのに対し、BGP_DEVICE_GLOBAL は装置全体スコープ。TSA (Traffic-Shift-Away)、W-ECMP (BGP link-bandwidth ベース重み付き ECMP)、IDF (Inter-DC Fabric) 隔離状態、confederation の代表設定を持つ。
データフロー (自動生成)
flowchart LR
CDB[("CONFIG_DB<br/>BGP_DEVICE_GLOBAL")]
DM["BgpGlobalStateOrch"]
CDB --> DM
SAI["SAI<br/>sai_switch_api"]
DM --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造
BGP_DEVICE_GLOBAL|STATE
BGP_DEVICE_GLOBAL|CONFED
二つの固定キーを持つ container 型。
STATE のフィールド
| フィールド |
型 |
デフォルト |
説明 |
tsa_enabled |
boolean |
false |
true で外部隣接へ経路広告を停止 (TSA) |
wcmp_enabled |
boolean |
false |
BGP link-bandwidth W-ECMP 有効化 |
idf_isolation_state |
enum isolated_no_export / isolated_withdraw_all / unisolated |
unisolated |
IDF 隔離状態 |
CONFED のフィールド
| フィールド |
型 |
説明 |
asn |
uint32 (1..2^32-1) |
confederation AS 番号 |
peers |
string |
confederation 内の sub-AS をセミコロン区切りで列挙 |
購読者
bgpcfgd: STATE / CONFED を読み出し vtysh コマンドに変換
frr-mgmt-framework (frr_mgmt_framework_config = true 時)
- TSA / W-ECMP は
bgpcfgd の TsaHandler / WcmpHandler が直接担当
関連 CONFIG_DB / YANG / CLI
例外条件・特殊挙動
| 条件 |
挙動 |
data が None |
log_err 後 return False |
tsa_enabled が "true"/"false" 以外 |
log_err 後 FRR push しない(return False) |
wcmp_enabled が "true"/"false" 以外 |
log_err 後 FRR push しない(return False) |
chassis_tsa が "true" |
個別デバイスの TSA 操作をスキップ(シャーシ全体 TSA が優先) |
| キャッシュと同一値 |
is_update_required() が False → FRR push スキップ |
| Jinja2 テンプレートレンダリング失敗 |
log_err 後 return False、FRR 未反映 |
DEVICE_METADATA.localhost.type 未設定 |
switch_role が空文字列のまま処理継続(テンプレート条件分岐依存) |
idf_isolation_state の不正値 |
idf handler 側での検証に委ねる(DeviceGlobalCfgMgr では未検証) |
値依存挙動マトリクス
idf_isolation_state (enum) — BGP_DEVICE_GLOBAL|STATE
| 値 |
FRR ルートマップ効果 |
evidence |
unisolated (既定) |
idf_unisolate.conf.j2 を適用。CHECK_IDF_ISOLATION ルートマップは標準状態 |
managers_device_global.py:IDF_DEFAULTS; idf_unisolate.conf.j2 |
isolated_no_export |
idf_isolate.conf.j2 適用。route-map CHECK_IDF_ISOLATION permit 10 に set community no-export additive を追加 |
idf_isolate.conf.j2:17 |
isolated_withdraw_all |
idf_isolate.conf.j2 適用。route-map CHECK_IDF_ISOLATION deny 4 を追加し残 prefix をすべてドロップ |
idf_isolate.conf.j2:11 |
tsa_enabled (boolean) — BGP_DEVICE_GLOBAL|STATE
| 値 |
FRR ルートマップ効果 |
evidence |
false (既定) |
bgpd.tsa.unisolate.conf.j2 を適用。TSB 状態 (通常広告) |
managers_device_global.py:TSA_DEFAULTS |
true |
bgpd.tsa.isolate.conf.j2 を適用。外部 BGP 隣接への route-map に deny 40 を挿入し経路広告を停止 |
managers_device_global.py:isolate_unisolate_device |
wcmp_enabled (boolean) — BGP_DEVICE_GLOBAL|STATE
| 値 |
FRR ルートマップ効果 |
evidence |
false (既定) |
TO_BGP_PEER_V4/V6 permit 100 に no set extcommunity bandwidth |
bgpd.wcmp.conf.j2:6 |
true |
TO_BGP_PEER_V4/V6 permit 100 に set extcommunity bandwidth num-multipaths |
bgpd.wcmp.conf.j2:5 |
複合条件
tsa_enabled=true かつ chassis_tsa が "true" (chassis-level TSA) → 個別デバイスの TSA 操作をスキップ (chassis TSA 優先) (managers_device_global.py:105-106)
idf_isolation_state=isolated_no_export と isolated_withdraw_all の違い: no_export は AS 外への再広告のみ抑制、withdraw_all は deny 4 で隣接への送信そのものを遮断
関連リファレンス
引用元
運用ヒント
典型値
- key:
BGP_DEVICE_GLOBAL|STATE / BGP_DEVICE_GLOBAL|CONFED。
STATE: tsa_enabled=false / wcmp_enabled=false / idf_isolation_state=unisolated が通常運用。
- TSA メンテ時のみ
tsa_enabled=true。
よくある誤設定
- TSA を有効にしたまま戻し忘れて外部広告が長時間停止する。
wcmp_enabled=true を W-ECMP 非対応のプラットフォームで設定し、効果が出ず混乱する。
確認コマンド
sonic-db-cli CONFIG_DB hgetall 'BGP_DEVICE_GLOBAL|STATE'
TSA -s # TSA 状態確認
vtysh -c "show running-config bgpd" | grep -i ecmp