Passa al contenuto principale

8.2.2. Finite State Machine (Macchina a stati finiti)

8.2.2. Finite State Machine (Macchina a stati finiti)

Idle State (Stato inattivo):

Inizialmente, la FSM peer BGP si trova nello stato Idle. Di seguito, la FSM peer BGP sarà abbreviata in FSM BGP.

In questo stato, la FSM BGP rifiuta tutte le connessioni BGP in ingresso per questo peer. Nessuna risorsa è allocata al peer. In risposta a un evento ManualStart (Evento 1) o un evento AutomaticStart (Evento 3), il sistema locale:

  • inizializza tutte le risorse BGP per la connessione peer,

  • imposta ConnectRetryCounter a zero,

  • avvia il ConnectRetryTimer con il valore iniziale,

  • inizia una connessione TCP all'altro peer BGP,

  • ascolta una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Connect.

L'evento ManualStop (Evento 2) e l'evento AutomaticStop (Evento 8) sono ignorati nello stato Idle.

In risposta a un evento ManualStart_with_PassiveTcpEstablishment (Evento 4) o un evento AutomaticStart_with_PassiveTcpEstablishment (Evento 5), il sistema locale:

  • inizializza tutte le risorse BGP,

  • imposta il ConnectRetryCounter a zero,

  • avvia il ConnectRetryTimer con il valore iniziale,

  • ascolta una connessione che può essere iniziata dal peer remoto, e

  • cambia il suo stato in Active.

Il valore esatto del ConnectRetryTimer è una questione locale, ma DOVREBBE (SHOULD) essere sufficientemente grande da consentire l'inizializzazione TCP.

Se l'attributo DampPeerOscillations è impostato a TRUE, i seguenti tre eventi aggiuntivi possono verificarsi nello stato Idle:

  • AutomaticStart_with_DampPeerOscillations (Evento 6),

  • AutomaticStart_with_DampPeerOscillations_and_PassiveTcpEstablishment (Evento 7),

  • IdleHoldTimer_Expires (Evento 13).

Alla ricezione di questi 3 eventi, il sistema locale utilizzerà questi eventi per prevenire le oscillazioni dei peer. Il metodo per prevenire l'oscillazione persistente dei peer è al di fuori dell'ambito di questo documento.

Qualsiasi altro evento (Eventi 9-12, 15-28) ricevuto nello stato Idle non causa cambiamenti nello stato del sistema locale.

Connect State (Stato Connessione):

In questo stato, la FSM BGP sta aspettando che la connessione TCP sia completata.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato Connect.

In risposta a un evento ManualStop (Evento 2), il sistema locale:

  • abbandona la connessione TCP,

  • rilascia tutte le risorse BGP,

  • imposta ConnectRetryCounter a zero,

  • arresta il ConnectRetryTimer e imposta ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta all'evento ConnectRetryTimer_Expires (Evento 9), il sistema locale:

  • abbandona la connessione TCP,

  • riavvia il ConnectRetryTimer,

  • arresta il DelayOpenTimer e reimposta il timer a zero,

  • inizia una connessione TCP all'altro peer BGP,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • rimane nello stato Connect.

Se l'evento DelayOpenTimer_Expires (Evento 12) si verifica nello stato Connect, il sistema locale:

  • invia un messaggio OPEN al suo peer,

  • imposta l'HoldTimer a un valore grande, e

  • cambia il suo stato in OpenSent.

Se la FSM BGP riceve un evento TcpConnection_Valid (Evento 14), la connessione TCP viene elaborata e la connessione rimane nello stato Connect.

Se la FSM BGP riceve un evento Tcp_CR_Invalid (Evento 15), il sistema locale rifiuta la connessione TCP e la connessione rimane nello stato Connect.

Se la connessione TCP ha successo (Evento 16 o Evento 17), il sistema locale controlla l'attributo DelayOpen prima dell'elaborazione. Se l'attributo DelayOpen è impostato a TRUE, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • imposta il DelayOpenTimer al valore iniziale, e

  • rimane nello stato Connect.

Se l'attributo DelayOpen è impostato a FALSE, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • completa l'inizializzazione BGP

  • invia un messaggio OPEN al suo peer,

  • imposta l'HoldTimer a un valore grande, e

  • cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è suggerito.

