rfc9800v1.txt | rfc9800.txt | |||
---|---|---|---|---|
skipping to change at line 14 ¶ | skipping to change at line 14 ¶ | |||
Updates: 8754 C. Filsfils | Updates: 8754 C. Filsfils | |||
Category: Standards Track Cisco Systems, Inc. | Category: Standards Track Cisco Systems, Inc. | |||
ISSN: 2070-1721 Z. Li | ISSN: 2070-1721 Z. Li | |||
Huawei Technologies | Huawei Technologies | |||
B. Decraene | B. Decraene | |||
Orange | Orange | |||
F. Clad, Ed. | F. Clad, Ed. | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
June 2025 | June 2025 | |||
Compressed SRv6 Segment List Encoding (CSID) | Compressed SRv6 Segment List Encoding | |||
Abstract | Abstract | |||
Segment Routing over IPv6 (SRv6) is the instantiation of Segment | Segment Routing over IPv6 (SRv6) is the instantiation of Segment | |||
Routing (SR) on the IPv6 data plane. This document specifies new | Routing (SR) on the IPv6 data plane. This document specifies new | |||
flavors for the SRv6 endpoint behaviors defined in RFC 8986, which | flavors for the SRv6 endpoint behaviors defined in RFC 8986, which | |||
enable the compression of an SRv6 segment list. Such compression | enable the compression of an SRv6 segment list. Such compression | |||
significantly reduces the size of the SRv6 encapsulation needed to | significantly reduces the size of the SRv6 encapsulation needed to | |||
steer packets over long segment lists. | steer packets over long segment lists. | |||
skipping to change at line 210 ¶ | skipping to change at line 210 ¶ | |||
* LBL is the Locator-Block length of the SID. | * LBL is the Locator-Block length of the SID. | |||
* LNL is the Locator-Node length of the SID. | * LNL is the Locator-Node length of the SID. | |||
* FL is the Function length of the SID. | * FL is the Function length of the SID. | |||
* AL is the Argument length of the SID. | * AL is the Argument length of the SID. | |||
In addition, the Locator-Node and Function length (LNFL) is the sum | In addition, the Locator-Node and Function length (LNFL) is the sum | |||
of the Locator-Node length and the Function length of the SID. It is | of the LNL and the FL of the SID. It is also referred to as the | |||
also referred to as the "CSID length". | "CSID length". | |||
2.1. Requirements Language | 2.1. Requirements Language | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in | "OPTIONAL" in this document are to be interpreted as described in | |||
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
3. Basic Concepts | 3. Basic Concepts | |||
In an SR domain, all SRv6 SIDs instantiated from the same Locator- | In an SR domain, all SRv6 SIDs instantiated from the same Locator- | |||
Block share the same most significant bits. In addition, when the | Block share the same most significant bits. In addition, when the | |||
combined length of the SRv6 SID Locator, Function, and Argument is | combined length of the SRv6 SID Locator, Function, and Argument is | |||
smaller than 128 bits, the least significant bits of the SID are | smaller than 128 bits, the least significant bits of the SID are | |||
padded with zeros. The compressed segment list encoding seeks to | padded with zeros. The compressed segment list encoding seeks to | |||
decrease the packet header length by avoiding the repetition of the | decrease the packet header length by avoiding the repetition of the | |||
same Locator-Block and reducing the use of padding bits. | same Locator-Block and reducing the use of padding bits. | |||
Building upon, and fully compatible with, the mechanisms specified in | Building upon, and fully compatible with the mechanisms specified in | |||
[RFC8754] and [RFC8986], the compressed segment list encoding | [RFC8754] and [RFC8986], the compressed segment list encoding | |||
leverages a SID list compression logic at the SR source node (see | leverages a SID list compression logic at the SR source node (see | |||
Section 6) in combination with new flavors of the SRv6 endpoint | Section 6) in combination with new flavors of the SRv6 endpoint | |||
behaviors that process the compressed SID list (see Section 4). | behaviors that process the compressed SID list (see Section 4). | |||
An SR source node constructs and compresses the SID list depending on | An SR source node constructs and compresses the SID list depending on | |||
the SIDs instantiated on each SR segment endpoint node that the | the SIDs instantiated on each SR segment endpoint node that the | |||
packet is intended to traverse, as well as its own compression | packet is intended to traverse, as well as its own compression | |||
capabilities. The resulting compressed SID list is a combination of | capabilities. The resulting compressed SID list is a combination of | |||
CSID sequences, for the SIDs that the SR source node was able to | CSID sequences, for the SIDs that the SR source node was able to | |||
skipping to change at line 323 ¶ | skipping to change at line 323 ¶ | |||
CSIDs, where K is computed as floor((128-LBL)/LNFL) (floor(x) is the | CSIDs, where K is computed as floor((128-LBL)/LNFL) (floor(x) is the | |||
greatest integer less than or equal to x [GKP94]). Each CSID | greatest integer less than or equal to x [GKP94]). Each CSID | |||
container for NEXT-CSID is independent, such that contiguous CSID | container for NEXT-CSID is independent, such that contiguous CSID | |||
containers in a CSID sequence can be considered to be separate CSID | containers in a CSID sequence can be considered to be separate CSID | |||
sequences. | sequences. | |||
When a CSID sequence compressed using the NEXT-CSID flavor comprises | When a CSID sequence compressed using the NEXT-CSID flavor comprises | |||
at least two CSIDs, the last CSID in the sequence is not required to | at least two CSIDs, the last CSID in the sequence is not required to | |||
have the NEXT-CSID flavor. It can be bound to any SRv6 endpoint | have the NEXT-CSID flavor. It can be bound to any SRv6 endpoint | |||
behavior, including [RFC8986] behaviors and REPLACE-CSID flavor, as | behavior, including [RFC8986] behaviors and REPLACE-CSID flavor, as | |||
long as the updated destination address resulting from the processing | long as the updated Destination Address resulting from the processing | |||
of the previous CSID in the sequence is a valid form for that last | of the previous CSID in the sequence is a valid form for that last | |||
SID. Line S12 of the first pseudocode in Section 6.2 provides | SID. Line S12 of the first pseudocode in Section 6.2 provides | |||
sufficient conditions to ensure this property. | sufficient conditions to ensure this property. | |||
+------------------------------------------------------------------+ | +------------------------------------------------------------------+ | |||
| Locator-Block |Loc-Node| Argument | | | Locator-Block |Loc-Node| Argument | | |||
| |Function| | | | |Function| | | |||
+------------------------------------------------------------------+ | +------------------------------------------------------------------+ | |||
<----------------------> <------> <------------------------------> | <----------------------> <------> <------------------------------> | |||
LBL LNFL AL | LBL LNFL AL | |||
skipping to change at line 391 ¶ | skipping to change at line 391 ¶ | |||
| 7th CSID | 8th CSID | | | 7th CSID | 8th CSID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| 0 | | | 0 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Second CSID Container | Second CSID Container | |||
Figure 2: Compressed SID List of Eight NEXT-CSID Flavor SIDs with | Figure 2: Compressed SID List of Eight NEXT-CSID Flavor SIDs with | |||
a 48-Bit Locator-Block, 16-Bit Combined Locator-Node and | a 48-Bit Locator-Block, 16-Bit Combined Locator-Node and | |||
Function, and 64-Bit Argument | Function, and 64-Bit Argument | |||
An implementation MUST support a 32-bit Locator-Block length (LBL) | An implementation MUST support a 32-bit LBL and a 16-bit CSID length | |||
and a 16-bit CSID length (LNFL) for NEXT-CSID flavor SIDs, and it MAY | (LNFL) for NEXT-CSID flavor SIDs, and it MAY support any additional | |||
support any additional Locator-Block and CSID length. | Locator-Block and CSID length. | |||
The Argument length (AL) for NEXT-CSID flavor SIDs is equal to 128- | The AL for NEXT-CSID flavor SIDs is equal to 128-LBL-LNFL. | |||
LBL-LNFL. | ||||
When processing an IPv6 packet that matches a Forwarding Information | When processing an IPv6 packet that matches a Forwarding Information | |||
Base (FIB) entry locally instantiated as a SID with the NEXT-CSID | Base (FIB) entry locally instantiated as a SID with the NEXT-CSID | |||
flavor, the SR segment endpoint node applies the procedure specified | flavor, the SR segment endpoint node applies the procedure specified | |||
in the following subsection that corresponds to the SID behavior. If | in the following subsection that corresponds to the SID behavior. If | |||
the SID also has the PSP, USP, or USD flavor, the procedure is | the SID also has the PSP, USP, or USD flavor, the procedure is | |||
modified as described in Section 4.1.7. | modified as described in Section 4.1.7. | |||
An SR segment endpoint node instantiating a SID of this document with | An SR segment endpoint node instantiating a SID of this document with | |||
the NEXT-CSID flavor MUST accept any Argument value for that SID. | the NEXT-CSID flavor MUST accept any Argument value for that SID. | |||
skipping to change at line 429 ¶ | skipping to change at line 428 ¶ | |||
4.1.1. End with NEXT-CSID | 4.1.1. End with NEXT-CSID | |||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
instantiated as an End SID with the NEXT-CSID flavor, the procedure | instantiated as an End SID with the NEXT-CSID flavor, the procedure | |||
described in Section 4.1 of [RFC8986] is executed with the following | described in Section 4.1 of [RFC8986] is executed with the following | |||
modifications. | modifications. | |||
The below pseudocode is inserted between lines S01 and S02 of the SRH | The below pseudocode is inserted between lines S01 and S02 of the SRH | |||
processing in Section 4.1 of [RFC8986]. In addition, this pseudocode | processing in Section 4.1 of [RFC8986]. In addition, this pseudocode | |||
is executed before processing any extension header that is not an | is executed before processing the first header in the IPv6 extension | |||
SRH, a Hop-by-Hop header or a Destination Options header, or before | header chain that is not an SRH, a Hop-by-Hop header, or a | |||
processing the upper-layer header, whichever comes first. | Destination Options header. If the IPv6 extension header chain does | |||
not include any header matching this criteria, this pseudocode is | ||||
executed before processing the upper-layer header. | ||||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | |||
Destination Address. | Destination Address. | |||
N06. Set the bits [(LBL+AL)..127] of the Destination Address to | N06. Set the bits [(LBL+AL)..127] of the Destination Address to | |||
skipping to change at line 478 ¶ | skipping to change at line 479 ¶ | |||
replacing line N08 as shown below. | replacing line N08 as shown below. | |||
N08. Submit the packet to the IPv6 module for transmission to the | N08. Submit the packet to the IPv6 module for transmission to the | |||
new destination via a member of J. | new destination via a member of J. | |||
| Note: the variable J is defined in Section 4.2 of [RFC8986]. | | Note: the variable J is defined in Section 4.2 of [RFC8986]. | |||
The resulting pseudocode is inserted between lines S01 and S02 of the | The resulting pseudocode is inserted between lines S01 and S02 of the | |||
SRH processing in Section 4.1 of [RFC8986] after applying the | SRH processing in Section 4.1 of [RFC8986] after applying the | |||
modification described in Section 4.2 of [RFC8986]. In addition, | modification described in Section 4.2 of [RFC8986]. In addition, | |||
this pseudocode is executed before processing any extension header | this pseudocode is executed before processing the first header in the | |||
that is not an SRH, a Hop-by-Hop header or a Destination Options | IPv6 extension header chain that is not an SRH, a Hop-by-Hop header, | |||
header, or before processing the upper-layer header, whichever comes | or a Destination Options header. If the IPv6 extension header chain | |||
first. | does not include any header matching this criteria, this pseudocode | |||
is executed before processing the upper-layer header. | ||||
A rendering of the complete pseudocode is provided in Appendix A.2. | A rendering of the complete pseudocode is provided in Appendix A.2. | |||
4.1.3. End.T with NEXT-CSID | 4.1.3. End.T with NEXT-CSID | |||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
instantiated as an End.T SID with the NEXT-CSID flavor, the procedure | instantiated as an End.T SID with the NEXT-CSID flavor, the procedure | |||
described in Section 4.3 of [RFC8986] is executed with the following | described in Section 4.3 of [RFC8986] is executed with the following | |||
modifications. | modifications. | |||
skipping to change at line 504 ¶ | skipping to change at line 506 ¶ | |||
N08.1. Set the packet's associated FIB table to T. | N08.1. Set the packet's associated FIB table to T. | |||
N08.2. Submit the packet to the egress IPv6 FIB lookup for | N08.2. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
| Note: the variable T is defined in Section 4.3 of [RFC8986]. | | Note: the variable T is defined in Section 4.3 of [RFC8986]. | |||
The resulting pseudocode is inserted between lines S01 and S02 of the | The resulting pseudocode is inserted between lines S01 and S02 of the | |||
SRH processing in Section 4.1 of [RFC8986] after applying the | SRH processing in Section 4.1 of [RFC8986] after applying the | |||
modification described in Section 4.3 of [RFC8986]. In addition, | modification described in Section 4.3 of [RFC8986]. In addition, | |||
this pseudocode is executed before processing any extension header | this pseudocode is executed before processing the first header in the | |||
that is not an SRH, a Hop-by-Hop header or a Destination Options | IPv6 extension header chain that is not an SRH, a Hop-by-Hop header, | |||
header, or before processing the upper-layer header, whichever comes | or a Destination Options header. If the IPv6 extension header chain | |||
first. | does not include any header matching this criteria, this pseudocode | |||
is executed before processing the upper-layer header. | ||||
A rendering of the complete pseudocode is provided in Appendix A.3. | A rendering of the complete pseudocode is provided in Appendix A.3. | |||
4.1.4. End.B6.Encaps with NEXT-CSID | 4.1.4. End.B6.Encaps with NEXT-CSID | |||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
instantiated as an End.B6.Encaps SID with the NEXT-CSID flavor, the | instantiated as an End.B6.Encaps SID with the NEXT-CSID flavor, the | |||
procedure described in Section 4.13 of [RFC8986] is executed with the | procedure described in Section 4.13 of [RFC8986] is executed with the | |||
following modifications. | following modifications. | |||
skipping to change at line 535 ¶ | skipping to change at line 538 ¶ | |||
Hop Limit, and Next Header fields. | Hop Limit, and Next Header fields. | |||
N08.5. Submit the packet to the egress IPv6 FIB lookup for | N08.5. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the next destination. | transmission to the next destination. | |||
| Note: the variables A and B, as well as the values of the | | Note: the variables A and B, as well as the values of the | |||
| Payload Length, Traffic Class, Flow Label, Hop Limit, and Next | | Payload Length, Traffic Class, Flow Label, Hop Limit, and Next | |||
| Header are defined in Section 4.13 of [RFC8986]. | | Header are defined in Section 4.13 of [RFC8986]. | |||
The resulting pseudocode is inserted between lines S01 and S02 of the | The resulting pseudocode is inserted between lines S01 and S02 of the | |||
SRH processing in Section 4.13 of [RFC8986]. In addition, this | SRH processing in Section 4.13 of [RFC8986]. In addition, this | |||
pseudocode is executed before processing any extension header that is | pseudocode is executed before processing the first header in the IPv6 | |||
not an SRH, a Hop-by-Hop header or a Destination Options header, or | extension header chain that is not an SRH, a Hop-by-Hop header, or a | |||
before processing the upper-layer header, whichever comes first. | Destination Options header. If the IPv6 extension header chain does | |||
not include any header matching this criteria, this pseudocode is | ||||
executed before processing the upper-layer header. | ||||
A rendering of the complete pseudocode is provided in Appendix A.4. | A rendering of the complete pseudocode is provided in Appendix A.4. | |||
Similar to the base End.B6.Encaps SID defined in Section 4.13 of | Similar to the base End.B6.Encaps SID defined in Section 4.13 of | |||
[RFC8986], the NEXT-CSID flavor variant updates the Destination | [RFC8986], the NEXT-CSID flavor variant updates the Destination | |||
Address field of the inner IPv6 header to the next SID in the | Address field of the inner IPv6 header to the next SID in the | |||
original segment list before encapsulating the packet with the | original segment list before encapsulating the packet with the | |||
segment list of SR Policy B. At the endpoint of SR Policy B, the | segment list of SR Policy B. At the endpoint of SR Policy B, the | |||
encapsulation is removed and the inner packet is forwarded towards | encapsulation is removed and the inner packet is forwarded towards | |||
the exposed destination address, which already contains the next SID | the exposed Destination Address, which already contains the next SID | |||
in the original segment list. | in the original segment list. | |||
4.1.5. End.B6.Encaps.Red with NEXT-CSID | 4.1.5. End.B6.Encaps.Red with NEXT-CSID | |||
This is an optimization of the End.B6.Encaps with NEXT-CSID behavior. | This is an optimization of the End.B6.Encaps with NEXT-CSID behavior. | |||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
instantiated as an End.B6.Encaps.Red SID with the NEXT-CSID flavor, | instantiated as an End.B6.Encaps.Red SID with the NEXT-CSID flavor, | |||
the procedure described in Section 4.1.4 of this document is executed | the procedure described in Section 4.1.4 of this document is executed | |||
with the modifications in Section 4.14 of [RFC8986]. | with the modifications in Section 4.14 of [RFC8986]. | |||
skipping to change at line 576 ¶ | skipping to change at line 581 ¶ | |||
The pseudocode in Section 4.1.1 of this document is modified by | The pseudocode in Section 4.1.1 of this document is modified by | |||
replacing line N08 as shown below. | replacing line N08 as shown below. | |||
N08.1. Push the MPLS label stack for B. | N08.1. Push the MPLS label stack for B. | |||
N08.2. Submit the packet to the MPLS engine for transmission. | N08.2. Submit the packet to the MPLS engine for transmission. | |||
| Note: the variable B is defined in Section 4.15 of [RFC8986]. | | Note: the variable B is defined in Section 4.15 of [RFC8986]. | |||
The resulting pseudocode is inserted between lines S01 and S02 of the | The resulting pseudocode is inserted between lines S01 and S02 of the | |||
SRH processing in Section 4.15 of [RFC8986]. In addition, this | SRH processing in Section 4.15 of [RFC8986]. In addition, this | |||
pseudocode is executed before processing any extension header that is | pseudocode is executed before processing the first header in the IPv6 | |||
not an SRH, a Hop-by-Hop header or a Destination Options header, or | extension header chain that is not an SRH, a Hop-by-Hop header, or a | |||
before processing the upper-layer header, whichever comes first. | Destination Options header. If the IPv6 extension header chain does | |||
not include any header matching this criteria, this pseudocode is | ||||
executed before processing the upper-layer header. | ||||
A rendering of the complete pseudocode is provided in Appendix A.5. | A rendering of the complete pseudocode is provided in Appendix A.5. | |||
4.1.7. Combination with PSP, USP, and USD Flavors | 4.1.7. Combination with PSP, USP, and USD Flavors | |||
PSP: The PSP flavor defined in Section 4.16.1 of [RFC8986] is | PSP: The PSP flavor defined in Section 4.16.1 of [RFC8986] is | |||
unchanged when combined with the NEXT-CSID flavor. | unchanged when combined with the NEXT-CSID flavor. | |||
USP: The USP flavor defined in Section 4.16.2 of [RFC8986] is | USP: The USP flavor defined in Section 4.16.2 of [RFC8986] is | |||
unchanged when combined with the NEXT-CSID flavor. | unchanged when combined with the NEXT-CSID flavor. | |||
USD: The USP flavor defined in Section 4.16.3 of [RFC8986] is | USD: The USD flavor defined in Section 4.16.3 of [RFC8986] is | |||
unchanged when combined with the NEXT-CSID flavor. | unchanged when combined with the NEXT-CSID flavor. | |||
4.2. REPLACE-CSID Flavor | 4.2. REPLACE-CSID Flavor | |||
A CSID sequence compressed using the mechanism of the REPLACE-CSID | A CSID sequence compressed using the mechanism of the REPLACE-CSID | |||
flavor starts with a CSID container in fully formed 128-bit SID | flavor starts with a CSID container in fully formed 128-bit SID | |||
format. The Locator-Block of this SID is the common Locator-Block | format. The Locator-Block of this SID is the common Locator-Block | |||
for all the CSIDs in the CSID sequence, its Locator-Node and Function | for all the CSIDs in the CSID sequence, its Locator-Node and Function | |||
are those of the first CSID, and its Argument carries the index of | are those of the first CSID, and its Argument carries the index of | |||
the current CSID in the current CSID container. The Argument value | the current CSID in the current CSID container. The Argument value | |||
skipping to change at line 718 ¶ | skipping to change at line 725 ¶ | |||
with a 48-Bit Locator-Block, 32-Bit Combined Locator-Node and | with a 48-Bit Locator-Block, 32-Bit Combined Locator-Node and | |||
Function, and 48-Bit Argument | Function, and 48-Bit Argument | |||
This document updates [RFC8754] by allowing each entry in the SRH | This document updates [RFC8754] by allowing each entry in the SRH | |||
Segment List to be either an IPv6 address or a REPLACE-CSID container | Segment List to be either an IPv6 address or a REPLACE-CSID container | |||
in packed format. The SRv6 endpoint behaviors specified herein | in packed format. The SRv6 endpoint behaviors specified herein | |||
ensure that this entry is never copied as is to the IPv6 header and | ensure that this entry is never copied as is to the IPv6 header and | |||
that the Destination Address field of the IPv6 header is always a | that the Destination Address field of the IPv6 header is always a | |||
valid SRv6 SID conforming to [RFC9602]. | valid SRv6 SID conforming to [RFC9602]. | |||
The REPLACE-CSID flavor SIDs support any Locator-Block length (LBL), | The REPLACE-CSID flavor SIDs support any LBL, depending on the needs | |||
depending on the needs of the operator, as long as it does not exceed | of the operator, as long as it does not exceed 128-LNFL- | |||
128-LNFL-ceiling(log_2(128/LNFL)) (ceiling(x) is the least integer | ceiling(log_2(128/LNFL)) (ceiling(x) is the least integer greater | |||
greater than or equal to x [GKP94]), so that enough bits remain | than or equal to x [GKP94]), so that enough bits remain available for | |||
available for the CSID and Argument. A Locator-Block length of 48, | the CSID and Argument. An LBL of 48, 56, 64, 72, or 80 bits is | |||
56, 64, 72, or 80 bits is recommended for easier reading in | recommended for easier reading in operation. | |||
operation. | ||||
This document defines the REPLACE-CSID flavor for 16-bit and 32-bit | This document defines the REPLACE-CSID flavor for 16-bit and 32-bit | |||
CSID lengths (LNFL). An implementation MUST support a 32-bit CSID | CSID lengths (LNFL). An implementation MUST support a 32-bit CSID | |||
length for REPLACE-CSID flavor SIDs. | length for REPLACE-CSID flavor SIDs. | |||
The Argument length (AL) for REPLACE-CSID flavor SIDs is equal to | The AL for REPLACE-CSID flavor SIDs is equal to 128-LBL-LNFL. The | |||
128-LBL-LNFL. The index value is encoded in the least significant X | index value is encoded in the least significant X bits of the | |||
bits of the Argument, where X is computed as ceiling(log_2(128/ | Argument, where X is computed as ceiling(log_2(128/LNFL)). | |||
LNFL)). | ||||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
instantiated as a SID with the REPLACE-CSID flavor, the SR segment | instantiated as a SID with the REPLACE-CSID flavor, the SR segment | |||
endpoint node applies the procedure specified in the following | endpoint node applies the procedure specified in the following | |||
subsection that corresponds to the SID behavior. If the SID also has | subsection that corresponds to the SID behavior. If the SID also has | |||
the PSP, USP, or USD flavor, the procedure is modified as described | the PSP, USP, or USD flavor, the procedure is modified as described | |||
in Section 4.2.8. | in Section 4.2.8. | |||
At a high level, at the start of a CSID sequence using the REPLACE- | At a high level, at the start of a CSID sequence using the REPLACE- | |||
CSID flavor, the first CSID container in fully formed 128-bit SID | CSID flavor, the first CSID container in fully formed 128-bit SID | |||
skipping to change at line 778 ¶ | skipping to change at line 783 ¶ | |||
instantiated as an End SID with the REPLACE-CSID flavor, the SRH | instantiated as an End SID with the REPLACE-CSID flavor, the SRH | |||
processing described in Section 4.1 of [RFC8986] is executed with the | processing described in Section 4.1 of [RFC8986] is executed with the | |||
following modifications. | following modifications. | |||
Line S02 of SRH processing in Section 4.1 of [RFC8986] is replaced as | Line S02 of SRH processing in Section 4.1 of [RFC8986] is replaced as | |||
follows. | follows. | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
Segment List[0][DA.Arg.Index-1] == 0)) { | Segment List[0][DA.Arg.Index-1] == 0)) { | |||
Lines S09 to S15 are replaced by the following pseudo code. | Lines S09 to S15 are replaced by the following pseudocode. | |||
R01. If (DA.Arg.Index != 0) { | R01. If (DA.Arg.Index != 0) { | |||
R02. If ((Last Entry > max_LE) or (Segments Left > Last Entry)) { | R02. If ((Last Entry > max_LE) or (Segments Left > Last Entry)) { | |||
R03. Send an ICMP Parameter Problem to the Source Address, | R03. Send an ICMP Parameter Problem to the Source Address, | |||
Code 0 (Erroneous header field encountered), | Code 0 (Erroneous header field encountered), | |||
Pointer set to the Segments Left field, | Pointer set to the Segments Left field, | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
R04. } | R04. } | |||
R05. Decrement DA.Arg.Index by 1. | R05. Decrement DA.Arg.Index by 1. | |||
R06. If (Segment List[Segments Left][DA.Arg.Index] == 0) { | R06. If (Segment List[Segments Left][DA.Arg.Index] == 0) { | |||
skipping to change at line 1003 ¶ | skipping to change at line 1008 ¶ | |||
USD: The USD flavor defined in Section 4.16.3 of [RFC8986] is | USD: The USD flavor defined in Section 4.16.3 of [RFC8986] is | |||
unchanged when combined with the REPLACE-CSID flavor. | unchanged when combined with the REPLACE-CSID flavor. | |||
5. CSID Allocation | 5. CSID Allocation | |||
The CSID value of 0 is reserved. It is used to indicate the end of a | The CSID value of 0 is reserved. It is used to indicate the end of a | |||
CSID container. | CSID container. | |||
In order to efficiently manage the CSID numbering space, a deployment | In order to efficiently manage the CSID numbering space, a deployment | |||
may divide it into two non-overlapping sub-spaces: a Global | may divide it into two non-overlapping sub-spaces: a GIB and a LIB. | |||
Identifiers Block (GIB) and a Local Identifiers Block (LIB). | ||||
The CSID values that are allocated from the GIB have a global | The CSID values that are allocated from the GIB have a global | |||
semantic within the Locator-Block, while those that are allocated | semantic within the Locator-Block, while those that are allocated | |||
from the LIB have a local semantic on an SR segment endpoint node and | from the LIB have a local semantic on an SR segment endpoint node and | |||
within the scope of the Locator-Block. | within the scope of the Locator-Block. | |||
The concept of LIB is applicable to SRv6 and specifically to its | The concept of LIB is applicable to SRv6 and specifically to its | |||
NEXT-CSID and REPLACE-CSID flavors. The shorter the CSID, the more | NEXT-CSID and REPLACE-CSID flavors. The shorter the CSID, the more | |||
benefit the LIB brings. | benefit the LIB brings. | |||
skipping to change at line 1064 ¶ | skipping to change at line 1068 ¶ | |||
FIB entry that matches only the Locator and Function parts of the SID | FIB entry that matches only the Locator and Function parts of the SID | |||
(i.e., with a prefix length of LBL + LNL + FL). | (i.e., with a prefix length of LBL + LNL + FL). | |||
In addition, an SR segment endpoint node instantiating NEXT-CSID | In addition, an SR segment endpoint node instantiating NEXT-CSID | |||
flavor SIDs from both the GIB and LIB may install combined "Global + | flavor SIDs from both the GIB and LIB may install combined "Global + | |||
Local" FIB entries to match a sequence of global and local CSIDs in a | Local" FIB entries to match a sequence of global and local CSIDs in a | |||
single longest-prefix match (LPM) lookup. | single longest-prefix match (LPM) lookup. | |||
For example, let us consider an SR segment endpoint node 10 | For example, let us consider an SR segment endpoint node 10 | |||
instantiating the following two NEXT-CSID flavor SIDs according to | instantiating the following two NEXT-CSID flavor SIDs according to | |||
the CSID length, Locator-Block length, and GIB/LIB recommendations in | the CSID length, LBL, and GIB/LIB recommendations in this section. | |||
this section. | ||||
* The SID 2001:db8:b1:10:: bound to the End behavior with the NEXT- | * The SID 2001:db8:b1:10:: bound to the End behavior with the NEXT- | |||
CSID flavor is instantiated from GIB with: | CSID flavor is instantiated from a GIB with: | |||
- Locator-Block length (LBL) = 48 (Locator-Block value | - LBL = 48 (Locator-Block value 0x20010db800b1), | |||
0x20010db800b1), | ||||
- Locator-Node length (LNL) = 16 (Locator-Node value 0x0010), | - LNL = 16 (Locator-Node value 0x0010), | |||
- Function length (FL) = 0, and | - FL = 0, and | |||
- Argument length (AL) = 64. | - AL = 64. | |||
* The SID 2001:db8:b1:f123:: bound to the End.X behavior for its | * The SID 2001:db8:b1:f123:: bound to the End.X behavior for its | |||
local IGP adjacency 123 with the NEXT-CSID flavor is instantiated | local IGP adjacency 123 with the NEXT-CSID flavor is instantiated | |||
from LIB with: | from LIB with: | |||
- Locator-Block length (LBL) = 48 (Locator-Block value | - LBL = 48 (Locator-Block value 0x20010db800b1), | |||
0x20010db800b1), | ||||
- Locator-Node length (LNL) = 0, | - LNL = 0, | |||
- Function length (FL) = 16 (Function value 0xf123), and | - FL = 16 (Function value 0xf123), and | |||
- Argument length (AL) = 64. | - AL = 64. | |||
For SID 2001:db8:b1:10::, Node 10 would install the FIB entry | For SID 2001:db8:b1:10::, Node 10 would install the FIB entry | |||
2001:db8:b1:10::/64 bound to the End SID with the NEXT-CSID flavor. | 2001:db8:b1:10::/64 bound to the End SID with the NEXT-CSID flavor. | |||
For SID 2001:db8:b1:f123::, Node 10 would install the FIB entry | For SID 2001:db8:b1:f123::, Node 10 would install the FIB entry | |||
2001:db8:b1:f123::/64 bound to the End.X SID for adjacency 123 with | 2001:db8:b1:f123::/64 bound to the End.X SID for adjacency 123 with | |||
the NEXT-CSID flavor. | the NEXT-CSID flavor. | |||
In addition, Node 10 may also install the combined FIB entry | In addition, Node 10 may also install the combined FIB entry | |||
2001:db8:b1:10:f123::/80 bound to the End.X SID for adjacency 123 | 2001:db8:b1:10:f123::/80 bound to the End.X SID for adjacency 123 | |||
with the NEXT-CSID flavor. | with the NEXT-CSID flavor. | |||
As another example, let us consider an SR segment endpoint node 20 | As another example, let us consider an SR segment endpoint node 20 | |||
instantiating the following two REPLACE-CSID flavor SIDs according to | instantiating the following two REPLACE-CSID flavor SIDs according to | |||
the CSID length, Locator-Block length, and GIB/LIB recommendations in | the CSID length, LBL, and GIB/LIB recommendations in this section. | |||
this section. | ||||
* 2001:db8:b2:20:1:: from GIB with Locator-Block length (LBL) = 48, | * 2001:db8:b2:20:1:: from a GIB with LBL = 48, LNL = 16, FL = 16, AL | |||
Locator-Node length (LNL) = 16, Function length (FL) = 16, | = 48, and bound to the End behavior with the REPLACE-CSID flavor. | |||
Argument length (AL) = 48, and bound to the End behavior with the | ||||
REPLACE-CSID flavor. | ||||
* 2001:db8:b2:20:123:: from GIB with Locator-Block length (LBL) = | * 2001:db8:b2:20:123:: from a GIB with LBL = 48, LNL = 16, FL = 16, | |||
48, Locator-Node length (LNL) = 16, Function length (FL) = 16, | AL = 48, and bound to the End.X behavior for its local IGP | |||
Argument length (AL) = 48, and bound to the End.X behavior for its | adjacency 123 with the REPLACE-CSID flavor. | |||
local IGP adjacency 123 with the REPLACE-CSID flavor. | ||||
For SID 2001:db8:b2:20:1::, Node 20 would install the FIB entry | For SID 2001:db8:b2:20:1::, Node 20 would install the FIB entry | |||
2001:db8:b2:20:1::/80 bound to the End SID with the REPLACE-CSID | 2001:db8:b2:20:1::/80 bound to the End SID with the REPLACE-CSID | |||
flavor. | flavor. | |||
For SID 2001:db8:b2:20:123::, Node 20 would install the FIB entry | For SID 2001:db8:b2:20:123::, Node 20 would install the FIB entry | |||
2001:db8:b2:20:123::/80 bound to the End.X SID for adjacency 123 with | 2001:db8:b2:20:123::/80 bound to the End.X SID for adjacency 123 with | |||
the REPLACE-CSID flavor. | the REPLACE-CSID flavor. | |||
6. SR Source Node | 6. SR Source Node | |||
skipping to change at line 1140 ¶ | skipping to change at line 1137 ¶ | |||
segment list, along with their respective SRv6 endpoint behavior, | segment list, along with their respective SRv6 endpoint behavior, | |||
structure, and any other relevant attribute (e.g., the set of L3 | structure, and any other relevant attribute (e.g., the set of L3 | |||
adjacencies associated with an End.X SID). | adjacencies associated with an End.X SID). | |||
6.1. SID Validation for Compression | 6.1. SID Validation for Compression | |||
As part of the compression process or as a preliminary step, the SR | As part of the compression process or as a preliminary step, the SR | |||
source node MUST validate the SID structure of each SID of this | source node MUST validate the SID structure of each SID of this | |||
document in the segment list. The SR source node does so regardless | document in the segment list. The SR source node does so regardless | |||
of whether the segment list is explicitly configured, locally | of whether the segment list is explicitly configured, locally | |||
computed, or advertised by a controller (e.g., via BGP [SR-BGP] or | computed, or advertised by a controller (e.g., via BGP | |||
PCEP [RFC9603]). | [BGP-SR-Policy] or PCEP [RFC9603]). | |||
A SID structure is valid for compression if it meets all the | A SID structure is valid for compression if it meets all the | |||
following conditions: | following conditions: | |||
* The Locator-Block length is not 0. | * The LBL is not 0. | |||
* The sum of the Locator-Node length and Function length is not 0. | * The sum of the LNFL is not 0. | |||
* The Argument length is equal to 128-LBL-LNL-FL. | * The AL is equal to 128-LBL-LNL-FL. | |||
When compressing a SID list, the SR source node MUST treat an invalid | When compressing a SID list, the SR source node MUST treat an invalid | |||
SID structure as unknown. A SID with an unknown SID structure is not | SID structure as unknown. A SID with an unknown SID structure is not | |||
compressible. | compressible. | |||
Section 8 discusses how the SIDs of this document and their structure | Section 8 discusses how the SIDs of this document and their structure | |||
can be advertised to the SR source node through various control plane | can be advertised to the SR source node through various control plane | |||
protocols. The SID structure may also be learned through | protocols. The SID structure may also be learned through | |||
configuration or other management protocols. The details of such | configuration or other management protocols. The details of such | |||
mechanisms are outside the scope of this document. | mechanisms are outside the scope of this document. | |||
skipping to change at line 1232 ¶ | skipping to change at line 1229 ¶ | |||
container { | container { | |||
S13. Copy the Locator-Node, Function, and Argument of S to the | S13. Copy the Locator-Node, Function, and Argument of S to the | |||
most significant remaining Argument bits of the CSID | most significant remaining Argument bits of the CSID | |||
container | container | |||
S14. } // End If | S14. } // End If | |||
S15. } // End If | S15. } // End If | |||
S16. Push the NEXT-CSID container onto the compressed SID list | S16. Push the NEXT-CSID container onto the compressed SID list | |||
* When the compression method encounters a series of REPLACE-CSID | * When the compression method encounters a series of REPLACE-CSID | |||
flavor SIDs of the same CSID length in the uncompressed SID list, | flavor SIDs of the same CSID length in the uncompressed SID list, | |||
it compresses the series as per the following high-level pseudo | it compresses the series as per the following high-level | |||
code. A compression checking function ComCheck(F, S) is defined | pseudocode. A compression checking function ComCheck(F, S) is | |||
to check if two SIDs F and S share the same SID structure and | defined to check if two SIDs F and S share the same SID structure | |||
Locator-Block value, and if S has either no Argument or an | and Locator-Block value, and if S has either no Argument or an | |||
Argument with value 0. If the check passes, then ComCheck(F,S) | Argument with value 0. If the check passes, then ComCheck(F,S) | |||
returns true. | returns true. | |||
S01. Initialize a REPLACE-CSID container in full SID format equal to | S01. Initialize a REPLACE-CSID container in full SID format equal to | |||
the first SID in the series | the first SID in the series | |||
S02. Push the REPLACE-CSID container onto the compressed SID list | S02. Push the REPLACE-CSID container onto the compressed SID list | |||
S03. Initialize a new REPLACE-CSID container in packed format if | S03. Initialize a new REPLACE-CSID container in packed format if | |||
there are more than one SIDs and initialize the remaining | there are more than one SIDs and initialize the remaining | |||
capacity of the REPLACE-CSID container to 128 bits | capacity of the REPLACE-CSID container to 128 bits | |||
S04. For each subsequent SID in the uncompressed SID list { | S04. For each subsequent SID in the uncompressed SID list { | |||
skipping to change at line 1375 ¶ | skipping to change at line 1372 ¶ | |||
3. When a REPLACE-CSID flavor CSID is present as the last SID in a | 3. When a REPLACE-CSID flavor CSID is present as the last SID in a | |||
container that is not the last Segment List entry (index 0) in | container that is not the last Segment List entry (index 0) in | |||
the SRH, the next element in the SID list MUST be a REPLACE-CSID | the SRH, the next element in the SID list MUST be a REPLACE-CSID | |||
container in packed format carrying at least one CSID. | container in packed format carrying at least one CSID. | |||
The SR source node determines the compression scheme of REPLACE-CSID | The SR source node determines the compression scheme of REPLACE-CSID | |||
flavor SIDs as follows. | flavor SIDs as follows. | |||
When receiving a SID advertisement for a REPLACE-CSID flavor SID with | When receiving a SID advertisement for a REPLACE-CSID flavor SID with | |||
LNL=16, FL=0, AL=128-LBL-LNFL, and all zeros as the value of the | LNL = 16, FL = 0, AL = 128-LBL-LNFL, and all zeros as the value of | |||
Argument, the SR source node marks both the SID and its locator as | the Argument, the SR source node marks both the SID and its locator | |||
using 16-bit compression. All other SIDs allocated from this locator | as using 16-bit compression. All other SIDs allocated from this | |||
with LNL=16, FL=16, AL=128-LBL-LNFL, and all zeros as the value of | locator with LNL = 16, FL = 16, AL = 128-LBL-LNFL, and all zeros as | |||
the Argument are also marked as using 16-bit compression. When | the value of the Argument are also marked as using 16-bit | |||
receiving a SID advertisement for a REPLACE-CSID flavor SID with | compression. When receiving a SID advertisement for a REPLACE-CSID | |||
LNFL=32, AL=128-LBL-LNFL, and all zeros as the value of the Argument, | flavor SID with LNFL = 32, AL = 128-LBL-LNFL, and all zeros as the | |||
the SR source node marks both the SID and its locator as using 32-bit | value of the Argument, the SR source node marks both the SID and its | |||
compression. | locator as using 32-bit compression. | |||
6.5. Upper-Layer Checksums | 6.5. Upper-Layer Checksums | |||
The Destination Address used in the IPv6 pseudo-header (Section 8.1 | The Destination Address used in the IPv6 pseudo-header (Section 8.1 | |||
of [RFC8200]) is that of the ultimate destination. | of [RFC8200]) is that of the ultimate destination. | |||
At the SR source node, that address will be the Destination Address | At the SR source node, that address will be the Destination Address | |||
as it is expected to be received by the ultimate destination. When | as it is expected to be received by the ultimate destination. When | |||
the last element in the compressed SID list is a CSID container, this | the last element in the compressed SID list is a CSID container, this | |||
address can be obtained from the last element in the uncompressed SID | address can be obtained from the last element in the uncompressed SID | |||
skipping to change at line 1444 ¶ | skipping to change at line 1441 ¶ | |||
Block B2/m, where B2 is an IPv6 address prefix and m is the | Block B2/m, where B2 is an IPv6 address prefix and m is the | |||
associated prefix length. The original and target Locator-Blocks can | associated prefix length. The original and target Locator-Blocks can | |||
have different prefix lengths as long as the new Destination Address | have different prefix lengths as long as the new Destination Address | |||
formed by combining the target Locator-Block with the Locator-Node, | formed by combining the target Locator-Block with the Locator-Node, | |||
Function, and Argument as described in the pseudocode of Sections | Function, and Argument as described in the pseudocode of Sections | |||
7.1.1 and 7.1.2 is a valid IPv6 address. The target Locator-Block is | 7.1.1 and 7.1.2 is a valid IPv6 address. The target Locator-Block is | |||
a local property of the End.LBS SID on the SR segment endpoint node. | a local property of the End.LBS SID on the SR segment endpoint node. | |||
| Note: a local SID property is an attribute associated with the | | Note: a local SID property is an attribute associated with the | |||
| SID when it is instantiated on the SR segment endpoint node. | | SID when it is instantiated on the SR segment endpoint node. | |||
| When the SR segment endpoint node identifies the destination | | When the SR segment endpoint node identifies the Destination | |||
| address of a received packet as a locally instantiated SID, it | | Address of a received packet as a locally instantiated SID, it | |||
| also retrieves any local property associated with this SID. | | also retrieves any local property associated with this SID. | |||
| Other examples of local SID properties include the set of L3 | | Other examples of local SID properties include the set of L3 | |||
| adjacencies of an End.X SID (Section 4.1 of [RFC8986]) and the | | adjacencies of an End.X SID (Section 4.2 of [RFC8986]) and the | |||
| lookup table of an End.DT6 SID (Section 4.6 of [RFC8986]). | | lookup table of an End.DT6 SID (Section 4.6 of [RFC8986]). | |||
The means by which an SR source node learns the target Locator-Block | The means by which an SR source node learns the target Locator-Block | |||
associated with an End.LBS SID are outside the scope of this | associated with an End.LBS SID are outside the scope of this | |||
document. As examples, it could be learned via configuration or | document. As examples, it could be learned via configuration or | |||
signaled by a controller. | signaled by a controller. | |||
7.1.1. End.LBS with NEXT-CSID | 7.1.1. End.LBS with NEXT-CSID | |||
When processing an IPv6 packet that matches a FIB entry locally | When processing an IPv6 packet that matches a FIB entry locally | |||
skipping to change at line 1552 ¶ | skipping to change at line 1549 ¶ | |||
behaviors that are extended in the present document. | behaviors that are extended in the present document. | |||
The CSID-flavored behaviors introduced by this document are | The CSID-flavored behaviors introduced by this document are | |||
advertised in the same manner as their base SRv6 endpoint behaviors | advertised in the same manner as their base SRv6 endpoint behaviors | |||
using the SRv6 extensions for various routing protocols, such as: | using the SRv6 extensions for various routing protocols, such as: | |||
* IS-IS [RFC9352] | * IS-IS [RFC9352] | |||
* OSPFv3 [RFC9513] | * OSPFv3 [RFC9513] | |||
* BGP [RFC9252], [RFC9514], [SR-BGP] | * BGP [RFC9252], [RFC9514], [BGP-SR-Policy] | |||
* BGP-LS [BGP-LS-SR] | * BGP-LS [BGP-LS-SR-Policy] | |||
* PCEP [RFC9603] | * PCEP [RFC9603] | |||
The SR segment endpoint node MUST set the SID Argument bits to 0 when | The SR segment endpoint node MUST set the SID Argument bits to 0 when | |||
advertising a locally instantiated SID of this document in the | advertising a locally instantiated SID of this document in the | |||
routing protocol (e.g., IS-IS [RFC9352], OSPF [RFC9513], or BGP-LS | routing protocol (e.g., IS-IS [RFC9352], OSPF [RFC9513], or BGP-LS | |||
[RFC9514]). | [RFC9514]). | |||
Signaling the SRv6 SID Structure is REQUIRED for all the SIDs | Signaling the SRv6 SID Structure is REQUIRED for all the SIDs | |||
introduced in this document. It is used by an SR source node to | introduced in this document. It is used by an SR source node to | |||
compress a SID list as described in Section 6. The node initiating | compress a SID list as described in Section 6. The node initiating | |||
the SID advertisement MUST set the length values in the SRv6 SID | the SID advertisement MUST set the length values in the SRv6 SID | |||
Structure to match the format of the SID on the SR segment endpoint | Structure to match the format of the SID on the SR segment endpoint | |||
node. For example, for a SID of this document instantiated from a | node. For example, for a SID of this document instantiated from a | |||
/48 SRv6 SID block and a /64 Locator, and having a 16-bit Function, | /48 SRv6 SID block and a /64 Locator, and having a 16-bit Function, | |||
the SRv6 SID Structure advertisement carries the following values. | the SRv6 SID Structure advertisement carries the following values. | |||
* Locator-Block length: 48 | * LBL: 48 | |||
* Locator-Node length: 16 | * LNL: 16 | |||
* Function length: 16 | * FL: 16 | |||
* Argument length: 48 (= 128-48-16-16) | * AL: 48 (= 128-48-16-16) | |||
A local CSID may be advertised in the control plane individually and/ | A local CSID may be advertised in the control plane individually and/ | |||
or in combination with a global CSID instantiated on the same SR | or in combination with a global CSID instantiated on the same SR | |||
segment endpoint node, with the End behavior, and the same Locator- | segment endpoint node, with the End behavior, and the same Locator- | |||
Block and flavor as the local CSID. A combined global and local CSID | Block and flavor as the local CSID. A combined global and local CSID | |||
is advertised as follows: | is advertised as follows: | |||
* The SID Locator-Block is that shared by the global and local CSIDs | * The SID Locator-Block is that shared by the global and local CSIDs | |||
* The SID Locator-Node is that of global CSID | * The SID Locator-Node is that of global CSID | |||
* The SID Function is that of the local CSID | * The SID Function is that of the local CSID | |||
* The SID Argument length is equal to 128-LBL-LNL-FL and the SID | * The SID AL is equal to 128-LBL-LNL-FL and the SID Argument value | |||
Argument value is 0 | is 0 | |||
* All other attributes of the SID (e.g., SRv6 endpoint behavior or | * All other attributes of the SID (e.g., SRv6 endpoint behavior or | |||
algorithm) are those of the local CSID | algorithm) are those of the local CSID | |||
The local CSID-combined advertisement is needed in particular for | The combined advertisement of local CSIDs with a global CSID is | |||
control plane protocols mandating that the SID is a subnet of a | needed in particular for control plane protocols mandating that the | |||
locator advertised in the same protocol (e.g., Section 8 of [RFC9352] | SID is a subnet of a locator advertised in the same protocol (e.g., | |||
and Section 9 of [RFC9513] for advertising Adjacency SIDs in IS-IS | Section 8 of [RFC9352] and Section 9 of [RFC9513] for advertising | |||
and OSPFv3, respectively). | Adjacency SIDs in IS-IS and OSPFv3, respectively). | |||
For a segment list computed by a controller and signaled to an SR | For a segment list computed by a controller and signaled to an SR | |||
source node (e.g., via BGP [SR-BGP] or PCEP [RFC9603]), the | source node (e.g., via BGP [BGP-SR-Policy] or PCEP [RFC9603]), the | |||
controller provides the ordered segment list comprising the | controller provides the ordered segment list comprising the | |||
uncompressed SIDs, with their respective behavior and structure, to | uncompressed SIDs, with their respective behavior and structure, to | |||
the SR source node. The SR source node may then compress the SID | the SR source node. The SR source node may then compress the SID | |||
list as described in Section 6. | list as described in Section 6. | |||
When a node that does not support this specification receives an | When a node receives an advertisement of a SID of this document that | |||
advertisement of a SID of this document, it handles it as described | it does not support, it handles the advertisement as described in the | |||
in the corresponding control plane specification (e.g., Sections 7.2, | corresponding control plane specification (e.g., Sections 7.2, 8.1, | |||
8.1, and 8.2 of [RFC9352], Sections 8, 9.1, and 9.2 of [RFC9513], and | and 8.2 of [RFC9352], Sections 8, 9.1, and 9.2 of [RFC9513], and | |||
Section 3.1 of [RFC9252]). | Section 3.1 of [RFC9252]). | |||
9. Operational Considerations | 9. Operational Considerations | |||
9.1. Flavor, Block, and CSID Length | 9.1. Flavor, Block, and CSID Length | |||
SRv6 is intended for use in a variety of networks that require | SRv6 is intended for use in a variety of networks that require | |||
different prefix lengths and SID numbering spaces. Each of the two | different prefix lengths and SID numbering spaces. Each of the two | |||
flavors introduced in this document comes with its own | flavors introduced in this document comes with its own | |||
recommendations for Locator-Block and CSID length, as specified in | recommendations for Locator-Block and CSID length, as specified in | |||
skipping to change at line 1643 ¶ | skipping to change at line 1640 ¶ | |||
deployment design, and network scale. | deployment design, and network scale. | |||
Both CSID flavors can coexist in the same SR domain, on the same SR | Both CSID flavors can coexist in the same SR domain, on the same SR | |||
segment endpoint node, and even in the same segment list. However, | segment endpoint node, and even in the same segment list. However, | |||
operators should generally avoid instantiating SIDs of different CSID | operators should generally avoid instantiating SIDs of different CSID | |||
flavors within the same routing domain or Locator-Block since these | flavors within the same routing domain or Locator-Block since these | |||
SIDs have different length and allocation recommendations (see | SIDs have different length and allocation recommendations (see | |||
Sections 4.1, 4.2, and 9.2). In a multi-domain deployment, different | Sections 4.1, 4.2, and 9.2). In a multi-domain deployment, different | |||
flavors may be used in different routing domains of the SR domain. | flavors may be used in different routing domains of the SR domain. | |||
A deployment should use consistent Locator-Block lengths and CSID | A deployment should use consistent LBLs and CSID lengths for all SIDs | |||
lengths for all SIDs within a routing domain. Heterogeneous lengths, | within a routing domain. Heterogeneous lengths, while possible, may | |||
while possible, may impact the compression efficiency. | impact the compression efficiency. | |||
The compressed segment list encoding works with various Locator-Block | The compressed segment list encoding works with various Locator-Block | |||
allocations. For example, each routing domain within the SR domain | allocations. For example, each routing domain within the SR domain | |||
can be allocated a /48 Locator-Block from a global IPv6 block | can be allocated a /48 Locator-Block from a global IPv6 block | |||
available to the operator or from a prefix allocated to SRv6 SIDs as | available to the operator or from a prefix allocated to SRv6 SIDs as | |||
discussed in Section 5 of [RFC9602]. | discussed in Section 5 of [RFC9602]. | |||
9.2. GIB/LIB Usage | 9.2. GIB/LIB Usage | |||
GIB and LIB usage is a local implementation and/or configuration | GIB and LIB usage is a local implementation and/or configuration | |||
skipping to change at line 1711 ¶ | skipping to change at line 1708 ¶ | |||
with a longer one that comprises two or more SIDs. In that case, the | with a longer one that comprises two or more SIDs. In that case, the | |||
target SID is the last element in the SID list. This operation is | target SID is the last element in the SID list. This operation is | |||
illustrated in Appendix A.1.2 of [RFC9259]. | illustrated in Appendix A.1.2 of [RFC9259]. | |||
When pinging a SID of this document, the SR source node MUST | When pinging a SID of this document, the SR source node MUST | |||
construct the IPv6 packet as described in Section 6, including | construct the IPv6 packet as described in Section 6, including | |||
computing the ICMPv6 checksum as described in Section 6.5. | computing the ICMPv6 checksum as described in Section 6.5. | |||
In particular, when pinging a SID of this document with a SID list | In particular, when pinging a SID of this document with a SID list | |||
comprising only the target SID, the SR source node places the SID | comprising only the target SID, the SR source node places the SID | |||
with Argument value 0 in the destination address of the ICMPv6 echo | with Argument value 0 in the Destination Address of the ICMPv6 echo | |||
request and computes the ICMPv6 checksum using this SID as the | request and computes the ICMPv6 checksum using this SID as the | |||
destination address in the IPv6 pseudo-header. The Argument value 0 | Destination Address in the IPv6 pseudo-header. The Argument value 0 | |||
allows the SID SR segment endpoint node (Section 4) to identify | allows the SID SR segment endpoint node (Section 4) to identify | |||
itself as the ultimate destination of the packet and process the | itself as the ultimate destination of the packet and process the | |||
ICMPv6 payload. Therefore, any existing IPv6 ping implementation can | ICMPv6 payload. Therefore, any existing IPv6 ping implementation can | |||
originate ICMP echo requests to a NEXT-CSID or REPLACE-CSID flavor | originate ICMP echo requests to a NEXT-CSID or REPLACE-CSID flavor | |||
SID with a SID list comprising only the target SID, provided that the | SID with a SID list comprising only the target SID, provided that the | |||
user ensures that the SID Argument is 0. | user ensures that the SID Argument is 0. | |||
9.4. ICMP Error Processing | 9.4. ICMP Error Processing | |||
When an IPv6 node encounters an error while processing a packet, it | When an IPv6 node encounters an error while processing a packet, it | |||
may report that error by sending an IPv6 error message to the packet | may report that error by sending an IPv6 error message to the packet | |||
source with an enclosed copy of the invoking packet. For the source | source with an enclosed copy of the invoking packet. For the source | |||
of an invoking packet to process the ICMP error message, the ultimate | of an invoking packet to process the ICMP error message, the ultimate | |||
destination address of the IPv6 header may be required. | Destination Address of the IPv6 header may be required. | |||
Section 5.4 of [RFC8754] defines the logic that an SR source node | Section 5.4 of [RFC8754] defines the logic that an SR source node | |||
follows to determine the ultimate destination of an invoking packet | follows to determine the ultimate destination of an invoking packet | |||
containing an SRH. | containing an SRH. | |||
For an SR source node that supports the compressed segment list | For an SR source node that supports the compressed segment list | |||
encoding defined in this document, the logic to determine the | encoding defined in this document, the logic to determine the | |||
ultimate destination is generalized as follows. | ultimate destination is generalized as follows. | |||
* If the destination address of the invoking IPv6 packet matches a | * If the Destination Address of the invoking IPv6 packet matches a | |||
known SRv6 SID, modify the invoking IPv6 packet by applying the | known SRv6 SID, modify the invoking IPv6 packet by applying the | |||
SRv6 endpoint behavior associated with the matched SRv6 SID; | SRv6 endpoint behavior associated with the matched SRv6 SID; | |||
* Repeat until the application of the SRv6 endpoint behavior would | * Repeat until the application of the SRv6 endpoint behavior would | |||
result in the processing of the upper-layer header. | result in the processing of the upper-layer header. | |||
The destination address of the resulting IPv6 packet may be used as | The Destination Address of the resulting IPv6 packet may be used as | |||
the ultimate destination of the invoking IPv6 packet. | the ultimate destination of the invoking IPv6 packet. | |||
Since the SR source node that needs to determine the ultimate | Since the SR source node that needs to determine the ultimate | |||
destination is the same node that originally built the SID list in | destination is the same node that originally built the SID list in | |||
the invoking packet, it can perform this operation for all the SIDs | the invoking packet, it can perform this operation for all the SIDs | |||
in the packet. | in the packet. | |||
10. Applicability to Other SRv6 Endpoint Behaviors | 10. Applicability to Other SRv6 Endpoint Behaviors | |||
Future documents may extend the applicability of the NEXT-CSID and | Future documents may extend the applicability of the NEXT-CSID and | |||
skipping to change at line 1999 ¶ | skipping to change at line 1996 ¶ | |||
<https://www.rfc-editor.org/info/rfc8754>. | <https://www.rfc-editor.org/info/rfc8754>. | |||
[RFC8986] Filsfils, C., Ed., Camarillo, P., Ed., Leddy, J., Voyer, | [RFC8986] Filsfils, C., Ed., Camarillo, P., Ed., Leddy, J., Voyer, | |||
D., Matsushima, S., and Z. Li, "Segment Routing over IPv6 | D., Matsushima, S., and Z. Li, "Segment Routing over IPv6 | |||
(SRv6) Network Programming", RFC 8986, | (SRv6) Network Programming", RFC 8986, | |||
DOI 10.17487/RFC8986, February 2021, | DOI 10.17487/RFC8986, February 2021, | |||
<https://www.rfc-editor.org/info/rfc8986>. | <https://www.rfc-editor.org/info/rfc8986>. | |||
13.2. Informative References | 13.2. Informative References | |||
[BGP-LS-SR] | [BGP-LS-SR-Policy] | |||
Previdi, S., Talaulikar, K., Ed., Dong, J., Gredler, H., | Previdi, S., Talaulikar, K., Ed., Dong, J., Gredler, H., | |||
and J. Tantsura, "Advertisement of Segment Routing | and J. Tantsura, "Advertisement of Segment Routing | |||
Policies using BGP Link-State", Work in Progress, | Policies using BGP Link-State", Work in Progress, | |||
Internet-Draft, draft-ietf-idr-bgp-ls-sr-policy-17, 6 | Internet-Draft, draft-ietf-idr-bgp-ls-sr-policy-17, 6 | |||
March 2025, <https://datatracker.ietf.org/doc/html/draft- | March 2025, <https://datatracker.ietf.org/doc/html/draft- | |||
ietf-idr-bgp-ls-sr-policy-17>. | ietf-idr-bgp-ls-sr-policy-17>. | |||
[BGP-SR-Policy] | ||||
Previdi, S., Filsfils, C., Talaulikar, K., Ed., Mattes, | ||||
P., and D. Jain, "Advertising Segment Routing Policies in | ||||
BGP", Work in Progress, Internet-Draft, draft-ietf-idr-sr- | ||||
policy-safi-13, 6 February 2025, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr- | ||||
policy-safi-13>. | ||||
[GKP94] Graham, R., Knuth, D., and O. Patashnik, "Concrete | [GKP94] Graham, R., Knuth, D., and O. Patashnik, "Concrete | |||
Mathematics: A Foundation for Computer Science", | Mathematics: A Foundation for Computer Science", | |||
ISBN 9780201558029, 1994. | ISBN 9780201558029, 1994. | |||
[RFC4786] Abley, J. and K. Lindqvist, "Operation of Anycast | [RFC4786] Abley, J. and K. Lindqvist, "Operation of Anycast | |||
Services", BCP 126, RFC 4786, DOI 10.17487/RFC4786, | Services", BCP 126, RFC 4786, DOI 10.17487/RFC4786, | |||
December 2006, <https://www.rfc-editor.org/info/rfc4786>. | December 2006, <https://www.rfc-editor.org/info/rfc4786>. | |||
[RFC9252] Dawra, G., Ed., Talaulikar, K., Ed., Raszuk, R., Decraene, | [RFC9252] Dawra, G., Ed., Talaulikar, K., Ed., Raszuk, R., Decraene, | |||
B., Zhuang, S., and J. Rabadan, "BGP Overlay Services | B., Zhuang, S., and J. Rabadan, "BGP Overlay Services | |||
skipping to change at line 2059 ¶ | skipping to change at line 2064 ¶ | |||
Identifiers in the IPv6 Addressing Architecture", | Identifiers in the IPv6 Addressing Architecture", | |||
RFC 9602, DOI 10.17487/RFC9602, October 2024, | RFC 9602, DOI 10.17487/RFC9602, October 2024, | |||
<https://www.rfc-editor.org/info/rfc9602>. | <https://www.rfc-editor.org/info/rfc9602>. | |||
[RFC9603] Li, C., Ed., Kaladharan, P., Sivabalan, S., Koldychev, M., | [RFC9603] Li, C., Ed., Kaladharan, P., Sivabalan, S., Koldychev, M., | |||
and Y. Zhu, "Path Computation Element Communication | and Y. Zhu, "Path Computation Element Communication | |||
Protocol (PCEP) Extensions for IPv6 Segment Routing", | Protocol (PCEP) Extensions for IPv6 Segment Routing", | |||
RFC 9603, DOI 10.17487/RFC9603, July 2024, | RFC 9603, DOI 10.17487/RFC9603, July 2024, | |||
<https://www.rfc-editor.org/info/rfc9603>. | <https://www.rfc-editor.org/info/rfc9603>. | |||
[SR-BGP] Previdi, S., Filsfils, C., Talaulikar, K., Ed., Mattes, | ||||
P., and D. Jain, "Advertising Segment Routing Policies in | ||||
BGP", Work in Progress, Internet-Draft, draft-ietf-idr-sr- | ||||
policy-safi-13, 6 February 2025, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr- | ||||
policy-safi-13>. | ||||
Appendix A. Complete Pseudocodes | Appendix A. Complete Pseudocodes | |||
The content of this section is purely informative rendering of the | The content of this section is purely informative rendering of the | |||
pseudocodes of [RFC8986] with the modifications in this document. | pseudocodes of [RFC8986] with the modifications in this document. | |||
This rendering may not be used as a reference. | This rendering may not be used as a reference. | |||
A.1. End with NEXT-CSID | A.1. End with NEXT-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End SID with the NEXT-CSID flavor: | instantiated as an End SID with the NEXT-CSID flavor: | |||
skipping to change at line 2114 ¶ | skipping to change at line 2112 ¶ | |||
with Code 0 (Erroneous header field encountered) | with Code 0 (Erroneous header field encountered) | |||
and Pointer set to the Segments Left field, | and Pointer set to the Segments Left field, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S11. } | S11. } | |||
S12. Decrement IPv6 Hop Limit by 1. | S12. Decrement IPv6 Hop Limit by 1. | |||
S13. Decrement Segments Left by 1. | S13. Decrement Segments Left by 1. | |||
S14. Update IPv6 DA with Segment List[Segments Left]. | S14. Update IPv6 DA with Segment List[Segments Left]. | |||
S15. Submit the packet to the egress IPv6 FIB lookup for | S15. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
Before processing the Upper-Layer header or any IPv6 extension header | Before processing the upper-layer header or any IPv6 extension header | |||
other than Hop-by-Hop or Destination Options of a packet matching a | other than Hop-by-Hop or Destination Options of a packet matching a | |||
FIB entry locally instantiated as an End SID with the NEXT-CSID | FIB entry locally instantiated as an End SID with the NEXT-CSID | |||
flavor: | flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | |||
Destination Address. | Destination Address. | |||
N06. Set the bits [(LBL+AL)..127] of the Destination Address to | N06. Set the bits [(LBL+AL)..127] of the Destination Address to | |||
zero. | zero. | |||
N07. Decrement IPv6 Hop Limit by 1. | N07. Decrement IPv6 Hop Limit by 1. | |||
N08. Submit the packet to the egress IPv6 FIB lookup for | N08. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the next destination. | transmission to the next destination. | |||
N09. } | N09. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End SID with the NEXT-CSID flavor: | entry locally instantiated as an End SID with the NEXT-CSID flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.2. End.X with NEXT-CSID | A.2. End.X with NEXT-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.X SID with the NEXT-CSID flavor: | instantiated as an End.X SID with the NEXT-CSID flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
skipping to change at line 2188 ¶ | skipping to change at line 2186 ¶ | |||
with Code 0 (Erroneous header field encountered) | with Code 0 (Erroneous header field encountered) | |||
and Pointer set to the Segments Left field, | and Pointer set to the Segments Left field, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S11. } | S11. } | |||
S12. Decrement IPv6 Hop Limit by 1. | S12. Decrement IPv6 Hop Limit by 1. | |||
S13. Decrement Segments Left by 1. | S13. Decrement Segments Left by 1. | |||
S14. Update IPv6 DA with Segment List[Segments Left]. | S14. Update IPv6 DA with Segment List[Segments Left]. | |||
S15. Submit the packet to the IPv6 module for transmission | S15. Submit the packet to the IPv6 module for transmission | |||
to the new destination via a member of J. | to the new destination via a member of J. | |||
Before processing the Upper-Layer header or any IPv6 extension header | Before processing the upper-layer header or any IPv6 extension header | |||
other than Hop-by-Hop or Destination Options of a packet matching a | other than Hop-by-Hop or Destination Options of a packet matching a | |||
FIB entry locally instantiated as an End.X SID with the NEXT-CSID | FIB entry locally instantiated as an End.X SID with the NEXT-CSID | |||
flavor: | flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | |||
Destination Address. | Destination Address. | |||
N06. Set the bits [(LBL+AL)..127] of the Destination Address to | N06. Set the bits [(LBL+AL)..127] of the Destination Address to | |||
zero. | zero. | |||
N07. Decrement IPv6 Hop Limit by 1. | N07. Decrement IPv6 Hop Limit by 1. | |||
N08. Submit the packet to the IPv6 module for transmission to the | N08. Submit the packet to the IPv6 module for transmission to the | |||
new destination via a member of J. | new destination via a member of J. | |||
N09. } | N09. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.X SID with the NEXT-CSID flavor: | entry locally instantiated as an End.X SID with the NEXT-CSID flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.3. End.T with NEXT-CSID | A.3. End.T with NEXT-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.T SID with the NEXT-CSID flavor: | instantiated as an End.T SID with the NEXT-CSID flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
skipping to change at line 2264 ¶ | skipping to change at line 2262 ¶ | |||
and Pointer set to the Segments Left field, | and Pointer set to the Segments Left field, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S11. } | S11. } | |||
S12. Decrement IPv6 Hop Limit by 1. | S12. Decrement IPv6 Hop Limit by 1. | |||
S13. Decrement Segments Left by 1. | S13. Decrement Segments Left by 1. | |||
S14. Update IPv6 DA with Segment List[Segments Left]. | S14. Update IPv6 DA with Segment List[Segments Left]. | |||
S15.1. Set the packet's associated FIB table to T. | S15.1. Set the packet's associated FIB table to T. | |||
S15.2. Submit the packet to the egress IPv6 FIB lookup for | S15.2. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
Before processing the Upper-Layer header or any IPv6 extension header | Before processing the upper-layer header or any IPv6 extension header | |||
other than Hop-by-Hop or Destination Options of a packet matching a | other than Hop-by-Hop or Destination Options of a packet matching a | |||
FIB entry locally instantiated as an End.T SID with the NEXT-CSID | FIB entry locally instantiated as an End.T SID with the NEXT-CSID | |||
flavor: | flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | |||
Destination Address. | Destination Address. | |||
N06. Set the bits [(LBL+AL)..127] of the Destination Address to | N06. Set the bits [(LBL+AL)..127] of the Destination Address to | |||
zero. | zero. | |||
N07. Decrement IPv6 Hop Limit by 1. | N07. Decrement IPv6 Hop Limit by 1. | |||
N08.1. Set the packet's associated FIB table to T. | N08.1. Set the packet's associated FIB table to T. | |||
N08.2. Submit the packet to the egress IPv6 FIB lookup for | N08.2. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
N09. } | N09. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.T SID with the NEXT-CSID flavor: | entry locally instantiated as an End.T SID with the NEXT-CSID flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.4. End.B6.Encaps with NEXT-CSID | A.4. End.B6.Encaps with NEXT-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.B6.Encaps SID with the NEXT-CSID flavor: | instantiated as an End.B6.Encaps SID with the NEXT-CSID flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
skipping to change at line 2349 ¶ | skipping to change at line 2347 ¶ | |||
S13. Decrement Segments Left by 1. | S13. Decrement Segments Left by 1. | |||
S14. Update IPv6 DA with Segment List[Segments Left]. | S14. Update IPv6 DA with Segment List[Segments Left]. | |||
S15. Push a new IPv6 header with its own SRH containing B. | S15. Push a new IPv6 header with its own SRH containing B. | |||
S16. Set the outer IPv6 SA to A. | S16. Set the outer IPv6 SA to A. | |||
S17. Set the outer IPv6 DA to the first SID of B. | S17. Set the outer IPv6 DA to the first SID of B. | |||
S18. Set the outer Payload Length, Traffic Class, Flow Label, | S18. Set the outer Payload Length, Traffic Class, Flow Label, | |||
Hop Limit, and Next Header fields. | Hop Limit, and Next Header fields. | |||
S19. Submit the packet to the egress IPv6 FIB lookup for | S19. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
Before processing the Upper-Layer header or any IPv6 extension header | Before processing the upper-layer header or any IPv6 extension header | |||
other than Hop-by-Hop or Destination Options of a packet matching a | other than Hop-by-Hop or Destination Options of a packet matching a | |||
FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT- | FIB entry locally instantiated as an End.B6.Encaps SID with the NEXT- | |||
CSID flavor: | CSID flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
skipping to change at line 2374 ¶ | skipping to change at line 2372 ¶ | |||
N07. Decrement IPv6 Hop Limit by 1. | N07. Decrement IPv6 Hop Limit by 1. | |||
N08.1. Push a new IPv6 header with its own SRH containing B. | N08.1. Push a new IPv6 header with its own SRH containing B. | |||
N08.2. Set the outer IPv6 SA to A. | N08.2. Set the outer IPv6 SA to A. | |||
N08.3. Set the outer IPv6 DA to the first SID of B. | N08.3. Set the outer IPv6 DA to the first SID of B. | |||
N08.4. Set the outer Payload Length, Traffic Class, Flow Label, | N08.4. Set the outer Payload Length, Traffic Class, Flow Label, | |||
Hop Limit, and Next Header fields. | Hop Limit, and Next Header fields. | |||
N08.5. Submit the packet to the egress IPv6 FIB lookup for | N08.5. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the next destination. | transmission to the next destination. | |||
N09. } | N09. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.B6.Encaps SID with the NEXT-CSID | entry locally instantiated as an End.B6.Encaps SID with the NEXT-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.5. End.BM with NEXT-CSID | A.5. End.BM with NEXT-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.BM SID with the NEXT-CSID flavor: | instantiated as an End.BM SID with the NEXT-CSID flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
skipping to change at line 2429 ¶ | skipping to change at line 2427 ¶ | |||
with Code 0 (Erroneous header field encountered) | with Code 0 (Erroneous header field encountered) | |||
and Pointer set to the Segments Left field, | and Pointer set to the Segments Left field, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S11. } | S11. } | |||
S12. Decrement IPv6 Hop Limit by 1. | S12. Decrement IPv6 Hop Limit by 1. | |||
S13. Decrement Segments Left by 1. | S13. Decrement Segments Left by 1. | |||
S14. Update IPv6 DA with Segment List[Segments Left]. | S14. Update IPv6 DA with Segment List[Segments Left]. | |||
S15. Push the MPLS label stack for B. | S15. Push the MPLS label stack for B. | |||
S16. Submit the packet to the MPLS engine for transmission. | S16. Submit the packet to the MPLS engine for transmission. | |||
Before processing the Upper-Layer header or any IPv6 extension header | Before processing the upper-layer header or any IPv6 extension header | |||
other than Hop-by-Hop or Destination Options of a packet matching a | other than Hop-by-Hop or Destination Options of a packet matching a | |||
FIB entry locally instantiated as an End.BM SID with the NEXT-CSID | FIB entry locally instantiated as an End.BM SID with the NEXT-CSID | |||
flavor: | flavor: | |||
N01. If (DA.Argument != 0) { | N01. If (DA.Argument != 0) { | |||
N02. If (IPv6 Hop Limit <= 1) { | N02. If (IPv6 Hop Limit <= 1) { | |||
N03. Send an ICMP Time Exceeded message to the Source Address, | N03. Send an ICMP Time Exceeded message to the Source Address, | |||
Code 0 (Hop limit exceeded in transit), | Code 0 (Hop limit exceeded in transit), | |||
interrupt packet processing and discard the packet. | interrupt packet processing and discard the packet. | |||
N04. } | N04. } | |||
N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | N05. Copy DA.Argument into the bits [LBL..(LBL+AL-1)] of the | |||
Destination Address. | Destination Address. | |||
N06. Set the bits [(LBL+AL)..127] of the Destination Address to | N06. Set the bits [(LBL+AL)..127] of the Destination Address to | |||
zero. | zero. | |||
N07. Decrement IPv6 Hop Limit by 1. | N07. Decrement IPv6 Hop Limit by 1. | |||
N08.1. Push the MPLS label stack for B. | N08.1. Push the MPLS label stack for B. | |||
N08.2. Submit the packet to the MPLS engine for transmission. | N08.2. Submit the packet to the MPLS engine for transmission. | |||
N09. } | N09. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.BM SID with the NEXT-CSID | entry locally instantiated as an End.BM SID with the NEXT-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.6. End with REPLACE-CSID | A.6. End with REPLACE-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End SID with the REPLACE-CSID flavor: | instantiated as an End SID with the REPLACE-CSID flavor: | |||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
skipping to change at line 2513 ¶ | skipping to change at line 2511 ¶ | |||
R17. Set DA.Arg.Index to (128/LNFL - 1). | R17. Set DA.Arg.Index to (128/LNFL - 1). | |||
R18. } | R18. } | |||
R19. Decrement IPv6 Hop Limit by 1. | R19. Decrement IPv6 Hop Limit by 1. | |||
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | |||
[LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | [LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | |||
header. | header. | |||
R21. Submit the packet to the egress IPv6 FIB lookup for | R21. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
S16. } | S16. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End SID with the REPLACE-CSID | entry locally instantiated as an End SID with the REPLACE-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.7. End.X with REPLACE-CSID | A.7. End.X with REPLACE-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.X SID with the REPLACE-CSID flavor: | instantiated as an End.X SID with the REPLACE-CSID flavor: | |||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
skipping to change at line 2577 ¶ | skipping to change at line 2575 ¶ | |||
R17. Set DA.Arg.Index to (128/LNFL - 1). | R17. Set DA.Arg.Index to (128/LNFL - 1). | |||
R18. } | R18. } | |||
R19. Decrement IPv6 Hop Limit by 1. | R19. Decrement IPv6 Hop Limit by 1. | |||
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | |||
[LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | [LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | |||
header. | header. | |||
R21. Submit the packet to the IPv6 module for transmission to the | R21. Submit the packet to the IPv6 module for transmission to the | |||
new destination via a member of J. | new destination via a member of J. | |||
S16. } | S16. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.X SID with the REPLACE-CSID | entry locally instantiated as an End.X SID with the REPLACE-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.8. End.T with REPLACE-CSID | A.8. End.T with REPLACE-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.T SID with the REPLACE-CSID flavor: | instantiated as an End.T SID with the REPLACE-CSID flavor: | |||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
skipping to change at line 2643 ¶ | skipping to change at line 2641 ¶ | |||
R18. } | R18. } | |||
R19. Decrement IPv6 Hop Limit by 1. | R19. Decrement IPv6 Hop Limit by 1. | |||
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | |||
[LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | [LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | |||
header. | header. | |||
R21.1. Set the packet's associated FIB table to T. | R21.1. Set the packet's associated FIB table to T. | |||
R21.2. Submit the packet to the egress IPv6 FIB lookup for | R21.2. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the new destination. | transmission to the new destination. | |||
S16. } | S16. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.T SID with the REPLACE-CSID | entry locally instantiated as an End.T SID with the REPLACE-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.9. End.B6.Encaps with REPLACE-CSID | A.9. End.B6.Encaps with REPLACE-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.B6.Encaps SID with the REPLACE-CSID flavor: | instantiated as an End.B6.Encaps SID with the REPLACE-CSID flavor: | |||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
skipping to change at line 2717 ¶ | skipping to change at line 2715 ¶ | |||
header. | header. | |||
R21.1. Push a new IPv6 header with its own SRH containing B. | R21.1. Push a new IPv6 header with its own SRH containing B. | |||
R21.2. Set the outer IPv6 SA to A. | R21.2. Set the outer IPv6 SA to A. | |||
R21.3. Set the outer IPv6 DA to the first SID of B. | R21.3. Set the outer IPv6 DA to the first SID of B. | |||
R21.4. Set the outer Payload Length, Traffic Class, Flow Label, | R21.4. Set the outer Payload Length, Traffic Class, Flow Label, | |||
Hop Limit, and Next Header fields. | Hop Limit, and Next Header fields. | |||
R21.5. Submit the packet to the egress IPv6 FIB lookup for | R21.5. Submit the packet to the egress IPv6 FIB lookup for | |||
transmission to the next destination. | transmission to the next destination. | |||
S16. } | S16. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.B6.Encaps SID with the REPLACE- | entry locally instantiated as an End.B6.Encaps SID with the REPLACE- | |||
CSID flavor: | CSID flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
A.10. End.BM with REPLACE-CSID | A.10. End.BM with REPLACE-CSID | |||
When processing the SRH of a packet matching a FIB entry locally | When processing the SRH of a packet matching a FIB entry locally | |||
instantiated as an End.BM SID with the REPLACE-CSID flavor: | instantiated as an End.BM SID with the REPLACE-CSID flavor: | |||
S01. When an SRH is processed { | S01. When an SRH is processed { | |||
S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | S02. If (Segments Left == 0 and (DA.Arg.Index == 0 or | |||
skipping to change at line 2781 ¶ | skipping to change at line 2779 ¶ | |||
R17. Set DA.Arg.Index to (128/LNFL - 1). | R17. Set DA.Arg.Index to (128/LNFL - 1). | |||
R18. } | R18. } | |||
R19. Decrement IPv6 Hop Limit by 1. | R19. Decrement IPv6 Hop Limit by 1. | |||
R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | R20. Write Segment List[Segments Left][DA.Arg.Index] into the bits | |||
[LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | [LBL..LBL+LNFL-1] of the Destination Address of the IPv6 | |||
header. | header. | |||
R21.1. Push the MPLS label stack for B. | R21.1. Push the MPLS label stack for B. | |||
R21.2. Submit the packet to the MPLS engine for transmission. | R21.2. Submit the packet to the MPLS engine for transmission. | |||
S16. } | S16. } | |||
When processing the Upper-Layer header of a packet matching a FIB | When processing the upper-layer header of a packet matching a FIB | |||
entry locally instantiated as an End.BM SID with the REPLACE-CSID | entry locally instantiated as an End.BM SID with the REPLACE-CSID | |||
flavor: | flavor: | |||
S01. If (Upper-Layer header type is allowed by local configuration) { | S01. If (upper-layer header type is allowed by local configuration) { | |||
S02. Proceed to process the Upper-Layer header | S02. Proceed to process the upper-layer header | |||
S03. } Else { | S03. } Else { | |||
S04. Send an ICMP Parameter Problem to the Source Address | S04. Send an ICMP Parameter Problem to the Source Address | |||
with Code 4 (SR Upper-layer Header Error) | with Code 4 (SR Upper-layer Header Error) | |||
and Pointer set to the offset of the Upper-Layer header, | and Pointer set to the offset of the upper-layer header, | |||
interrupt packet processing, and discard the packet. | interrupt packet processing, and discard the packet. | |||
S05. } | S05. } | |||
Acknowledgements | Acknowledgements | |||
The authors would like to thank Kamran Raza, Xing Jiang, YuanChao Su, | The authors would like to thank Kamran Raza, Xing Jiang, YuanChao Su, | |||
Han Li, Yisong Liu, Martin Vigoureux, Joel Halpern, and Tal Mizrahi | Han Li, Yisong Liu, Martin Vigoureux, Joel Halpern, and Tal Mizrahi | |||
for their insightful feedback and suggestions. | for their insightful feedback and suggestions. | |||
The authors would also like to thank Andrew Alston, Linda Dunbar, | The authors would also like to thank Andrew Alston, Linda Dunbar, | |||
End of changes. 92 change blocks. | ||||
166 lines changed or deleted | 164 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |