ROUTE_REDISTRIBUTE テーブル¶
概要¶
ROUTE_REDISTRIBUTE は FRR ルーティングデーモン間の経路再配布ポリシーを CONFIG_DB に保持するテーブル。YANG モジュール sonic-route-common が定義し、frrcfgd が購読して vtysh コマンドへ変換する1。現在 dst_protocol は bgp のみサポートされており、connected・static・ospf・ospf3 のいずれかのプロトコルを BGP へ再配布する用途に限定されている2。
フィールドのコード由来デフォルト¶
デフォルト値一覧¶
| フィールド | 型 | 既定値 | 省略可否 | コード根拠 |
|---|---|---|---|---|
vrf_name |
string (key) | — | 必須 (key) | YANG key 定義1 |
src_protocol |
string (key) | — | 必須 (key) | YANG key 定義1 |
dst_protocol |
string (key) | — | 必須 (key) | YANG key 定義1 |
addr_family |
string (key) | — | 必須 (key) | YANG key 定義1 |
route_map |
leaf-list string | 省略可 (absent) | 任意 | YANG optional + frrcfgd L1979 +route_map2 |
metric |
uint32 | 省略可 (absent) | 任意 | YANG optional + frrcfgd L1979 ++metric2 |
解説¶
metric および route_map はどちらも YANG 上で任意フィールド(必須制約なし)。frrcfgd の route_redist_key_map では ++metric / +route_map のプレフィクス表記により「フィールドが absent の場合は FRR コマンドへの引数出力をスキップ」する実装になっている2。
# frrcfgd.py L1979
route_redist_key_map = [
(['protocol', '++metric', '+route_map'],
'{no:no-prefix}redistribute {} {:redist-metric} {:redist-route-map}',
hdl_route_redist_set)
]
metric省略時 → FRR コマンドredistribute connectedのみ(metric 句なし)route_map省略時 → FRR コマンドにroute-map句なし
テスト実例¶
sample_config_db.json での最小構成:
route_map も metric も省略した状態が有効エントリ。
key 構造¶
| key 要素 | 取りうる値 |
|---|---|
vrf_name |
default または Vrf... 形式の VRF 名 |
src_protocol |
connected / static / ospf / ospf3 |
dst_protocol |
bgp(現在このみ) |
addr_family |
ipv4 / ipv6 |
主要フィールド¶
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
route_map |
string (leaf-list, max 1) | 省略可 | 再配布時に適用する ROUTE_MAP フィルタ名 |
metric |
uint32 | 省略可 | 再配布経路に付与するメトリック値 |
制約¶
dst_protocolはbgpのみ有効。frrcfgdはbgp以外を受け取るとエラーログを出力してスキップする2。route_mapは最大 1 エントリ(YANGmax-elements 1)1。- IPv6 かつ
src_protocol=ospf3の場合、frrcfgdが FRR コマンド生成時にospf6へ内部変換する2。 vrf_nameはdefaultまたは VRF テーブルへの leafref。
購読者・処理フロー¶
frrcfgd(sonic-frr-mgmt-framework)が ROUTE_REDISTRIBUTE テーブルを購読し、変更を以下のように FRR へ反映する2。
- key を
vrf_name|src_protocol|dst_protocol|addr_familyの 4 要素に分解 router bgp <asn> vrf <vrf>→address-family <af> unicastのコンテキストに移行redistribute <src_proto> [metric <N>] [route-map <name>]を発行- 削除時は事前に
no redistribute <src_proto>でリセットしてから再設定
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>ROUTE_REDISTRIBUTE")]
FRRCFGD["frrcfgd"]
CDB --> FRRCFGD
FRR["FRR bgpd<br/>redistribute"]
FRRCFGD --> FRR
凡例
CONFIG_DB から FRR までの典型経路を示すミニ図。
関連 CONFIG_DB / YANG¶
- 関連 CONFIG_DB:
VRF、ROUTE_MAP - 関連 YANG:
sonic-route-common、sonic-route-map、sonic-vrf
引用元¶
-
YANG 定義:
sonic-route-common.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-route-common.yang ↩↩↩↩↩↩ -
ハンドラ実装:
frrcfgd.py. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-frr-mgmt-framework/frrcfgd/frrcfgd.py ↩↩↩↩↩↩↩