Protocol in Code · OSPF Session 06

LSDB Keeps The Version

Session 06 では lsdb.py を読み、LSDB が newer Router-LSA を受け入れ、older one を捨てる保管庫だと理解します。

IntermediateSession 06LSDBOSPF

Session Goal

LSDB を area ごとの versioned store として説明できるようにする

Flooding の次は LSDB です。ここで大事なのは、OSPF は「最後に見た LSA を何でも置く」のではなく、sequence と age に従って置換することです。

Read The Source

key ごとに replace するか ignore するかを決める

current = area_bucket.get(key)
if current is not None and not is_newer_lsa(lsa, current):
    return False
area_bucket[key] = lsa

つまり LSDB は「置く場所」であると同時に「version gate」でもあります。area ごとに bucket が分かれている点も、この先の SPF の入力範囲に効いてきます。

Walkthrough

old, same, new を順に入れる

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

walkthrough では old を install し、same を拒否し、new を受け入れて sequence が更新されるところまで見ます。

Done Check

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

  • LSDB が replace-or-ignore の gate だと説明できる
  • Router-LSA が area bucket に保存される理由を説明できる
  • SPF が LSDB の stable snapshot を読むと説明できる

Next Session

次は LSDB を graph に変えます

Session 07 では SPF を読みます。Router-LSA 群が graph になり、そこから shortest-path tree が作られるところを見ます。