4. Packet Processing (Traitement des paquets)
4. Packet Processing (Traitement des paquets)
Cette section décrit le traitement des paquets SRv6 au niveau des nœuds sources SR, de transit et des nœuds de point de terminaison de segment SR.
4.1. SR Source Node (Nœud source SR)
Un nœud source dirige un paquet vers une SR Policy. Si la SR Policy aboutit à une Segment List contenant un seul segment, et qu'il n'y a pas besoin d'ajouter des informations au drapeau SRH ou d'ajouter un TLV, la DA est définie sur l'entrée unique de la Segment List, et le SRH PEUT être omis.
Lorsque nécessaire, le SRH est créé comme suit:
Les champs Next Header et Hdr Ext Len sont définis comme spécifié dans [RFC8200].
Le champ Routing Type est défini à 4.
La DA du paquet est définie avec la valeur du premier segment.
Le premier élément de la SRH Segment List est le segment ultime. Le deuxième élément est l'avant-dernier segment, et ainsi de suite.
Le champ Segments Left est défini à n-1, où n est le nombre d'éléments dans la SR Policy.
Le champ Last Entry est défini à n-1, où n est le nombre d'éléments dans la SR Policy.
Les TLV (y compris HMAC) peuvent être définis selon leur spécification.
Le paquet est transféré vers l'adresse de destination du paquet (le premier segment).
4.1.1. Reduced SRH (SRH réduit)
Lorsqu'une source ne nécessite pas que la liste SID entière soit préservée dans le SRH, un SRH réduit peut être utilisé.
Un SRH réduit ne contient pas le premier segment de la SR Policy associée (le premier segment est déjà dans la DA de l'en-tête IPv6), et le champ Last Entry est défini à n-2, où n est le nombre d'éléments dans la SR Policy.
4.2. Transit Node (Nœud de transit)
Comme spécifié dans [RFC8200], le seul nœud autorisé à inspecter l'en-tête d'extension de routage (et donc le SRH) est le nœud correspondant à la DA du paquet. Tout autre nœud de transit NE DOIT PAS inspecter l'en-tête de routage sous-jacent et DOIT transférer le paquet vers la DA selon sa table de routage IPv6.
Lorsqu'un SID est dans l'adresse de destination d'un en-tête IPv6 d'un paquet, il est routé à travers un réseau IPv6 comme une adresse IPv6. Les SID, ou le(s) préfixe(s) couvrant les SID, et leur accessibilité peuvent être distribués par des moyens hors de la portée de ce document. Par exemple, [RFC5308] ou [RFC5340] peuvent être utilisés pour annoncer un préfixe couvrant les SID sur un nœud.
4.3. SR Segment Endpoint Node (Nœud de point de terminaison de segment SR)
Sans contraindre les détails d'une implémentation, le nœud de point de terminaison de segment SR crée des entrées de base d'informations de transfert (FIB) pour ses SID locaux.
Lorsqu'un nœud compatible SRv6 reçoit un paquet IPv6, il effectue une recherche de correspondance de préfixe la plus longue sur l'adresse de destination du paquet. Cette recherche peut retourner l'un des éléments suivants:
-
Une entrée FIB qui représente un SRv6 SID instancié localement
-
Une entrée FIB qui représente une interface locale, non instanciée localement comme un SRv6 SID
-
Une entrée FIB qui représente une route non locale
-
Aucune correspondance
4.3.1. FIB Entry Is a Locally Instantiated SRv6 SID (L'entrée FIB est un SRv6 SID instancié localement)
Ce document et cette section définissent un seul SRv6 SID. Les documents futurs peuvent définir des SRv6 SID supplémentaires. Dans un tel cas, le contenu entier de cette section sera défini dans ce document.
Si l'entrée FIB représente un SRv6 SID instancié localement, traiter la chaîne d'en-têtes suivante de l'en-tête IPv6 comme défini dans la Section 4 de [RFC8200]. La Section 4.3.1.1 décrit comment traiter un SRH; la Section 4.3.1.2 décrit comment traiter un en-tête de couche supérieure ou l'absence d'un Next Header.
Le traitement de ce SID modifie le Segments Left et, s'il est configuré pour traiter les TLV, il peut modifier les "données de longueur variable" des types TLV qui changent en route. Par conséquent, Segments Left est mutable, et les TLV qui changent en route sont mutables. Le reste du SRH (Flags, Tag, Segment List, et les TLV qui ne changent pas en route) sont immuables lors du traitement de ce SID.
4.3.1.1. SRH Processing (Traitement SRH)
S01. Lorsqu'un SRH est traité {
S02. Si Segments Left est égal à zéro {
S03. Procéder au traitement de l'en-tête suivant dans le paquet,
dont le type est identifié par le champ Next Header dans
l'en-tête de routage.
S04. }
S05. Sinon {
S06. Si la configuration locale nécessite le traitement TLV {
S07. Effectuer le traitement TLV (voir Traitement TLV)
S08. }
S09. max_last_entry = ( Hdr Ext Len / 2 ) - 1
S10. Si ((Last Entry > max_last_entry) ou
S11. (Segments Left est supérieur à (Last Entry+1)) {
S12. Envoyer un message ICMP Parameter Problem, Code 0, à
l'adresse source, pointant vers le champ Segments Left,
et écarter le paquet.
S13. }
S14. Sinon {
S15. Décrémenter Segments Left de 1.
S16. Copier Segment List[Segments Left] du SRH vers
l'adresse de destination de l'en-tête IPv6.
S17. Si le Hop Limit IPv6 est inférieur ou égal à 1 {
S18. Envoyer un message ICMP Time Exceeded -- Hop Limit Exceeded in
Transit à l'adresse source et écarter le paquet.
S19. }
S20. Sinon {
S21. Décrémenter le Hop Limit de 1
S22. Resoumettre le paquet au module IPv6 pour transmission
vers la nouvelle destination.
S23. }
S24. }
S25. }
S26. }
4.3.1.1.1. TLV Processing (Traitement TLV)
La configuration locale détermine comment les TLV doivent être traités lorsque le segment actif est un SID local défini dans ce document. La définition de la configuration locale est hors de la portée de ce document.
À des fins d'illustration uniquement, deux exemples de configurations locales qui peuvent être associées à un SID sont fournis ci-dessous.
Exemple 1: Pour tout paquet reçu de l'interface I2 Ignorer le traitement TLV
Exemple 2: Pour tout paquet reçu de l'interface I1 Si le premier TLV est HMAC { Traiter le TLV HMAC } Sinon { Écarter le paquet }
4.3.1.2. Upper-Layer Header or No Next Header (En-tête de couche supérieure ou pas de Next Header)
Lors du traitement de l'en-tête de couche supérieure d'un paquet correspondant à une entrée FIB instanciée localement comme un SRv6 SID défini dans ce document:
SI (L'en-tête de couche supérieure est IPv4 ou IPv6) et
la configuration locale le permet {
Effectuer la décapsulation IPv6
Resoumettre le paquet décapsulé au module IPv4 ou IPv6
}
SINON {
Envoyer un message ICMP parameter problem à l'adresse source et
écarter le paquet. Code d'erreur (4) "SR Upper-layer
Header Error", pointeur défini sur le décalage de l'en-tête
de couche supérieure.
}
Un code d'erreur unique permet à un nœud source SR de reconnaître une erreur dans le traitement du SID à un point de terminaison.
4.3.2. FIB Entry Is a Local Interface (L'entrée FIB est une interface locale)
Si l'entrée FIB représente une interface locale et n'est pas instanciée localement comme un SRv6 SID, le SRH est traité comme suit:
Si Segments Left est zéro, le nœud doit ignorer l'en-tête de routage et procéder au traitement de l'en-tête suivant dans le paquet, dont le type est identifié par le champ Next Header dans l'en-tête de routage.
Si Segments Left est non nul, le nœud doit écarter le paquet et envoyer un message ICMP Parameter Problem, Code 0, à l'adresse source du paquet, pointant vers le Routing Type non reconnu.
4.3.3. FIB Entry Is a Nonlocal Route (L'entrée FIB est une route non locale)
Le traitement n'est pas modifié par ce document.
4.3.4. FIB Entry Is a No Match (L'entrée FIB n'a pas de correspondance)
Le traitement n'est pas modifié par ce document.