Protocol in Code · OSPF Session 04

LSA As An Object

Session 04 では lsa.py を読み、Router-LSA を flood と SPF の両方が参照する object として見ます。

IntermediateSession 04LSA objectOSPF

Session Goal

Router-LSA を field の集まりとして説明できるようにする

OSPF の後半は LSDB と SPF が中心になります。その前に Router-LSA が何を持っている object なのか、identity と payload を分けて読む必要があります。

Read The Source

header, links, stub networks を分けて見る

@dataclass(frozen=True)
class RouterLSA:
    header: LSAHeader
    area_id: str
    links: tuple[LinkDescription, ...] = ()
    stub_networks: tuple[StubNetwork, ...] = ()

header は version と identity、`links` は graph の入力、`stub_networks` は route derivation の入力です。ここを分けると flood と SPF の責務が見やすくなります。

Walkthrough

1 つの Router-LSA を作って key を見る

cd protocol-in-code
PYTHONPATH=src python3 examples/ospf/session_04_walkthrough.py

walkthrough では LSA key、link count、stub prefix を出して、identity と payload の切れ目を確認します。

Done Check

Session 04 を終えたと言える条件

  • Router-LSA を識別する field を挙げられる
  • links と stub networks の役割を分けて説明できる
  • newer / older の比較が sequence と age で決まると説明できる

Next Session

次はその LSA をどこへ流すかを決めます

Session 05 では flood を読みます。受け取った LSA を forward する interface 集合がどう決まるかを見ます。