Protocol in Code · OSPF Session 03

DR And BDR Election

Session 03 では dr_election.py を読み、shared segment の代表選出を candidate filtering と ranking として見ます。

IntermediateSession 03election logicOSPF

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 に絞って進めます。