Protocol in Code · BGP Session 15

Build The Toy Speaker Loop

Session 15 では GitHub 上の speaker.py を読み、peer state、RIBs、prefix decision、event handlers、export refresh を 1 つの speaker object にまとめます。

IntermediateSession 15speaker loopintegration

Session Goal

このセッションで終わらせたいこと

Session 15 のゴールは、Sessions 01-14 がどの object と method に畳み込まれるかを説明できるようになることです。ここで course 全体が 1 つの speaker loop として閉じます。

  • speaker を state + event handlers として説明できる
  • announce / withdraw / peer down が同じ object 上で動くと説明できる
  • export refresh まで含めた end-to-end loop を言える

Bridge

Sessions 11-14 を 1 つの object に畳み込む

Session 11 の peer gate、Session 12 の export refresh、Session 13 の event dispatch、Session 14 の prefix decision set が、ここで speaker object の method に戻ってきます。Session 13 の event functions を、そのまま object method が包む形です。

Read The Source

speaker は event result を object API に包む

src/protocol_in_code/bgp/speaker.py
result = process_announce_event(...)
return self._step_from_event("announce", result)

この rhythm が、Protocol in Code の BGP コア全体を要約しています。branch 自体は Session 13 で学び、その戻り値を Session 15 では object method が包みます。

Simplification Note

これは teaching speaker であって production BGP daemon ではありません

timer、message parsing、capability negotiation、real UPDATE encoding、full event queue は扱っていません。ここでは control-plane loop の shape を code として読めることを優先しています。

Walkthrough

announce、compete、withdraw、peer down を 1 speaker object で通す

walkthrough では最初の announce で best path を作り、2 本目の route を受けても winner を維持し、withdraw で別 peer に切り替わり、最後の peer down で route と write permission の両方を失うところまでを 1 object で見ます。

run locally
cd protocol-in-code
PYTHONPATH=src python3 examples/bgp/session_15_walkthrough.py

Done Check

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

  • Sessions 01-14 が speaker object のどこに入ったか説明できる
  • state と event handler の両方で BGP を読める
  • peer down で route だけでなく session gate も戻ると説明できる
  • この course が「小さい readable control plane」を作るためのものだと説明できる

Course Position

BGP Session Map: 15 / 15

ここで BGP core 15 sessions がひとまず閉じます。次に足すなら eBGP / iBGP の再広告差分、communities、route reflection、aggregate などを上級編として広げる流れです。