Bridge
`2-Way` で止まる shared segment では代表選出が別に要る
Session 02 では、broadcast segment の一部 neighbor が `2-Way` で止まることを見ました。Session 03 はその続きで、shared segment 側にある DR / BDR election を独立ロジックとして読みます。
Read The Source
候補集合を作ってから highest を選ぶ
eligible = [candidate for candidate in candidates if candidate.priority > 0] declared_dr = [candidate for candidate in eligible if candidate.declared_dr] designated = _pick_highest(declared_dr) or _pick_highest(eligible)
この session の中心は、まず eligible set を作ってから leader を選ぶことです。priority だけでなく router ID まで含めると、tie-break がコードの比較順として見えます。
Walkthrough
declared DR / BDR があるケースを見る
cd protocol-in-code PYTHONPATH=src python3 examples/ospf/session_03_walkthrough.py
walkthrough では 4 candidate から DR, BDR, eligible routers を出して、priority 0 が消えることと declared role が先に見られることを確認します。
Done Check
Session 03 を終えたと言える条件
- priority 0 が選挙から落ちる理由を説明できる
- declared DR / BDR が比較順に入ると説明できる
- router ID が最後の ranking key になると説明できる
Next Session
次は DR が扱う link-state data の object 側へ移ります
Session 04 では Router-LSA 自体を object として読みます。なおこの最初の OSPF arc では Network-LSA と transit network vertex は省き、router-only graph に絞って進めます。