Runbook: 経路は RIB にあるが FIB / ASIC に降りない¶
HLD-only
FRR zebra → FPM → fpmsyncd → APPL_DB → routeorch → ASIC_DB の標準パスに基づく運用ノート。
症状¶
vtysh -c "show ip route <prefix>"に該当経路が出るが*(FIB selected) が付かないshow ip route <prefix>(SONiC 側) に出ない、または出るのに traffic は DROPAPPL_DB ROUTE_TABLEに entry が無い
切り分けフロー¶
flowchart TD
A[RIB にあるが FIB に無い] --> B{zebra で selected?}
B -- No --> C[admin distance / route-map / nexthop 解決確認]
B -- Yes --> D{APPL_DB ROUTE_TABLE に出る?}
D -- No --> E[fpmsyncd / FPM socket 確認]
D -- Yes --> F{ASIC_DB SAI_ROUTE_ENTRY?}
F -- No --> G[routeorch / CRM / sai-table-full]
F -- Yes --> H[forwarding 側を確認: ACL/NAT/MTU]
確認コマンド¶
# FRR (RIB)
docker exec bgp vtysh -c "show ip route <prefix>"
docker exec bgp vtysh -c "show ip route <prefix> json" | python3 -m json.tool | head -40
# zebra の FIB 選択
docker exec bgp vtysh -c "show ip route <prefix>" | grep -E "^[A-Z]\*|^[A-Z] "
# SONiC 側
show ip route <prefix>
sonic-db-cli APPL_DB hgetall "ROUTE_TABLE:<prefix>"
sonic-db-cli ASIC_DB keys "ASIC_STATE:SAI_OBJECT_TYPE_ROUTE_ENTRY:*" | grep "<prefix>"
# fpmsyncd の状態
docker exec swss supervisorctl status fpmsyncd
sudo grep -i fpmsyncd /var/log/syslog | tail -50
# CRM (FIB capacity)
crm show resources route
crm show resources nexthop
# Nexthop 解決
docker exec bgp vtysh -c "show ip nht"
ip neigh | grep <nexthop_ip>
よくある原因¶
- Nexthop が unresolved — ARP が無く、zebra が FIB に入れない
- fpmsyncd と zebra の FPM socket 断 — FRR の FPM が disable / socket reconnect ループ
- routeorch の bulk pending — ASIC への書き込みが queue 滞留中
- CRM route / nexthop 枯渇 —
crm show resourcesでused == max - ASIC FIB table full —
sai-table-full.md参照 - 同一 prefix を別 source が上書き — static route と BGP route の admin distance
- Blackhole / Null route —
null0が選択されていて意図せず DROP
FRR zebra → FPM → fpmsyncd → APPL_DB → routeorch → ASIC_DB のパイプライン構造は sonic-frr の zebra_fpm.c と sonic-swss の fpmsyncd.cpp / routeorch.cpp の組合せで実装される1。