Se la connessione TCP fallisce (Evento 18), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • riavvia il ConnectRetryTimer con il valore iniziale,

  • arresta il DelayOpenTimer e reimposta il suo valore a zero,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Active.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer a zero,

  • abbandona la connessione TCP,

  • rilascia tutte le risorse BGP, e

  • cambia il suo stato in Idle.

Se un messaggio OPEN viene ricevuto mentre il DelayOpenTimer è in esecuzione (Evento 20), il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • completa l'inizializzazione BGP,

  • arresta e cancella il DelayOpenTimer (imposta il valore a zero),

  • invia un messaggio OPEN,

  • invia un messaggio KEEPALIVE,

  • se il valore iniziale dell'HoldTimer è non zero,

    • avvia il KeepaliveTimer con il valore iniziale e

    • reimposta l'HoldTimer al valore negoziato,

    altrimenti, se il valore iniziale dell'HoldTimer è zero,

    • reimposta il KeepaliveTimer e

    • reimposta il valore dell'HoldTimer a zero,

  • e cambia il suo stato in OpenConfirm.

Se il valore del campo sistema autonomo è lo stesso del numero sistema autonomo locale, impostare lo stato della connessione su una connessione interna; altrimenti sarà "esterna".

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22) (vedere Sezione 6.2), il sistema locale:

  • (opzionalmente) Se l'attributo SendNOTIFICATIONwithoutOPEN è impostato a TRUE, allora il sistema locale invia prima un messaggio NOTIFICATION con il codice di errore appropriato, e poi

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a True, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 8, 10-11, 13, 19, 23, 25-28), il sistema locale:

  • se il ConnectRetryTimer è in esecuzione, arresta e reimposta il ConnectRetryTimer (imposta a zero),

  • se il DelayOpenTimer è in esecuzione, arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a True, e

  • cambia il suo stato in Idle.

Active State (Stato Attivo):

In questo stato, la FSM BGP sta cercando di acquisire un peer ascoltando e accettando una connessione TCP.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato Active.

In risposta a un evento ManualStop (Evento 2), il sistema locale:

  • Se il DelayOpenTimer è in esecuzione e l'attributo di sessione SendNOTIFICATIONwithoutOPEN è impostato, il sistema locale invia una NOTIFICATION con Cease,

  • rilascia tutte le risorse BGP incluso l'arresto del DelayOpenTimer

  • abbandona la connessione TCP,

  • imposta ConnectRetryCounter a zero,

  • arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta a un evento ConnectRetryTimer_Expires (Evento 9), il sistema locale:

  • riavvia il ConnectRetryTimer (con il valore iniziale),

  • inizia una connessione TCP all'altro peer BGP,

  • continua ad ascoltare una connessione TCP che può essere iniziata da un peer BGP remoto, e

  • cambia il suo stato in Connect.

Se il sistema locale riceve un evento DelayOpenTimer_Expires (Evento 12), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • arresta e cancella il DelayOpenTimer (imposta a zero),

  • completa l'inizializzazione BGP,

  • invia il messaggio OPEN al suo peer remoto,

  • imposta il suo timer di mantenimento a un valore grande, e

  • cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è anche suggerito per questa transizione di stato.

Se il sistema locale riceve un evento TcpConnection_Valid (Evento 14), il sistema locale elabora i flag di connessione TCP e rimane nello stato Active.

Se il sistema locale riceve un evento Tcp_CR_Invalid (Evento 15), il sistema locale rifiuta la connessione TCP e rimane nello stato Active.

In risposta al successo di una connessione TCP (Evento 16 o Evento 17), il sistema locale controlla l'attributo opzionale DelayOpen prima dell'elaborazione.

Se l'attributo DelayOpen è impostato a TRUE, il sistema locale:

- arresta il ConnectRetryTimer e imposta il ConnectRetryTimer a zero,

- imposta il DelayOpenTimer al valore iniziale (DelayOpenTime), e

- rimane nello stato Active.

Se l'attributo DelayOpen è impostato a FALSE, il sistema locale:

