Session Goal
このセッションで終わらせたいこと
Session 05 のゴールは、validation result と routing action を混ぜずに説明できるようになることです。ここでは invalid が自動で消えるわけではなく、policy が reject / deprioritize / accept を決めることを source から読めるようにします。
invalidは validation result であって action ではないと説明できる- strict policy と soft policy の違いを説明できる
not_foundが受理されうると説明できる- validation と policy が別レイヤだと説明できる
Core Idea
decide_route_policy() が local action を返す
policy.py では、Session 04 の validation state を受け取り、local policy に従って accept、deprioritize、reject を返します。つまり RPKI invalid は「その route が bad だと分かった」ことまでは教えてくれますが、「だから何をするか」は別の policy decision です。
Read Order
この順番で読むと迷いにくい
PolicyActionを読んで、ありうる action を掴むValidationPolicyを読んで、local knob を掴むdecide_route_policy()を読んで、validation state から action への変換を追う- walkthrough script を実行して、同じ validation state でも policy によって action が変わることを確認する
Read The Source
validation result は policy の入力になる
if validation_state is ValidationState.INVALID:
if policy.reject_invalid:
return PolicyAction.REJECT
return PolicyAction.DEPRIORITIZE
if validation_state is ValidationState.NOT_FOUND and policy.deprioritize_not_found:
return PolicyAction.DEPRIORITIZE
return PolicyAction.ACCEPTこの code が示しているのは、invalid だから即 drop ではない、ということです。policy が strict なら reject、soft なら deprioritize になります。not_found も同様に、扱いは local policy によって決まります。
Actions
3 つの action を分けて考える
| action | 意味 |
|---|---|
accept | そのまま通常受理する。 |
deprioritize | 捨てはしないが、優先度を下げて扱う。 |
reject | 受け入れずに落とす。 |
Walkthrough
同じ validation result でも action が変わる
GitHub repo 側には Session 05 用の walkthrough script を置いてあります。invalid を soft policy で見る場合、strict policy で見る場合、not_found を permissive / cautious policy で見る場合を並べて、最終 action がどう変わるか確認します。
cd protocol-in-code PYTHONPATH=src python3 examples/bgp/session_05_walkthrough.py
Done Check
Session 05 を終えたと言える条件
invalidは validation result で、reject は policy action だと説明できる- soft policy では invalid route が deprioritize されることがあると説明できる
not_foundは accept されることがあると説明できる- validation と policy を別レイヤとして話せる
Course Position
BGP Session Map: 05 / 15
Session 05 は `best path` と `authorization` のあとに、`local action` を切り出す場所です。ここを終えると、次からは route が router の中でどこに住み、どこから外へ出るかを見るブロックに入り、後半では event flow と speaker loop まで閉じます。