Protocol in Code · OSPF Session 12

Build The Toy OSPF Speaker Loop

Session 12 では speaker.py を読み、Hello, database exchange completion, DR election state, Router-LSA receive, flooding scope, summary creation, summary import を 1 つの speaker object に戻します。

IntermediateSession 12speaker loopOSPF

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 は次段の拡張テーマです。