STATIC_ROUTE テーブル¶
概要¶
STATIC_ROUTE は静的経路を CONFIG_DB に保持するテーブル。YANG では template 形式 (STATIC_ROUTE|<prefix>) と VRF-aware 形式 (STATIC_ROUTE|<vrf_name>|<prefix>) の 2 つの list が定義されている1。nexthop、出力 interface、BGP への advertise、BFD、administrative distance、nexthop VRF、blackhole 指定を扱う。テーブル名の実装側定数は schema.h も参照する2。
データフロー (自動生成)¶
flowchart LR
CDB[("CONFIG_DB<br/>STATIC_ROUTE")]
DM["fpmsyncd"]
CDB --> DM
APPDB[("APP_DB<br/>APP_ROUTE_TABLE")]
DM --> APPDB
SYNCD["syncd"]
APPDB --> SYNCD
SAI["SAI<br/>sai_route_api"]
SYNCD --> SAI
凡例
CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。
key 構造¶
<prefix> は IPv4 / IPv6 prefix。<vrf_name> は default、mgmt、または Vrf... 形式。
主要フィールド¶
| フィールド | 型 | 既定値 | 説明 |
|---|---|---|---|
nexthop |
string | - | nexthop IP。interface route では 0.0.0.0 を指定する想定 |
ifname |
string | - | 出力 interface |
advertise |
comma-separated boolean string | false |
BGP へ広告するか。nexthop ごとに指定可能 |
bfd |
comma-separated boolean string | false |
nexthop ごとの BFD 監視有効化。template 形式のみ |
distance |
comma-separated uint8 string | 0 |
administrative distance。VRF-aware 形式のみ |
nexthop-vrf |
comma-separated VRF string | - | VRF leaking 用 nexthop VRF。VRF-aware 形式のみ |
blackhole |
comma-separated boolean string | false |
一致パケットを破棄する blackhole route。VRF-aware 形式のみ |
制約¶
advertise、bfd、blackholeはtrue/falseのカンマ区切り文字列。distanceは 0..255 のカンマ区切り文字列。nexthop-vrfはdefault、mgmt、Vrf...のカンマ区切り文字列。- YANG の VRF-aware key は
vrf_name prefix。template 形式にはvrf_nameが無い。
購読者¶
staticd/zebra(FRR): SONiC の設定生成パスを通じて static route を FRR に反映する。bgpcfgd/ routing config パス:advertiseが有効な static route を BGP 広告対象として扱う。orchagent/ route orch: kernel / FRR から APPL_DB 経由で転送経路を SAI route へ反映する。
関連 CONFIG_DB / YANG / CLI¶
- 関連 CONFIG_DB:
VRF、INTERFACE、PORTCHANNEL_INTERFACE、VLAN_INTERFACE、LOOPBACK_INTERFACE - 関連 CLI:
config route - 関連 YANG:
sonic-static-route
関連リファレンス¶
- YANG:
sonic-static-route - CLI:
config route
引用元¶
運用ヒント¶
典型値¶
- key 形式:
STATIC_ROUTE|<vrf>|<prefix>(例STATIC_ROUTE|default|10.0.0.0/24)。 nexthop: カンマ区切り(ECMP 可)。distance: 1(規定)。ifname: 出力 IF(直接接続経路向け)。
よくある誤設定¶
nexthopの IP が到達不可だと FRR が経路を選択せず、show ip routeで表示されない。- BGP 学習経路と同じ prefix を static で入れると AD 値次第で意図しない切り替わり。
確認コマンド¶
値依存挙動マトリクス¶
advertise 値別挙動¶
| 値 | 挙動 |
|---|---|
false |
BGP 広告なし(デフォルト)。ROUTE_ADVERTISE_DISABLE_TAG を付与して FRR に渡す。 |
true |
BGP に経路広告。ROUTE_ADVERTISE_ENABLE_TAG を付与。 |
bfd 値別挙動¶
| 値 | 挙動 |
|---|---|
true |
staticroutebfd が BFD セッションを監視。全セッション down で APPL_DB から経路削除。bgpcfgd の StaticRouteMgr は処理をスキップ(staticroutebfd 側が担う)。 |
false |
BFD 監視なし(デフォルト)。bgpcfgd が通常処理。 |
blackhole 値別挙動¶
| 値 | 挙動 |
|---|---|
true |
blackhole route(パケット破棄)。nexthop / ifname 不要。FRR に blackhole で展開。 |
false |
通常経路(デフォルト)。nexthop が必要。 |
distance 値別挙動¶
| 値 | 挙動 |
|---|---|
0 |
デフォルト AD(FRR は static デフォルト AD = 1 を使用)。 |
| 1..255 | 指定の AD で FRR 経路テーブルに挿入。値が小さいほど優先度高。 |
例外条件・特殊挙動¶
- IpNextHopSet 構築例外: ネクストホップ解析中に例外が発生した場合
log_critを出してreturn Falseでスキップ。その静的経路は FRR に設定されない。2 - APPL_DB の key フォーマット不正: APPL_DB の key で VRF を含む場合
<vrf>:<prefix>形式を期待し、コロン区切りで 2 要素に分割できない場合はValueErrorで処理中断。2 - BFD 有効時の APPL_DB 削除スキップ:
bfd=trueの静的経路で APPL_DB から削除イベントが来ても、CONFIG_DB に経路が残っている場合は FRR からの削除をスキップする(staticroutebfd との race condition 防止)。2 - BGP ASN 未設定時の redistribute 保留: 最初の静的経路設定時に
bgp_asnが DEVICE_METADATA に存在しない場合、redistribute static コマンドはvrf_pending_redistributionに保留されて後で適用される。2 - BFD セッション全断時の自動削除: BFD が有効な nexthop のすべての BFD セッションが down になると APPL_DB から経路エントリが削除されて FRR からも経路が削除される。2
-
YANG 定義:
sonic-static-route.yang. https://github.com/sonic-net/sonic-buildimage/blob/9ea932ec2e18f35e58268ec2e4456b1d4afd65cd/src/sonic-yang-models/yang-models/sonic-static-route.yang ↩ -
bgpcfgd StaticRouteMgr 実装:
sonic-buildimage/src/sonic-bgpcfgd/bgpcfgd/managers_static_rt.py. https://github.com/sonic-net/sonic-buildimage/blob/master/src/sonic-bgpcfgd/bgpcfgd/managers_static_rt.py ↩↩↩↩↩↩