4.1. PIM Protocol State
This section specifies all protocol state that a PIM implementation should maintain in order to function correctly. We term this state the Tree Information Base (TIB), as it holds the state of all the multicast distribution trees at this router.
Although we specify precisely the state to be kept, this does not mean that an implementation of PIM-SM needs to hold the state in this form. This is actually an abstract state definition, needed to specify the router's behavior.
We divide the TIB state into three sections:
(*,G) state: State that maintains the RP tree for G.
(S,G) state: State that maintains a source-specific tree for source S and group G.
(S,G,rpt) state: State that maintains source-specific information about source S on the RP tree for G.
4.1.1. General-Purpose State
For each interface, a router maintains the following state:
Per-Interface State:
- Hello Timer (HT): Used to trigger the sending of the next Hello message
- Neighbor State: For each neighbor, maintains neighbor address, Generation ID, Hello Hold Time, and other information
For detailed state field definitions, timer values, and state machine transitions, please refer to Section 4.1.1 of RFC 7761 for the complete specification.
4.1.2. (*,G) State
For each group G, a router maintains the following state:
Per-Interface State:
- Local Membership: State is "NoInfo" or "Include"
- PIM (*,G) Join/Prune State: Includes state (NoInfo, Join, Prune-Pending), Prune-Pending Timer, and Join/Prune Expiry Timer
- (*,G) Assert Winner State: Includes state (NoInfo, I lost Assert, I won Assert), Assert Timer, and winner information
Non-Interface-Specific State:
- Upstream (*,G) Join/Prune State: State is "NotJoined(,G)" or "Joined(,G)"
- Upstream Join/Prune Timer (JT)
- Last RP Used
- Last RPF Neighbor towards RP Used
For detailed state field definitions, state transition rules, and macro definitions, please refer to Section 4.1.2 of RFC 7761 for the complete specification.
4.1.3. (S,G) State
For each source/group pair (S,G), a router maintains the following state:
Per-Interface State:
- Local Membership: State is "NoInfo" or "Include"
- PIM (S,G) Join/Prune State: Includes state and timers
- (S,G) Assert Winner State: Includes state, timers, and winner information
Non-Interface-Specific State:
- Upstream (S,G) Join/Prune State
- Upstream (S,G) Join/Prune Timer
- Last RPF Neighbor towards S Used
- SPTbit: Indicates whether (S,G) state is active
- (S,G) Keepalive Timer (KAT)
Additional (S,G) State at the DR:
- Register State: Join, Prune, Join-Pending, or NoInfo
- Register-Stop Timer (RST)
For detailed state field definitions, SPTbit usage, and Keepalive Timer functions, please refer to Section 4.1.3 of RFC 7761 for the complete specification.
4.1.4. (S,G,rpt) State
For each source/group pair (S,G) for which the router also has (*,G) state, it also maintains the following state:
Per-Interface State:
- Local Membership: State is "NoInfo" or "Exclude"
- PIM (S,G,rpt) Join/Prune State: Includes state (NoInfo, Pruned, Prune-Pending) and timers
Non-Interface-Specific State:
- Upstream (S,G,rpt) Join/Prune State: RPTNotJoined(G), NotPruned(S,G,rpt), or Pruned(S,G,rpt)
- Override Timer (OT)
For detailed state field definitions and state machine behavior, please refer to Section 4.1.4 of RFC 7761 for the complete specification.
4.1.5. State Summarization Macros
The PIM specification uses a number of macros to summarize state for determining forwarding behavior and message generation. These macros include:
- immediate_olist(*,G): Immediate outgoing interface list
- inherited_olist(S,G): Inherited outgoing interface list
- joins(*,G): Whether there is (*,G) join state on an interface
- pim_include(*,G): Whether an interface has local membership
- lost_assert(*,G): Whether an assert was lost on an interface
- And other macros used to calculate forwarding and join/prune behavior
For complete definitions and usage scenarios of all state summarization macros, please refer to Section 4.1.5 of RFC 7761 for detailed specifications. These macros are critical for understanding PIM forwarding and control plane behavior.