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 へどうつながるかを見ます。