Aller au contenu principal

5.1. Ordering of Flow Specifications (Ordonnancement des Flow Specifications)

5.1. Ordering of Flow Specifications (Ordonnancement des Flow Specifications)

Plusieurs Flow Specifications peuvent correspondre à un flux de trafic particulier. Il est donc nécessaire de définir l'ordre dans lequel les Flow Specifications sont comparées et les actions appliquées à un flux de trafic particulier. Cette fonction d'ordonnancement est telle qu'elle ne dépend pas de l'ordre d'arrivée des Flow Specifications via BGP et est donc cohérente dans le réseau.

L'ordre relatif de deux Flow Specifications est déterminé en comparant leurs composants respectifs. L'algorithme commence par comparer les composants les plus à gauche (valeur de type de composant la plus faible) des Flow Specifications. Si les types diffèrent, la Flow Specification avec la valeur de type numérique la plus faible a une priorité plus élevée (et correspondra donc avant) que la Flow Specification qui ne contient pas ce type de composant. Si les types de composants sont les mêmes, une comparaison spécifique au type est effectuée (voir ci-dessous). Si les types sont égaux, l'algorithme continue avec le composant suivant.

Pour les valeurs de préfixe IP (préfixe de destination ou source IP), si l'un des deux préfixes à comparer est un préfixe plus spécifique de l'autre, le préfixe plus spécifique a une priorité plus élevée. Sinon, celui avec la valeur IP la plus faible a une priorité plus élevée.

Pour tous les autres types de composants, sauf indication contraire, la comparaison est effectuée en comparant les données du composant comme une chaîne binaire en utilisant la fonction memcmp() telle que définie par [ISO_IEC_9899]. Pour les chaînes de longueurs égales, la chaîne la plus faible (memcmp) a une priorité plus élevée. Pour les chaînes de longueurs différentes, le préfixe commun est comparé. Si le préfixe commun n'est pas égal, la chaîne avec le préfixe le plus faible a une priorité plus élevée. Si le préfixe commun est égal, la chaîne la plus longue est considérée comme ayant une priorité plus élevée que la plus courte.

Le code de l'Annexe A montre une implémentation Python3 de l'algorithme de comparaison. Le code complet a été testé avec Python 3.6.3 et peut être obtenu à <https://github.com/stoffi92/rfc5575bis/tree/master/flowspec-cmp>.