4.1. PIM Protocol State (Stato del protocollo PIM)
Questa sezione specifica tutto lo stato del protocollo che un'implementazione PIM dovrebbe mantenere per funzionare correttamente. Chiamiamo questo stato base di informazioni dell'albero (Tree Information Base, TIB), poiché contiene lo stato di tutti gli alberi di distribuzione multicast su questo router.
Sebbene specifichiamo precisamente lo stato da mantenere, ciò non significa che un'implementazione di PIM-SM debba mantenere lo stato in questa forma. Questa è in realtà una definizione di stato astratta, necessaria per specificare con precisione il comportamento del router.
Dividiamo lo stato TIB in tre sezioni:
Stato (*,G): Stato che mantiene l'albero RP per G.
Stato (S,G): Stato che mantiene un albero specifico per sorgente per la sorgente S e il gruppo G.
Stato (S,G,rpt): Stato che mantiene informazioni specifiche per sorgente sulla sorgente S sull'albero RP per G.
4.1.1. General-Purpose State (Stato per uso generale)
Per ogni interfaccia, un router mantiene il seguente stato:
Stato per interfaccia:
- Timer Hello (Hello Timer, HT): Utilizzato per attivare l'invio del prossimo messaggio Hello
- Stato del vicino: Per ogni vicino, mantiene indirizzo del vicino, ID di generazione, tempo di mantenimento Hello e altre informazioni
Per definizioni dettagliate dei campi di stato, valori dei timer e transizioni della macchina a stati, consultare la sezione 4.1.1 della RFC 7761 per la specifica completa.
4.1.2. (,G) State (Stato (,G))
Per ogni gruppo G, un router mantiene il seguente stato:
Stato per interfaccia:
- Appartenenza locale (Local Membership): Lo stato è "NoInfo" o "Include"
- Stato PIM (*,G) Join/Prune: Include stato (NoInfo, Join, Prune-Pending), timer Prune-Pending e timer di scadenza Join/Prune
- Stato (*,G) Assert Winner: Include stato (NoInfo, I lost Assert, I won Assert), timer Assert e informazioni sul vincitore
Stato non specifico dell'interfaccia:
- Stato upstream (*,G) Join/Prune: Lo stato è "NotJoined(,G)" o "Joined(,G)"
- Timer upstream Join/Prune (JT)
- Ultimo RP utilizzato
- Ultimo vicino RPF verso RP utilizzato
Per definizioni dettagliate dei campi di stato, regole di transizione di stato e definizioni di macro, consultare la sezione 4.1.2 della RFC 7761 per la specifica completa.
4.1.3. (S,G) State (Stato (S,G))
Per ogni coppia sorgente/gruppo (S,G), un router mantiene il seguente stato:
Stato per interfaccia:
- Appartenenza locale: Lo stato è "NoInfo" o "Include"
- Stato PIM (S,G) Join/Prune: Include stato e timer
- Stato (S,G) Assert Winner: Include stato, timer e informazioni sul vincitore
Stato non specifico dell'interfaccia:
- Stato upstream (S,G) Join/Prune
- Timer upstream (S,G) Join/Prune
- Ultimo vicino RPF verso S utilizzato
- SPTbit: Indica se lo stato (S,G) è attivo
- Timer (S,G) Keepalive (KAT)
Stato (S,G) aggiuntivo al DR:
- Stato Register: Join, Prune, Join-Pending o NoInfo
- Timer Register-Stop (RST)
Per definizioni dettagliate dei campi di stato, utilizzo di SPTbit e funzioni del timer Keepalive, consultare la sezione 4.1.3 della RFC 7761 per la specifica completa.
4.1.4. (S,G,rpt) State (Stato (S,G,rpt))
Per ogni coppia sorgente/gruppo (S,G) per cui il router ha anche stato (*,G), mantiene anche il seguente stato:
Stato per interfaccia:
- Appartenenza locale: Lo stato è "NoInfo" o "Exclude"
- Stato PIM (S,G,rpt) Join/Prune: Include stato (NoInfo, Pruned, Prune-Pending) e timer
Stato non specifico dell'interfaccia:
- Stato upstream (S,G,rpt) Join/Prune: RPTNotJoined(G), NotPruned(S,G,rpt) o Pruned(S,G,rpt)
- Timer di sostituzione (Override Timer, OT)
Per definizioni dettagliate dei campi di stato e comportamento della macchina a stati, consultare la sezione 4.1.4 della RFC 7761 per la specifica completa.
4.1.5. State Summarization Macros (Macro di riepilogo dello stato)
La specifica PIM utilizza numerose macro per riassumere lo stato per determinare il comportamento di inoltro e la generazione di messaggi. Queste macro includono:
- immediate_olist(*,G): Lista di interfacce in uscita immediate
- inherited_olist(S,G): Lista di interfacce in uscita ereditate
- joins(*,G): Se esiste stato di join (*,G) su un'interfaccia
- pim_include(*,G): Se un'interfaccia ha appartenenza locale
- lost_assert(*,G): Se un assert è stato perso su un'interfaccia
- E altre macro utilizzate per calcolare il comportamento di inoltro e join/prune
Per definizioni complete e scenari d'uso di tutte le macro di riepilogo dello stato, consultare la sezione 4.1.5 della RFC 7761 per specifiche dettagliate. Queste macro sono fondamentali per comprendere il comportamento di inoltro e del piano di controllo di PIM.