- imposta il ConnectRetryTimer a zero,

- completa l'inizializzazione BGP,

- invia il messaggio OPEN al suo peer,

- imposta il suo HoldTimer a un valore grande, e

- cambia il suo stato in OpenSent.

Un valore HoldTimer di 4 minuti è suggerito come "valore grande" per l'HoldTimer.

Se il sistema locale riceve un evento TcpConnectionFails (Evento 18), il sistema locale:

  • riavvia il ConnectRetryTimer (con il valore iniziale),

  • arresta e cancella il DelayOpenTimer (imposta il valore a zero),

  • rilascia tutte le risorse BGP,

  • incrementa il ConnectRetryCounter di 1,

  • opzionalmente esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se un messaggio OPEN viene ricevuto e il DelayOpenTimer è in esecuzione (Evento 20), il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e cancella il DelayOpenTimer (imposta a zero),

  • completa l'inizializzazione BGP,

  • invia un messaggio OPEN,

  • invia un messaggio KEEPALIVE,

  • se il valore dell'HoldTimer è non zero,

    • avvia il KeepaliveTimer al valore iniziale,

    • reimposta l'HoldTimer al valore negoziato,

    altrimenti se l'HoldTimer è zero

    • reimposta il KeepaliveTimer (imposta a zero),

    • reimposta l'HoldTimer a zero, e

  • cambia il suo stato in OpenConfirm.

Se il valore del campo sistema autonomo è lo stesso del numero sistema autonomo locale, impostare lo stato della connessione su una connessione interna; altrimenti sarà esterno.

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22) (vedere Sezione 6.2), il sistema locale:

  • (opzionalmente) invia un messaggio NOTIFICATION con il codice di errore appropriato se l'attributo SendNOTIFICATIONwithoutOPEN è impostato a TRUE,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale controlla il DelayOpenTimer. Se il DelayOpenTimer è in esecuzione, il sistema locale:

  • arresta il ConnectRetryTimer (se in esecuzione) e imposta il ConnectRetryTimer a zero,

  • arresta e reimposta il DelayOpenTimer (imposta a zero),

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il DelayOpenTimer non è in esecuzione, il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 8, 10-11, 13, 19, 23, 25-28), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di uno,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

OpenSent (Stato OpenSent):

In questo stato, la FSM BGP attende un messaggio OPEN dal suo peer.

Gli eventi di avvio (Eventi 1, 3-7) sono ignorati nello stato OpenSent.

Se un evento ManualStop (Evento 2) viene emesso nello stato OpenSent, il sistema locale:

  • invia la NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero, e

  • cambia il suo stato in Idle.

Se un evento AutomaticStop (Evento 8) viene emesso nello stato OpenSent, il sistema locale:

  • invia la NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se l'HoldTimer_Expires (Evento 10), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un evento TcpConnection_Valid (Evento 14), Tcp_CR_Acked (Evento 16) o TcpConnectionConfirmed (Evento 17), una seconda connessione TCP potrebbe essere in corso. Questa seconda connessione TCP viene tracciata secondo l'elaborazione della collisione di connessione (Sezione 6.8) fino a quando non viene ricevuto un messaggio OPEN.

Una richiesta di connessione TCP per una porta invalida (Tcp_CR_Invalid (Evento 15)) viene ignorata.

Se viene ricevuto un evento TcpConnectionFails (Evento 18), il sistema locale:

  • chiude la connessione BGP,

  • riavvia il ConnectRetryTimer,

  • continua ad ascoltare una connessione che può essere iniziata dal peer BGP remoto, e

  • cambia il suo stato in Active.

Quando viene ricevuto un messaggio OPEN, tutti i campi vengono controllati per la correttezza. Se non ci sono errori nel messaggio OPEN (Evento 19), il sistema locale:

  • reimposta il DelayOpenTimer a zero,

  • imposta il ConnectRetryTimer BGP a zero,

  • invia un messaggio KEEPALIVE, e

  • imposta un KeepaliveTimer (tramite il testo seguente)

  • imposta l'HoldTimer secondo il valore negoziato (vedere Sezione 4.2),

  • cambia il suo stato in OpenConfirm.

