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 が作られるところを見ます。