Session Goal
OSPF 編を gated speaker-shaped object として閉じる
Session 01-11 で分けてきた gate, election, flood, LSDB, SPF, routes, summary を、最後に 1 つの speaker object へ戻します。ここで OSPF 編の読み方が「部品集」から「gated speaker loop」になります。
Read The Source
Hello のあとに exchange 完了と local / remote LSA path が続く
def receive_hello(...): ... def complete_database_exchange(...): ... def originate_router_lsa(...): ... def receive_router_lsa(...): ... def summarize_to_area(...): ... def import_summaries(...): ...
この object は packet parser ではありません。OSPF の主要 event をいくつかの method に分けて持ち、内部 state と route view を更新する teaching model です。
Walkthrough
DR election, Hello, exchange, Router-LSA receive, summary import を通す
cd protocol-in-code PYTHONPATH=src python3 examples/ospf/session_12_walkthrough.py
walkthrough では `dr`, `hello_state`, `exchange_state`, `flooded_interfaces`, `summary_prefixes`, `imported_area_1` を順に見て、Session 03 と 05 も speaker loop に戻っていることを確認します。
Done Check
Session 12 を終えたと言える条件
- OSPF speaker を state plus gated event methods として説明できる
- Hello のあとに database exchange completion が必要だと説明できる
- local Router-LSA origination と remote Router-LSA receive を分けて説明できる
- summary create / import が post-SPF の後半分岐だと説明できる
Next Step
これで OSPF core 12 sessions が一周しました
ここまでで OSPF を `Hello -> adjacency -> election -> LSA -> flood -> LSDB -> SPF -> route -> cost -> recompute -> area -> speaker` の一本線で読めるようになります。なおこの first arc は router-only graph を使う teaching model で、Network-LSA と transit network vertex は次段の拡張テーマです。