Passa al contenuto principale

5.1. Ordering of Flow Specifications (Ordinamento delle Flow Specifications)

5.1. Ordering of Flow Specifications (Ordinamento delle Flow Specifications)

Più di una Flow Specification può corrispondere a un particolare flusso di traffico. Pertanto, è necessario definire l'ordine in cui le Flow Specifications vengono confrontate e le azioni vengono applicate a un particolare flusso di traffico. Questa funzione di ordinamento è tale da non dipendere dall'ordine di arrivo della Flow Specification tramite BGP ed è quindi coerente nella rete.

L'ordine relativo di due Flow Specifications è determinato confrontando i rispettivi componenti. L'algoritmo inizia confrontando i componenti più a sinistra (valore del tipo di componente più basso) delle Flow Specifications. Se i tipi differiscono, la Flow Specification con il valore del tipo numerico più basso ha priorità più alta (e quindi corrisponderà prima) rispetto alla Flow Specification che non contiene quel tipo di componente. Se i tipi di componenti sono uguali, viene eseguito un confronto specifico del tipo (vedere sotto). Se i tipi sono uguali, l'algoritmo continua con il componente successivo.

Per i valori del prefisso IP (prefisso di destinazione o sorgente IP), se uno dei due prefissi da confrontare è un prefisso più specifico dell'altro, il prefisso più specifico ha priorità più alta. Altrimenti, quello con il valore IP più basso ha priorità più alta.

Per tutti gli altri tipi di componenti, salvo diversa indicazione, il confronto viene eseguito confrontando i dati del componente come stringa binaria utilizzando la funzione memcmp() definita da [ISO_IEC_9899]. Per stringhe di lunghezze uguali, la stringa più bassa (memcmp) ha priorità più alta. Per stringhe di lunghezze diverse, viene confrontato il prefisso comune. Se il prefisso comune non è uguale, la stringa con il prefisso più basso ha priorità più alta. Se il prefisso comune è uguale, la stringa più lunga è considerata avere priorità più alta rispetto a quella più corta.

Il codice nell'Appendice A mostra un'implementazione Python3 dell'algoritmo di confronto. Il codice completo è stato testato con Python 3.6.3 e può essere ottenuto da <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp>.