コンテンツにスキップ

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 は DROP
  • APPL_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>

よくある原因

  1. Nexthop が unresolvedARP が無く、zebra が FIB に入れない
  2. fpmsyncdzebraFPM socket 断FRRFPM が disable / socket reconnect ループ
  3. routeorch の bulk pending — ASIC への書き込みが queue 滞留中
  4. CRM route / nexthop 枯渇crm show resourcesused == max
  5. ASIC FIB table fullsai-table-full.md 参照
  6. 同一 prefix を別 source が上書き — static route と BGP route の admin distance
  7. Blackhole / Null routenull0 が選択されていて意図せず DROP

FRR zebraFPMfpmsyncdAPPL_DB → routeorch → ASIC_DB のパイプライン構造は sonic-frrzebra_fpm.csonic-swssfpmsyncd.cpp / routeorch.cpp の組合せで実装される1

関連 reference / topics


  1. sonic-net/sonic-frr zebra/zebra_fpm.c (FPM client / Netlink encoding) と sonic-net/sonic-swss fpmsyncd/fpmsyncd.cpp (FPM server / APPL_DB writer)、orchagent/routeorch.cpp (APPL_DBASIC_DB) で経路が伝播する。