Bridge
Hello gate の出力を adjacency state へ載せる
Session 01 の出力は `accepted` と `saw_self` でした。Session 02 ではまずその 2 つを `Init` / `2-Way` / `ExStart` に変え、そのあと database exchange の進み具合を見て `Loading` / `Full` まで進めます。
Read The Source
Hello phase と exchange phase を分けて読む
if not inputs.should_form_full_adjacency:
return NeighborState.TWO_WAY
if not inputs.request_list_empty:
return NeighborState.LOADING
return NeighborState.FULLこの session で大事なのは、Hello event だけで `Full` になるわけではないことです。Hello phase は `2-Way` か `ExStart` まで、`Full` は DBD / request list / retransmission clearance を通った後の話です。
Walkthrough
`2-Way`, `ExStart`, `Loading`, `Full` を順に見る
cd protocol-in-code PYTHONPATH=src python3 examples/ospf/session_02_walkthrough.py
walkthrough では Hello result を入力にして、`2-Way`, `ExStart`, `Loading`, `Full` を順に出します。Session 01 の result object が Session 02 の input になっていることを確認します。
Done Check
Session 02 を終えたと言える条件
- 一部の neighbor が `2-Way` で止まる理由を説明できる
- `database_description_ok` と request list が `Full` の前提になると説明できる
- Hello の結果と adjacency state machine を分けて話せる
Next Session
次は shared segment の代表を選びます
Session 03 では DR / BDR election をコードで読みます。priority と router ID がどう tie-break になるかを見ます。