4.1. PIM Protocol State (PIM プロトコル状態)
このセクションは, 正しく機能するために PIM 実装が維持すべきすべてのプロトコル状態を規定します。この状態をツリー情報ベース (Tree Information Base, TIB) と呼びます。これは, このルーターにおけるすべてのマルチキャスト配信ツリーの状態を保持するためです。
保持すべき状態を正確に規定していますが, これは PIM-SM の実装がこの形式で状態を保持する必要があることを意味するものではありません。これは実際には抽象的な状態定義であり, ルーターの動作を正確に規定するために必要です。
TIB 状態を 3 つのセクションに分けます:
(*,G) 状態: G の RP ツリーを維持する状態。
(S,G) 状態: ソース S とグループ G のソース固有ツリーを維持する状態。
(S,G,rpt) 状態: G の RP ツリー上のソース S に関するソース固有情報を維持する状態。
4.1.1. General-Purpose State (汎用状態)
各インターフェースについて, ルーターは次の状態を維持します:
インターフェースごとの状態:
- Hello タイマー (Hello Timer, HT): 次の Hello メッセージの送信をトリガーするために使用されます
- ネイバー状態: 各ネイバーについて, ネイバーアドレス, 世代 ID (Generation ID), Hello ホールドタイム, およびその他の情報を維持します
詳細な状態フィールド定義, タイマー値, および状態マシン遷移については, RFC 7761 のセクション 4.1.1 の完全な仕様を参照してください。
4.1.2. (,G) State ((,G) 状態)
各グループ G について, ルーターは次の状態を維持します:
インターフェースごとの状態:
- ローカルメンバーシップ (Local Membership): 状態は "NoInfo" または "Include"
- PIM (*,G) Join/Prune 状態: 状態 (NoInfo, Join, Prune-Pending), Prune-Pending タイマー, および Join/Prune 有効期限タイマーを含みます
- (*,G) Assert Winner 状態: 状態 (NoInfo, I lost Assert, I won Assert), Assert タイマー, および勝者情報を含みます
インターフェース非固有状態:
- 上流 (*,G) Join/Prune 状態: 状態は "NotJoined(,G)" または "Joined(,G)"
- 上流 Join/Prune タイマー (JT)
- 最後に使用された RP
- 最後に使用された RP への RPF ネイバー
詳細な状態フィールド定義, 状態遷移ルール, およびマクロ定義については, RFC 7761 のセクション 4.1.2 の完全な仕様を参照してください。
4.1.3. (S,G) State ((S,G) 状態)
各ソース/グループペア (S,G) について, ルーターは次の状態を維持します:
インターフェースごとの状態:
- ローカルメンバーシップ: 状態は "NoInfo" または "Include"
- PIM (S,G) Join/Prune 状態: 状態とタイマーを含みます
- (S,G) Assert Winner 状態: 状態, タイマー, および勝者情報を含みます
インターフェース非固有状態:
- 上流 (S,G) Join/Prune 状態
- 上流 (S,G) Join/Prune タイマー
- 最後に使用された S への RPF ネイバー
- SPTbit: (S,G) 状態がアクティブかどうかを示します
- (S,G) Keepalive タイマー (KAT)
DR における追加の (S,G) 状態:
- Register 状態: Join, Prune, Join-Pending, または NoInfo
- Register-Stop タイマー (RST)
詳細な状態フィールド定義, SPTbit の使用, および Keepalive タイマーの機能については, RFC 7761 のセクション 4.1.3 の完全な仕様を参照してください。
4.1.4. (S,G,rpt) State ((S,G,rpt) 状態)
ルーターが (*,G) 状態も持つ各ソース/グループペア (S,G) について, 次の状態も維持します:
インターフェースごとの状態:
- ローカルメンバーシップ: 状態は "NoInfo" または "Exclude"
- PIM (S,G,rpt) Join/Prune 状態: 状態 (NoInfo, Pruned, Prune-Pending) とタイマーを含みます
インターフェース非固有状態:
- 上流 (S,G,rpt) Join/Prune 状態: RPTNotJoined(G), NotPruned(S,G,rpt), または Pruned(S,G,rpt)
- オーバーライドタイマー (Override Timer, OT)
詳細な状態フィールド定義と状態マシンの動作については, RFC 7761 のセクション 4.1.4 の完全な仕様を参照してください。
4.1.5. State Summarization Macros (状態要約マクロ)
PIM 仕様は, 転送動作とメッセージ生成を決定するために状態を要約する多数のマクロを使用します。これらのマクロには次のものが含まれます:
- immediate_olist(*,G): 即時送信インターフェースリスト
- inherited_olist(S,G): 継承された送信インターフェースリスト
- joins(*,G): インターフェース上に (*,G) join 状態があるかどうか
- pim_include(*,G): インターフェースがローカルメンバーシップを持つかどうか
- lost_assert(*,G): インターフェース上で assert が失われたかどうか
- その他の転送および join/prune 動作を計算するために使用されるマクロ
すべての状態要約マクロの完全な定義と使用シナリオについては, RFC 7761 のセクション 4.1.5 の詳細な仕様を参照してください。これらのマクロは, PIM の転送およびコントロールプレーンの動作を理解するために重要です。