ROUTE_MAP テーブル¶
概要¶
ルーティングポリシー (route-map) の statement 単位の定義テーブル。BGP neighbor / peer-group や redistribute から名前で参照される。frr-mgmt-framework (DEVICE_METADATA.frr_mgmt_framework_config = true) が CONFIG_DB を購読し FRR route-map コマンドに変換する1。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>ROUTE_MAP")]
DM["bgpcfgd"]
CDB --> DM
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<stmt_name> は uint16 (1..65535)。同一 <name> で複数の statement を順序づけて評価する。
名前の一覧は別テーブル ROUTE_MAP_SET|<name> で管理する。
主要フィールド¶
| フィールド | 型 | 説明 |
|---|---|---|
route_operation |
enum (PERMIT/DENY) |
permit/deny |
match_interface |
union leafref PORT/PORTCHANNEL/LOOPBACK_INTERFACE/Vlan pattern |
interface match |
match_prefix_set |
leafref PREFIX_SET.name |
IPv4 prefix list match |
match_ipv6_prefix_set |
leafref PREFIX_SET.name |
IPv6 prefix list match |
match_protocol |
string | bgp/connected/ospf/ospf3/static |
match_next_hop_set |
leafref PREFIX_SET.name |
next-hop match |
match_src_vrf |
union (default/leafref VRF.name) |
source VRF match |
match_neighbor |
leaf-list union | IP / interface match |
match_tag |
leaf-list uint32 | tag match |
match_med / match_origin / match_local_pref |
numeric / string / uint32 | BGP attribute match |
match_community |
leafref COMMUNITY_SET.name |
BGP community match |
match_ext_community |
leafref EXTENDED_COMMUNITY_SET.name |
extended community match |
match_as_path |
leafref AS_PATH_SET.name |
AS-path match |
call_route_map |
leafref ROUTE_MAP_SET.name |
別の route-map 呼出し |
set_origin |
string | BGP origin set |
set_local_pref |
uint32 | local-pref set |
set_med |
uint32 | MED set |
set_metric_action |
enum metric-action-type |
metric 操作種別 |
set_metric |
uint32 | metric 値 |
set_next_hop |
string | IP nexthop set |
set_ipv6_next_hop_global / set_ipv6_next_hop_prefer_global |
string / boolean | IPv6 nexthop 操作 |
set_repeat_asn / set_asn / set_asn_list |
numeric / string | AS prepend |
set_community_inline / set_community_ref |
leaf-list / leafref | community 設定 |
set_ext_community_inline / set_ext_community_ref |
leaf-list / leafref | ext community 設定 |
set_tag |
uint32 | tag 設定 |
metric-action-type: METRIC_SET_VALUE, METRIC_ADD_VALUE, METRIC_SUBTRACT_VALUE, METRIC_SET_RTT, METRIC_ADD_RTT, METRIC_SUBTRACT_RTT。
購読者¶
frr-mgmt-framework: CONFIG_DB →vtysh route-mapコマンドbgpcfgd(テンプレ経路): 簡易な BGP テンプレ展開時に間接利用
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
ROUTE_MAP_SET(名前一覧)、PREFIX_SET、COMMUNITY_SET、AS_PATH_SET、BGP_NEIGHBOR_AF、BGP_PEER_GROUP_AF - 関連 CLI:
config route_map、vtysh -c "show route-map" - 関連 YANG:
sonic-route-map、sonic-routing-policy-sets
関連リファレンス¶
- YANG:
sonic-route-map/sonic-routing-policy-sets - CLI:
config route_map
引用元¶
運用ヒント¶
典型値¶
- key 形式:
ROUTE_MAP|<name>|<seq>。 route_operation:permit、match_*で条件、set_*で属性変更。BGP で in/out に適用。
よくある誤設定¶
- 末尾の暗黙 deny を忘れて意図せず全 prefix を drop する。
確認コマンド¶
値依存挙動マトリクス¶
route_operation 値別挙動¶
| 値 | 挙動 |
|---|---|
PERMIT |
match した経路を許可し、set_* アクションを適用。 |
DENY |
match した経路を拒否(DROP)。set_* アクションは無視される。 |
set_metric_action 値別挙動¶
| 値 | 挙動 |
|---|---|
METRIC_SET_VALUE |
MED を set_metric の値に設定。 |
METRIC_ADD_VALUE |
MED に set_metric を加算。 |
METRIC_SUBTRACT_VALUE |
MED から set_metric を減算。 |
METRIC_SET_RTT |
MED を RTT 値に設定。 |
METRIC_ADD_RTT |
MED に RTT を加算。 |
METRIC_SUBTRACT_RTT |
MED から RTT を減算。 |
BGPRouteMapMgr が処理する key 値別挙動¶
| key 値 | 挙動 |
|---|---|
FROM_SDN_SLB_ROUTES |
有効(SDN SLB ユースケース専用)。 |
FROM_SDN_APPLIANCE_ROUTES |
有効(SDN Appliance ユースケース専用)。 |
| その他 | log_err("BGPRouteMapMgr:: Invalid key for route-map %s") → 拒否。汎用 route-map は bgpcfgd テンプレート経由で管理。 |
例外条件・特殊挙動¶
- BGPRouteMapMgr は固定 2 キーのみ処理:
FROM_SDN_SLB_ROUTES/FROM_SDN_APPLIANCE_ROUTES以外の key はlog_err("BGPRouteMapMgr:: Invalid key for route-map %s")で拒否される。これらは SDN ユースケース専用であり、汎用 route-map の CONFIG_DB 管理は bgpcfgd の ROUTE_MAP テーブル consumer ではなく bgpcfgd テンプレートが担う。2 - community_id 形式不正:
<0-65535>:<0-65535>形式でない場合log_errしてスキップ。2 - BGP ASN 未設定 (constants):
deployment_id_asn_mapが constants に存在しないか、deployment_id=2のエントリがない場合は route-map の更新をスキップする(既存 route-map は残る)。2 - シーケンス番号枯渇:
managers_allow_list.pyとの連携でシーケンス番号が不足した場合RuntimeError("No free sequence numbers")で追加が失敗する。2
-
YANG 定義:
sonic-route-map.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-route-map.yang ↩ -
bgpcfgd RouteMapMgr 実装:
sonic-buildimage/src/sonic-bgpcfgd/bgpcfgd/managers_rm.py. https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-bgpcfgd/bgpcfgd/managers_rm.py ↩↩↩↩