Session Goal
このセッションで終わらせたいこと
Session 12 のゴールは、installed route が変わったあとに outbound state が別パスで更新されることを説明できるようになることです。best path が変わっただけでは外へ出る route はまだ決まり切っていません。
currentとdesiredの差分として export refresh を見られる- advertise と withdraw の分岐を説明できる
- peer ごとに出る route が違うと説明できる
Bridge
Session 08 と Session 09 をつなぐ
Session 08 では export policy 自体を見ました。Session 09 では recompute を見ました。Session 12 は、その recompute 結果を各 peer 向けに再反映する reconciliation pass です。
Read The Source
Loc-RIB の変化を Adj-RIB-Out の差分に変える
current = current_by_prefix.get(prefix)
desired = prepare_export(installed, target.peer_type, target.policy)
if desired is None:
current_by_prefix.pop(prefix, None)
else:
current_by_prefix[prefix] = desiredここでは message encoding を作っているのではなく、「この peer に見せるべき outbound state は何か」を計算しています。
Simplification Note
これは prefix 単位の outbound reconciliation です
real router の UPDATE packing や batching までは扱いません。ここでは 1 prefix ごとに、Adj-RIB-Out に何を残し、何を消すかだけに集中します。
Walkthrough
advertise のあとに withdraw が出る
walkthrough では customer には広告し、deny された upstream には出さず、その後 installed path が消えたときに withdraw が出る流れを確認します。
cd protocol-in-code PYTHONPATH=src python3 examples/bgp/session_12_walkthrough.py
Done Check
Session 12 を終えたと言える条件
- Loc-RIB 変化と export refresh を別 step として説明できる
- peer ごとに
desiredが違う理由を説明できる - Adj-RIB-Out が自動同期ではなく reconciliation の結果だと説明できる
Next Session
次は event ごとにどの branch を通るかを見る
session gate と export refresh は見えました。次は announce、withdraw、peer down の 3 種類がどの順で recompute と refresh を呼ぶかを dispatch として読みます。