Session Goal
このセッションで終わらせたいこと
Session 07 のゴールは、best-path に入る candidate が peer から来たままの姿とは限らないことを説明できるようになることです。local policy が local_pref や weight を変えたり、条件次第で path 自体を落としたりすることを source から読めるようにします。
- import policy が best-path の前にあると説明できる
local_prefとweightの書き換えを説明できる- early drop があると説明できる
- same path が import 後に別物になると説明できる
Bridge
local policy は best-path の入力を変える
Session 05 では validation result と action を分けました。Session 07 ではさらに、その route が best-path に到達する前にも local decision があることを見ます。ここでは final reject だけでなく、rewrite も policy の仕事です。
Design Choice
validation と import の境界は toy pipeline で接続します
この lesson は `import policy は best-path の前` を主題にしていますが、toy pipeline では validation result が import の drop 判定に入る場面も扱います。ここでは「比較に入る candidate を local policy が整える」という役割を先に掴むことを優先します。
Read Order
この順番で読むと迷いにくい
ImportPolicyを読んで local knob を掴むapply_import_policy()を読み、早い段階の return を見るreplace()で何を書き換えているか確認する- walkthrough を実行して rewrite と drop を並べて見る
Read The Source
drop と rewrite の両方を見る
if candidate.next_hop in policy.reject_next_hops:
return None
if validation_state is ValidationState.INVALID and policy.reject_invalid:
return None
updated = replace(updated, local_pref=policy.local_pref_override)
updated = replace(updated, weight=policy.weight)ここでは None が「この path は comparison に入らない」ことを表します。一方で return された candidate は、peer 由来の input に local rewrite が入った後の candidate です。
What Changes
書き換え対象と早期 drop を分けて考える
| item | 意味 |
|---|---|
local_pref_override | best-path に入る前の local preference を変える。 |
weight | vendor-local な優先度を先に足す。 |
reject_next_hops | 特定 next hop の path を early drop する。 |
reject_invalid | invalid route を comparison 前に落とす。 |
Walkthrough
同じ path が policy で別の入力になる
walkthrough では 1 本の path に対して、local_pref を上げる場合、weight を付ける場合、next-hop rule で落とす場合、invalid を reject する場合を順に見ます。
cd protocol-in-code PYTHONPATH=src python3 examples/bgp/session_07_walkthrough.py
Done Check
Session 07 を終えたと言える条件
- import policy が best-path より前の layer だと説明できる
local_prefとweightが local rewrite されると説明できる- candidate が comparison 前に落ちることがあると説明できる
- best-path が見るのは peer 原本ではなく import 後の input だと説明できる
Next Session
次は local route が peer ごとにどう出ていくかを見る
Session 07 では comparison 前の candidate を整えました。次の Session 08 では、Loc-RIB に残った route が peer ごとにどう変形されるかを export policy として読みます。