Protocol in Code · OSPF Session 09

Cost Picks The Winner

Session 09 では cost.py を読み、同じ prefix の route candidates から 1 本の winner がどう選ばれるかを追います。

IntermediateSession 09winner selectionOSPF

Session Goal

route candidates の比較順を説明できるようにする

OSPF は BGP ほど policy-heavy ではありませんが、同じ prefix に複数候補があれば winner を選びます。この session では比較順を small if chain として見ます。

Read The Source

まず route type、そのあと total cost を見る

winner = min(
    candidates,
    key=lambda route: (route_type_rank, route.total_cost, route.area_id, route.next_hop_router_id),
)

この teaching model では、まず intra-area を inter-area より先に見て、そのあと `total_cost` を比較します。ECMP や full SPF route preference 全体を網羅する session ではなく、比較順の骨格を見えるようにしています。

Walkthrough

同じ prefix の 3 candidate を比べる

cd protocol-in-code
PYTHONPATH=src python3 examples/ospf/session_09_walkthrough.py

walkthrough では 3 candidate から 1 winner を選び、さらに別 prefix を足して `select_best_routes()` が prefix ごとに winner を残すことも見ます。

Done Check

Session 09 を終えたと言える条件

  • 最初の比較順が total cost だと説明できる
  • 同じ prefix ごとに winner が 1 本になると説明できる
  • route derivation と winner selection を分けて話せる

Next Session

次は changed LSA が route table を揺らすところを見ます

Session 10 では topology change による recompute を読みます。LSA 変更が route diff へどうつながるかを見ます。