Session Goal
このセッションで終わらせたいこと
Session 13 のゴールは、control plane を event-driven に読む入口を作ることです。route state の更新は常に同じではなく、何が起きたかによって branch が変わります。
- announce / withdraw / peer down を別イベントとして話せる
- peer down が複数 prefix を同時に触りうると説明できる
- event ごとに gate、recompute、refresh の順が違うと説明できる
Design Choice
dispatch branch を小さく保つために helper に委譲しています
この session の主題は event split そのものです。announce、withdraw、peer down がそれぞれどの branch を通るかを見やすくするために、prefix-level decision は helper に委譲しています。
Read The Source
event type ごとに呼ぶ関数列が違う
src/protocol_in_code/bgp/events.py
announce: gate peer recompute prefix refresh exports withdraw: remove received path recompute prefix refresh exports peer down: remove whole peer table recompute affected prefixes refresh exports
この session では、個々の route 属性よりも「どの event がどの branch を選ぶか」を見るのが重要です。
Walkthrough
announce、withdraw、peer down を順に通す
walkthrough では、announce で best path を作り、withdraw で消し、別 peer の announce で戻し、最後に peer down でまとめて失う流れを並べています。
run locally
cd protocol-in-code PYTHONPATH=src python3 examples/bgp/session_13_walkthrough.py
Done Check
Session 13 を終えたと言える条件
- event type によって control-plane path が変わると説明できる
- peer down が 1 prefix ではなく peer table 全体に効くと説明できる
- dispatch layer と decision layer を分けて説明できる
Next Session
次は 1 prefix を policy-aware な decision set にする
dispatch は見えました。次は 1 つの prefix に複数 peer の route があるとき、validation と policy を通した candidate set をどう作るかを見ます。