Se il valore del tempo di mantenimento negoziato è zero, allora l'HoldTimer e il KeepaliveTimer non vengono avviati. Se il valore del campo Sistema autonomo è lo stesso del numero di sistema autonomo locale, allora la connessione è una connessione "interna"; altrimenti, è una connessione "esterna". (Questo avrà un impatto sull'elaborazione UPDATE come descritto di seguito.)

Se il controllo dell'intestazione del messaggio BGP (Evento 21) o il controllo del messaggio OPEN rileva un errore (Evento 22)(vedere Sezione 6.2), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore appropriato,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è TRUE, e

  • cambia il suo stato in Idle.

I meccanismi di rilevamento delle collisioni (Sezione 6.8) devono essere applicati quando viene ricevuto un messaggio BGP OPEN valido (Evento 19 o Evento 20). Si prega di fare riferimento alla Sezione 6.8 per i dettagli del confronto.

Un evento CollisionDetectDump si verifica quando l'implementazione BGP determina, con mezzi al di fuori dell'ambito di questo documento, che si è verificata una collisione di connessione.

Se una connessione nello stato OpenSent è determinata essere la connessione che deve essere chiusa, un OpenCollisionDump (Evento 23) viene segnalato alla macchina a stati. Se tale evento viene ricevuto nello stato OpenSent, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio NOTIFICATION con un errore di versione (Evento 24), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 9, 11-13, 20, 25-28), il sistema locale:

  • invia la NOTIFICATION con il codice di errore Finite State Machine Error,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

OpenConfirm State (Stato OpenConfirm):

In questo stato, BGP attende un messaggio KEEPALIVE o NOTIFICATION.

Qualsiasi evento di avvio (Eventi 1, 3-7) viene ignorato nello stato OpenConfirm.

In risposta a un evento ManualStop (Evento 2) iniziato dall'operatore, il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero,

  • imposta il ConnectRetryTimer a zero, e

  • cambia il suo stato in Idle.

In risposta all'evento AutomaticStop iniziato dal sistema (Evento 8), il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se l'evento HoldTimer_Expires (Evento 10) si verifica prima che venga ricevuto un messaggio KEEPALIVE, il sistema locale:

  • invia il messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un evento KeepaliveTimer_Expires (Evento 11), il sistema locale:

  • invia un messaggio KEEPALIVE,

  • riavvia il KeepaliveTimer, e

  • rimane nello stato OpenConfirmed.

In caso di evento TcpConnection_Valid (Evento 14) o successo di una connessione TCP (Evento 16 o Evento 17) durante OpenConfirm, il sistema locale deve tracciare la seconda connessione.

Se viene tentata una connessione TCP con una porta invalida (Evento 15), il sistema locale ignorerà il secondo tentativo di connessione.

Se il sistema locale riceve un evento TcpConnectionFails (Evento 18) dal TCP sottostante o un messaggio NOTIFICATION (Evento 25), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio NOTIFICATION con un errore di versione (NotifMsgVerErr (Evento 24)), il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio OPEN valido (BGPOpen (Evento 19)), la funzione di rilevamento delle collisioni viene elaborata secondo la Sezione 6.8. Se questa connessione deve essere abbandonata a causa di una collisione di connessione, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP (invia TCP FIN),

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se viene ricevuto un messaggio OPEN, tutti i campi vengono controllati per la correttezza. Se il controllo dell'intestazione del messaggio BGP (BGPHeaderErr (Evento 21)) o il controllo del messaggio OPEN rileva un errore (vedere Sezione 6.2) (BGPOpenMsgErr (Evento 22)), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore appropriato,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se, durante l'elaborazione di un altro messaggio OPEN, l'implementazione BGP determina, con un mezzo al di fuori dell'ambito di questo documento, che si è verificata una collisione di connessione e che questa connessione deve essere chiusa, il sistema locale emetterà un evento OpenCollisionDump (Evento 23). Quando il sistema locale riceve un evento OpenCollisionDump (Evento 23), il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio KEEPALIVE (KeepAliveMsg (Evento 26)), il sistema locale:

  • riavvia l'HoldTimer e

  • cambia il suo stato in Established.

