コンテンツにスキップ

BGP_ALLOWED_PREFIXES テーブル

概要

BGP_ALLOWED_PREFIXESdeployment ID 単位の prefix 許可リストCONFIG_DB に格納するテーブル1bgpcfgd の Jinja テンプレが読み込み、ToR / leaf スイッチで広告する prefix-list / route-map を生成する。Microsoft 由来の deployment 駆動構成 (T0/T1/T2 ロール) で利用される。

YANG モジュール 1 つで 4 つの list(key の組合せが異なる)を持つ:

  1. BGP_ALLOWED_PREFIXES_LIST (deployment, id)
  2. BGP_ALLOWED_PREFIXES_NEIGH_LIST (deployment, id, neighbor, neighbor_type)
  3. BGP_ALLOWED_PREFIXES_COM_LIST (deployment, id, community)
  4. BGP_ALLOWED_PREFIXES_NEIGH_COM_LIST (deployment, id, neighbor, neighbor_type, community)

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>BGP_ALLOWED_PREFIXES")]
  DM["bgpcfgd"]
  CDB --> DM

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key 構造

BGP_ALLOWED_PREFIXES|<deployment>|<id>[|<neighbor>|<neighbor_type>][|<community>]
  • <deployment> は固定文字列 DEPLOYMENT_ID (YANG pattern "DEPLOYMENT_ID")
  • <id> は uint32 の deployment id
  • <neighbor> は固定文字列 NEIGHBOR_TYPE (pattern "NEIGHBOR_TYPE")
  • <neighbor_type> は任意の neighbor タイプ名
  • <community> は community 文字列

パターンが固定文字列に見えるが、これは bgpcfgd テンプレ側で DEPLOYMENT_ID / NEIGHBOR_TYPE という文字列キーをそのまま使う構造になっているため。<id> などの可変部分で deployment を区別する。

フィールド(共通)

各 list は次の共通フィールドを持つ:

フィールド 説明
default_action rpolsets:routing-policy-action-type permit / deny
prefixes_v4 leaf-list of bgp-allowed-ipv4-prefix (ordered-by user) 許可する IPv4 prefix リスト
prefixes_v6 leaf-list of bgp-allowed-ipv6-prefix (ordered-by user) 許可する IPv6 prefix リスト

bgp-allowed-ipv4-prefix / bgp-allowed-ipv6-prefix<prefix> [le|ge <len>] という FRR-like の構文を許す独自 typedef。例: 10.0.0.0/8 le 32

制約

  • <deployment> キーは固定パターン DEPLOYMENT_ID / NEIGHBOR_TYPE に縛られるため、CONFIG_DB に書き込む際は必ずこのリテラルを使う。
  • prefix の le / ge 修飾子は IPv4 では 0..32、IPv6 では 0..128 の範囲のみ許可。
  • 4 種類の list は同じ container 配下にあるが、key の組合せが異なるので区別される。

購読者

  • bgpcfgd (docker-fpm-frr): deployment id ごとに BGP_ALLOWED_PREFIXES_* を読み、Jinja テンプレで ip prefix-list / route-map 文を vtysh に流す
  • bgpd (FRR): 生成された prefix-list / route-map を BGP neighbor / peer-group に適用

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: BGP_NEIGHBOR, BGP_PEER_GROUP, ROUTE_MAP_SET, DEVICE_METADATA (deployment_id)
  • 関連 CLI: 専用 CLI なし。sonic-cfggen / minigraph 経由で投入されるのが通常
  • 関連 YANG: sonic-bgp-allowed-prefix, sonic-routing-policy-sets

例外条件・特殊挙動

条件 挙動
機能が constants で無効化 SET/DEL 両方とも warn log 後 return True(消化)
key が正規表現パターン不一致 log_err 後 return False(消化されない、再試行の可能性)
data が None log_err 後 return False
prefixes_v4 に IPv6 アドレス log_err 後 return False
prefixes_v6 に IPv4 アドレス log_err 後 return False
prefixes_v4/prefixes_v6 が両方空 log_err 後 return False
default_action"permit"/"deny" 以外 log_err 後 return False
ge/le サフィックス付き prefix split して prefix 部分のみ IP 検証(サフィックスは FRR に委ねる)
DEL の key パターン不一致 log_err 後 return(値なし)、消化扱い

値依存挙動マトリクス

default_action (enum permit/deny)

bgpcfgdBGPAllowListMgr.__get_default_action_community() が値を community に変換してルートマップに適用する:

生成 community 効果 evidence
permit drop_community (constants 定義値) マッチしなかった prefix に drop_community を付与 managers_allow_list.py:773,780
deny no-export マッチしなかった prefix に no-export community を付与し、AS 外への再広告を抑制 managers_allow_list.py:774

default_action は prefix-list の末尾ルール (route-map permit 65535) に set community <value> additive として埋め込まれる (managers_allow_list.py:438-451)

フリーフォームフィールド

  • prefixes_v4 / prefixes_v6<prefix> [le|ge <len>] 形式の freeform 文字列リスト。FRR prefix-list 構文として vtysh に渡す

複合条件

  • default_action=denyno-export community 付与で他 AS への流出を防ぐ。ただし同一 AS 内の他ルータには広告される
  • NEIGHBOR_TYPE キーを含む variant は neighbor_type 単位で個別ポリシーを生成し、同一 deployment_id のグローバルポリシーと AND 結合 (managers_allow_list.py:__update_policy)

関連リファレンス

  • YANG: sonic-bgp-allowed-prefix

引用元

運用ヒント

典型値

  • key 形式: BGP_ALLOWED_PREFIXES|<vrf>|<peer>|<af>
  • ToR 配下の特定 prefix 集合のみを許可する利用が多い。prefixes は CSV または list。

よくある誤設定

  • prefix-list 名と表記揺れがあると FRR 側に反映されず広告フィルタが効かない。

確認コマンド

sonic-db-cli CONFIG_DB keys 'BGP_ALLOWED_PREFIXES|*'
vtysh -c 'show running-config bgp'