In risposta a qualsiasi altro evento (Eventi 9, 12-13, 20, 27-28), il sistema locale:

  • invia una NOTIFICATION con un codice di Finite State Machine Error,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Established State (Stato Stabilito):

Nello stato Established, la FSM BGP può scambiare messaggi UPDATE, NOTIFICATION e KEEPALIVE con il suo peer.

Qualsiasi evento di avvio (Eventi 1, 3-7) viene ignorato nello stato Established.

In risposta a un evento ManualStop (iniziato da un operatore) (Evento 2), il sistema locale:

  • invia il messaggio NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia le risorse BGP,

  • abbandona la connessione TCP,

  • imposta il ConnectRetryCounter a zero, e

  • cambia il suo stato in Idle.

In risposta a un evento AutomaticStop (Evento 8), il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Una ragione per un evento AutomaticStop è: Un BGP riceve messaggi UPDATE con un numero di prefissi per un determinato peer tale che il totale dei prefissi ricevuti supera il numero massimo di prefissi configurato. Il sistema locale disconnette automaticamente il peer.

Se si verifica l'evento HoldTimer_Expires (Evento 10), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Hold Timer Expired,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se si verifica l'evento KeepaliveTimer_Expires (Evento 11), il sistema locale:

  • invia un messaggio KEEPALIVE, e

  • riavvia il suo KeepaliveTimer, a meno che il valore HoldTime negoziato sia zero.

Ogni volta che il sistema locale invia un messaggio KEEPALIVE o UPDATE, riavvia il suo KeepaliveTimer, a meno che il valore HoldTime negoziato sia zero.

Un TcpConnection_Valid (Evento 14), ricevuto per una porta valida, farà tracciare la seconda connessione.

Una connessione TCP invalida (evento Tcp_CR_Invalid (Evento 15)) verrà ignorata.

In risposta a un'indicazione che la connessione TCP è stata stabilita con successo (Evento 16 o Evento 17), la seconda connessione DEVE (SHALL) essere tracciata fino a quando non invia un messaggio OPEN.

Se viene ricevuto un messaggio OPEN valido (BGPOpen (Evento 19)), e se l'attributo opzionale CollisionDetectEstablishedState è TRUE, il messaggio OPEN verrà controllato per vedere se entra in collisione (Sezione 6.8) con un'altra connessione. Se l'implementazione BGP determina che questa connessione deve essere terminata, elaborerà un evento OpenCollisionDump (Evento 23). Se questa connessione deve essere terminata, il sistema locale:

  • invia una NOTIFICATION con Cease,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio NOTIFICATION (Evento 24 o Evento 25) o un TcpConnectionFails (Evento 18) dal TCP sottostante, il sistema locale:

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • cambia il suo stato in Idle.

Se il sistema locale riceve un messaggio KEEPALIVE (Evento 26), il sistema locale:

  • riavvia il suo HoldTimer, se il valore HoldTime negoziato è non zero, e

  • rimane nello stato Established.

Se il sistema locale riceve un messaggio UPDATE (Evento 27), il sistema locale:

  • elabora il messaggio,

  • riavvia il suo HoldTimer, se il valore HoldTime negoziato è non zero, e

  • rimane nello stato Established.

Se il sistema locale riceve un messaggio UPDATE e la procedura di gestione degli errori del messaggio UPDATE (vedere Sezione 6.3) rileva un errore (Evento 28), il sistema locale:

  • invia un messaggio NOTIFICATION con un errore Update,

  • imposta il ConnectRetryTimer a zero,

  • elimina tutte le route associate a questa connessione,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.

In risposta a qualsiasi altro evento (Eventi 9, 12-13, 20-22), il sistema locale:

  • invia un messaggio NOTIFICATION con il codice di errore Finite State Machine Error,

  • elimina tutte le route associate a questa connessione,

  • imposta il ConnectRetryTimer a zero,

  • rilascia tutte le risorse BGP,

  • abbandona la connessione TCP,

  • incrementa il ConnectRetryCounter di 1,

  • (opzionalmente) esegue lo smorzamento delle oscillazioni peer se l'attributo DampPeerOscillations è impostato a TRUE, e

  • cambia il suo stato in Idle.