rfc9716v1.txt | rfc9716.txt | |||
---|---|---|---|---|
skipping to change at line 14 ¶ | skipping to change at line 14 ¶ | |||
Category: Standards Track K. Arora | Category: Standards Track K. Arora | |||
ISSN: 2070-1721 Individual Contributor | ISSN: 2070-1721 Individual Contributor | |||
M. Srivastava | M. Srivastava | |||
Juniper Networks, Inc. | Juniper Networks, Inc. | |||
S. Ninan | S. Ninan | |||
Ciena | Ciena | |||
N. Kumar | N. Kumar | |||
Oracle | Oracle | |||
January 2025 | January 2025 | |||
Path Monitoring System/Head-End Based MPLS Ping and Traceroute in Inter- | Mechanisms for MPLS Ping and Traceroute Procedures in Inter-Domain | |||
Domain Segment Routing Networks | Segment Routing Networks | |||
Abstract | Abstract | |||
The Segment Routing (SR) architecture leverages source routing and | The Segment Routing (SR) architecture leverages source routing and | |||
can be directly applied to the use of an MPLS data plane. A Segment | can be directly applied to the use of an MPLS data plane. A Segment | |||
Routing over MPLS (SR-MPLS) network may consist of multiple IGP | Routing over MPLS (SR-MPLS) network may consist of multiple IGP | |||
domains or multiple Autonomous Systems (ASes) under the control of | domains or multiple Autonomous Systems (ASes) under the control of | |||
the same organization. It is useful to have the Label Switched Path | the same organization. It is useful to have the Label Switched Path | |||
(LSP) ping and traceroute procedures when an SR end-to-end path | (LSP) ping and traceroute procedures when an SR end-to-end path | |||
traverses multiple ASes or IGP domains. This document outlines | traverses multiple ASes or IGP domains. This document outlines | |||
skipping to change at line 138 ¶ | skipping to change at line 138 ¶ | |||
Provider Edge: PE1, PE4, PE5 | Provider Edge: PE1, PE4, PE5 | |||
Provider: P1, P2, P3, P4, P5, P6 | Provider: P1, P2, P3, P4, P5, P6 | |||
Autonomous System Boundary Router: ASBR1, ASBR2, ASBR3, ASBR4, | Autonomous System Boundary Router: ASBR1, ASBR2, ASBR3, ASBR4, | |||
ASBR5, ASBR6, ASBR7, ASBR8 | ASBR5, ASBR6, ASBR7, ASBR8 | |||
For example, Figure 1 describes an inter-AS network scenario | For example, Figure 1 describes an inter-AS network scenario | |||
consisting of ASes AS1, AS2, and AS3. AS1, AS2, and AS3 are SR | consisting of ASes AS1, AS2, and AS3. AS1, AS2, and AS3 are SR | |||
enabled, and the egress links have PeerNode SID/PeerAdj SID/ PeerSet | enabled, and the egress links have the following Segment Identifiers | |||
SID configured and advertised via [RFC9086]. PeerNode SID/PeerAdj | (SIDs) configured and advertised via [RFC9086]: PeerNode SID, PeerAdj | |||
SID/PeerSet SID are referred to as Egress Peer Engineering SIDs (EPE- | SID, and PeerSet SID. The PeerNode SID, PeerAdj SID, and PeerSet SID | |||
SIDs) in this document. The controller or the head-end can build an | are referred to as Egress Peer Engineering SIDs (EPE-SIDs) in this | |||
end-to-end traffic-engineered path consisting of Node-SIDs, | document. The controller or the head-end can build an end-to-end | |||
Adjacency-SIDs, and EPE-SIDs. It is useful for operators to be able | traffic-engineered path consisting of Node-SIDs, Adjacency-SIDs, and | |||
to perform LSP ping and traceroute procedures on these inter-AS SR- | EPE-SIDs. It is useful for operators to be able to perform LSP ping | |||
MPLS paths, to detect and diagnose failed deliveries, and to | and traceroute procedures on these inter-AS SR-MPLS paths, to detect | |||
determine the actual path that traffic takes through the network. | and diagnose failed deliveries, and to determine the actual path that | |||
LSP ping and traceroute procedures use IP connectivity for echo | traffic takes through the network. LSP ping and traceroute | |||
replies to reach the head-end. In inter-AS networks, IP connectivity | procedures use IP connectivity for echo replies to reach the head- | |||
may not be there from each router in the path. For example, in | end. In inter-AS networks, IP connectivity may not be there from | |||
Figure 1, P3 and P4 may not have IP connectivity for PE1. | each router in the path. For example, in Figure 1, P3 and P4 may not | |||
have IP connectivity for PE1. | ||||
It is not always possible to carry out LSP ping and traceroute | It is not always possible to carry out LSP ping and traceroute | |||
functionality on these paths to verify basic connectivity and fault | functionality on these paths to verify basic connectivity and fault | |||
isolation using existing LSP ping and traceroute mechanisms (see | isolation using existing LSP ping and traceroute mechanisms (see | |||
[RFC8287] and [RFC8029]). That is because there might not always be | [RFC8287] and [RFC8029]). That is because there might not always be | |||
IP connectivity from a responding node back to the source address of | IP connectivity from a responding node back to the source address of | |||
the ping packet when the responding node is in a different AS from | the ping packet when the responding node is in a different AS from | |||
the source of the ping. | the source of the ping. | |||
[RFC8403] describes mechanisms to carry out MPLS ping and traceroute | [RFC8403] describes mechanisms to carry out MPLS ping and traceroute | |||
from a Path Monitoring System (PMS). It is possible to build GRE | from a Path Monitoring System (PMS). It is possible to build GRE | |||
tunnels or static routes to each router in the network to get IP | tunnels or static routes to each router in the network to get IP | |||
connectivity for the reverse path. This mechanism is operationally | connectivity for the reverse path. This mechanism is operationally | |||
very heavy and requires the PMS to be capable of building a huge | very heavy and requires the PMS to be capable of building a huge | |||
number of GRE tunnels or installing the necessary static routes, | number of GRE tunnels or installing the necessary static routes, | |||
which may not be feasible. | which may not be feasible. | |||
[RFC7743] describes an Echo-relay based solution that is based on | [RFC7743] describes an Echo-relay-based solution that is predicated | |||
advertising a new Relay Node Address Stack TLV containing a stack of | on advertising a new Relay Node Address Stack TLV containing a stack | |||
Echo-relay IP addresses. These mechanisms can be applied to SR | of Echo-relay IP addresses. These mechanisms can be applied to SR | |||
networks as well. The mechanism from [RFC7743] requires the return | networks as well. The mechanism from [RFC7743] requires the return | |||
ping packet to be processed on the slow path or as a bump-in-the-wire | ping packet to be processed on the slow path or as a bump-in-the-wire | |||
on every relay node. The motivation of the current document is to | on every relay node. The motivation of the current document is to | |||
provide an alternate mechanism for ping and traceroute in inter- | provide an alternate mechanism for ping and traceroute in inter- | |||
domain SR networks. The definition of the term "domain" as | domain SR networks. The definition of the term "domain" as | |||
applicable to this document is defined in Section 1.1. | applicable to this document is defined in Section 1.1. | |||
This document describes a new mechanism that is efficient and simple | This document describes a new mechanism that is efficient and simple | |||
and can be easily deployed in SR-MPLS networks. This mechanism uses | and can be easily deployed in SR-MPLS networks. This mechanism uses | |||
MPLS paths, and no changes are required in the forwarding path. Any | MPLS paths, and no changes are required in the forwarding path. Any | |||
skipping to change at line 225 ¶ | skipping to change at line 226 ¶ | |||
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. | |||
2. Inter-Domain Networks with Multiple IGPs | 2. Inter-Domain Networks with Multiple IGPs | |||
When the network consists of a large number of nodes, the nodes are | When the network consists of a large number of nodes, the nodes are | |||
segregated into multiple IGP domains as shown in Figure 2. The | segregated into multiple IGP domains as shown in Figure 2. The | |||
connectivity to the remote PEs can be achieved using BGP-Labeled | connectivity to the remote PEs can be achieved by BGP advertisements | |||
Unicast (BGP-LU) [RFC8277] or by stacking the labels for each domain | with an MPLS label bound to the prefix as described in [RFC8277] or | |||
as described in [RFC8604]. | by building paths using a list of segments as described in [RFC8604]. | |||
|-Domain 1|-------Domain 2-----|--Domain 3-| | |-Domain 1|-------Domain 2-----|--Domain 3-| | |||
PE1------ABR1--------P--------ABR2------PE4 | PE1------ABR1--------P--------ABR2------PE4 | |||
\ / \ /\ / | \ / \ /\ / | |||
-------- ----------------- ------- | -------- ----------------- ------- | |||
BGP-LU BGP-LU BGP-LU | BGP-LU BGP-LU BGP-LU | |||
Figure 2: Inter-Domain Networks with Multiple IGPs | Figure 2: Inter-Domain Networks with Multiple IGPs | |||
It is useful to support MPLS ping and traceroute mechanisms for these | It is useful to support MPLS ping and traceroute mechanisms for these | |||
networks. The procedures described in this document for constructing | networks. The procedures described in this document for constructing | |||
the Reply Path TLV and its use in echo replies are equally applicable | the Reply Path TLV and its use in echo replies are equally applicable | |||
to networks consisting of multiple IGP domains that use BGP-LU or | to networks consisting of multiple IGP domains that use BGP-Labeled | |||
label stacking. | Unicast (BGP-LU) or label stacking. | |||
3. Reply Path TLV | 3. Reply Path TLV | |||
The Reply Path (RP) TLV is defined in [RFC7110]. SR networks | The Reply Path (RP) TLV is defined in [RFC7110]. SR networks | |||
statically assign the labels to nodes, and a PMS/head-end may know | statically assign the labels to nodes, and a PMS/head-end may know | |||
the entire Link State Database (LSDB) along with assigned SIDs. The | the entire Link State Database (LSDB) along with assigned SIDs. The | |||
reverse path can be built from the PMS/head-end by stacking segments | reverse path can be built from the PMS/head-end by stacking segments | |||
for the reverse path. The Reply Path TLV as defined in [RFC7110] is | for the reverse path. The Reply Path TLV as defined in [RFC7110] is | |||
used to carry the return path. Reply Mode 5 (Reply via Specified | used to carry the return path. Reply Mode 5 (Reply via Specified | |||
Path) is defined in Section 4.1 of [RFC7110]. While using the | Path) is defined in Section 4.1 of [RFC7110]. While using the | |||
procedures described in this document, the Reply Mode is set to 5 | procedures described in this document, the Reply Mode is set to 5 | |||
(Reply via Specified Path), and the Reply Path TLV is included in the | (Reply via Specified Path), and the Reply Path TLV is included in the | |||
echo request message as described in [RFC7110]. The Reply Path TLV | echo request message as described in [RFC7110]. The Reply Path TLV | |||
is constructed as per Section 4.2 of [RFC7110]. This document | is constructed as per Section 4.2 of [RFC7110]. This document | |||
defines three new sub-TLVs to encode the SR path. | defines three new sub-TLVs to encode the SR Path. | |||
The type of segment that the head-end chooses to send in the Reply | The type of segment that the head-end chooses to send in the Reply | |||
Path TLV is governed by local policy. Implementations may provide | Path TLV is governed by local policy. Implementations may provide | |||
Command Line Interface (CLI) input parameters in the form of labels, | Command Line Interface (CLI) input parameters in the form of labels, | |||
IPv4 addresses, IPv6 addresses, or a combination of these, which get | IPv4 addresses, IPv6 addresses, or a combination of these, which get | |||
encoded in the Reply Path TLV. Implementations may also provide | encoded in the Reply Path TLV. Implementations may also provide | |||
mechanisms to acquire the LSDB of remote domains and compute the | mechanisms to acquire the LSDB of remote domains and compute the | |||
return path based on the acquired LSDB. For traceroute purposes, the | return path based on the acquired LSDB. For traceroute purposes, the | |||
return path will have to consider the reply being sent from every | return path will have to consider the reply being sent from every | |||
node along the path. The return path changes when the traceroute | node along the path. The return path changes when the traceroute | |||
skipping to change at line 282 ¶ | skipping to change at line 283 ¶ | |||
a dynamically computed return path as described in Section 5.5. | a dynamically computed return path as described in Section 5.5. | |||
Some networks may consist of IPv4-only domains and IPv6-only domains. | Some networks may consist of IPv4-only domains and IPv6-only domains. | |||
Handling end-to-end MPLS OAM for such networks is out of the scope of | Handling end-to-end MPLS OAM for such networks is out of the scope of | |||
this document. It is recommended to use dual-stack in such cases and | this document. It is recommended to use dual-stack in such cases and | |||
use end-to-end IPv6 addresses for MPLS ping and traceroute | use end-to-end IPv6 addresses for MPLS ping and traceroute | |||
procedures. | procedures. | |||
4. Segment Sub-TLV | 4. Segment Sub-TLV | |||
Section 4 of [RFC9256] defines various segment types. The types of | Section 4 of [RFC9256] defines various Segment Types. The types of | |||
segments applicable to this document have been defined in this | segments applicable to this document have been defined in this | |||
section for the use of MPLS OAM. The intention was to keep the | section for the use of MPLS OAM. The intention was to keep the | |||
definitions as close to those in [RFC9256] as possible, with | definitions as close to those in [RFC9256] as possible, with | |||
modifications only when needed. One or more Segment sub-TLVs can be | modifications only when needed. One or more Segment sub-TLVs can be | |||
included in the Reply Path TLV. The Segment sub-TLVs included in a | included in the Reply Path TLV. The Segment sub-TLVs included in a | |||
Reply Path TLV MAY be of different types. | Reply Path TLV MAY be of different types. | |||
The below types of Segment sub-TLVs apply to the Reply Path TLV. The | The below types of Segment sub-TLVs apply to the Reply Path TLV. The | |||
code points for the sub-TLVs are taken from the IANA registry common | code points for the sub-TLVs are taken from the IANA registry common | |||
to TLVs 1, 16, and 21. This document defines the usage and | to TLVs 1, 16, and 21. This document defines the usage and | |||
skipping to change at line 391 ¶ | skipping to change at line 392 ¶ | |||
Flags: 1 octet of flags as defined in Section 4.4. | Flags: 1 octet of flags as defined in Section 4.4. | |||
RESERVED: 2 octets of reserved bits. MUST be set to zero when | RESERVED: 2 octets of reserved bits. MUST be set to zero when | |||
sending; MUST be ignored on receipt. | sending; MUST be ignored on receipt. | |||
SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | |||
is present, this specifies the SR Algorithm as described in | is present, this specifies the SR Algorithm as described in | |||
Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | |||
[RFC9350]. The SR Algorithm is used by the receiver to derive the | [RFC9350]. The SR Algorithm is used by the receiver to derive the | |||
label. When the A-flag is unset, this field has no meaning and | label. When the A-Flag is unset, this field has no meaning and | |||
thus MUST be set to zero on transmission and ignored on receipt. | thus MUST be set to zero (MBZ) on transmission and ignored on | |||
receipt. | ||||
IPv4 Node Address: 4-octet IPv4 address representing a node. The | IPv4 Node Address: 4-octet IPv4 address representing a node. The | |||
IPv4 Node Address MUST be present. It should be a stable address | IPv4 Node Address MUST be present. It should be a stable address | |||
belonging to the node (e.g., loopback address). | belonging to the node (e.g., loopback address). | |||
SID: Optional 4-octet field containing the labels TC, S, and TTL as | SID: Optional 4-octet field containing the labels TC, S, and TTL as | |||
defined in Section 4.1. When the SID field is present, it MUST be | defined in Section 4.1. When the SID field is present, it MUST be | |||
used for constructing the Reply Path. | used for constructing the Reply Path. | |||
4.3. Type-D: IPv6 Node Address with an Optional SID for SR-MPLS | 4.3. Type-D: IPv6 Node Address with an Optional SID for SR-MPLS | |||
skipping to change at line 439 ¶ | skipping to change at line 441 ¶ | |||
Flags: 1 octet of flags as defined in Section 4.4. | Flags: 1 octet of flags as defined in Section 4.4. | |||
RESERVED: 2 octets of reserved bits. MUST be set to zero when | RESERVED: 2 octets of reserved bits. MUST be set to zero when | |||
sending; MUST be ignored on receipt. | sending; MUST be ignored on receipt. | |||
SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | |||
is present, this specifies the SR Algorithm as described in | is present, this specifies the SR Algorithm as described in | |||
Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | |||
[RFC9350]. The SR Algorithm is used by the receiver to derive the | [RFC9350]. The SR Algorithm is used by the receiver to derive the | |||
label. When the A-flag is unset, this field has no meaning and | label. When the A-Flag is unset, this field has no meaning and | |||
thus MUST be set to zero (MBZ) on transmission and ignored on | thus MUST be set to zero (MBZ) on transmission and ignored on | |||
receipt. | receipt. | |||
IPv6 Node Address: 16-octet IPv6 address of one interface of a node. | IPv6 Node Address: 16-octet IPv6 address of one interface of a node. | |||
The IPv6 Node Address MUST be present. It should be a stable | The IPv6 Node Address MUST be present. It should be a stable | |||
address belonging to the node (e.g., loopback address). | address belonging to the node (e.g., loopback address). | |||
SID: Optional 4-octet field containing the labels TC, S, and TTL as | SID: Optional 4-octet field containing the labels TC, S, and TTL as | |||
defined in Section 4.1. When the SID field is present, it MUST be | defined in Section 4.1. When the SID field is present, it MUST be | |||
used for constructing the Reply Path. | used for constructing the Reply Path. | |||
skipping to change at line 467 ¶ | skipping to change at line 469 ¶ | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
| |A| | | | | | | | | |A| | | | | | | | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
Figure 6: Flags | Figure 6: Flags | |||
Where: | Where: | |||
A-Flag: This flag indicates the presence of an SR Algorithm ID in | A-Flag: This flag indicates the presence of an SR Algorithm ID in | |||
the "SR Algorithm" field applicable to various segment Types. | the SR Algorithm field applicable to various Segment Types. | |||
Unused bits in the Flag octet MUST be set to zero upon transmission | Unused bits in the Flag octet MUST be set to zero upon transmission | |||
and MUST be ignored upon receipt. | and MUST be ignored upon receipt. | |||
The following applies to the Segment Flags: | The following applies to the Segment Flags: | |||
The A-Flag applies to Segment Type-C and Type-D. If the A-Flag | The A-Flag applies to Segment Type-C and Type-D. If the A-Flag | |||
appears with the Type-A Segment Type, it MUST be ignored. | appears with the Type-A Segment Type, it MUST be ignored. | |||
5. Detailed Procedures | 5. Detailed Procedures | |||
skipping to change at line 507 ¶ | skipping to change at line 509 ¶ | |||
the MPLS header that the responder MUST use while sending the echo | the MPLS header that the responder MUST use while sending the echo | |||
reply. | reply. | |||
5.2. Receiving an Echo Request | 5.2. Receiving an Echo Request | |||
As described in [RFC7110], when the Reply Mode is set to 5 (Reply via | As described in [RFC7110], when the Reply Mode is set to 5 (Reply via | |||
Specified Path), the echo request must contain the Reply Path TLV. | Specified Path), the echo request must contain the Reply Path TLV. | |||
The absence of the Reply Path TLV is treated as a malformed echo | The absence of the Reply Path TLV is treated as a malformed echo | |||
request. When an echo request is received, if the responder does not | request. When an echo request is received, if the responder does not | |||
support the Reply Mode 5 defined in [RFC7110], an echo reply with the | support the Reply Mode 5 defined in [RFC7110], an echo reply with the | |||
return code set to "Malformed echo request received" and the Subcode | Return Code set to "Malformed echo request received" and the Subcode | |||
set to zero must be sent back to the initiator according to the rules | set to zero must be sent back to the initiator according to the rules | |||
of [RFC8029]. If the echo request message contains a malformed | of [RFC8029]. If the echo request message contains a malformed | |||
Segment sub-TLV, such as an incorrect length field, an echo reply | Segment sub-TLV, such as an incorrect length field, an echo reply | |||
must be sent back to the initiator with the return code set to | must be sent back to the initiator with the Return Code set to | |||
"Malformed echo request received" and the Subcode set to zero. | "Malformed echo request received" and the Subcode set to zero. | |||
When a Reply Path TLV is received, the responder that supports | When a Reply Path TLV is received, the responder that supports | |||
processing it MUST use the segments in Reply Path TLV to build the | processing it MUST use the segments in Reply Path TLV to build the | |||
echo reply. The responder MUST follow the normal Forwarding | echo reply. The responder MUST follow the normal Forwarding | |||
Equivalence Class (FEC) validation procedures as described in | Equivalence Class (FEC) validation procedures as described in | |||
[RFC8029] and [RFC8287] and this document does not suggest any change | [RFC8029] and [RFC8287] and this document does not suggest any change | |||
to those procedures. When the echo reply has to be sent out, the | to those procedures. When the echo reply has to be sent out, the | |||
Reply Path TLV MUST be used to construct the MPLS packet to send out. | Reply Path TLV MUST be used to construct the MPLS packet to send out. | |||
skipping to change at line 536 ¶ | skipping to change at line 538 ¶ | |||
[RFC8029]. An MPLS packet is constructed with an echo reply in the | [RFC8029]. An MPLS packet is constructed with an echo reply in the | |||
payload. The top label MUST be constructed from the first segment of | payload. The top label MUST be constructed from the first segment of | |||
the Reply Path TLV. The remaining labels MUST be constructed by | the Reply Path TLV. The remaining labels MUST be constructed by | |||
following the order of the segments from the Reply Path TLV. The | following the order of the segments from the Reply Path TLV. The | |||
MPLS header of the echo reply MUST be constructed from the segments | MPLS header of the echo reply MUST be constructed from the segments | |||
in the Reply Path TLV and MUST NOT add any other label. The S bit is | in the Reply Path TLV and MUST NOT add any other label. The S bit is | |||
set for the bottom label as per the MPLS specifications [RFC3032]. | set for the bottom label as per the MPLS specifications [RFC3032]. | |||
The responder MAY check the reachability of the top label in its own | The responder MAY check the reachability of the top label in its own | |||
Label Forwarding Information Base (LFIB) before sending the echo | Label Forwarding Information Base (LFIB) before sending the echo | |||
reply. If the top label is unreachable, the responder SHOULD send | reply. If the top label is unreachable, the responder SHOULD send | |||
the appropriate return code and follow the procedures as per | the appropriate Return Code and follow the procedures as per | |||
Section 5.2 of [RFC7110]. The exception case is when the responder | Section 5.2 of [RFC7110]. The exception case is when the responder | |||
does not have IP reachability to the originator, in which case, it | does not have IP reachability to the originator, in which case, it | |||
may not be possible to send an echo reply at all. Even if sent (by | may not be possible to send an echo reply at all. Even if sent (by | |||
following a default route present on the responder, for example), the | following a default route present on the responder, for example), the | |||
echo reply might not reach the originator. The node MAY provide | echo reply might not reach the originator. The node MAY provide | |||
necessary log information in case of unreachability. In certain | necessary log information in case of unreachability. In certain | |||
scenarios, the head-end MAY choose to send Type-C/Type-D segments | scenarios, the head-end MAY choose to send Type-C/Type-D segments | |||
consisting of IPv4 addresses or IPv6 addresses when it is unable to | consisting of IPv4 addresses or IPv6 addresses when it is unable to | |||
derive the SID from available topology information. Optionally, the | derive the SID from available topology information. Optionally, the | |||
SID may also be associated with the Type-C/Type-D segment, if such | SID may also be associated with the Type-C/Type-D segment, if such | |||
information is available from the controller or via operator input. | information is available from the controller or via operator input. | |||
In such cases, the node sending the echo reply MUST derive the MPLS | In such cases, the node sending the echo reply MUST derive the MPLS | |||
labels based on the Node-SIDs associated with the IPv4/IPv6 | labels based on the Node-SIDs associated with the IPv4/IPv6 | |||
addresses. If an optional MPLS SID is present in the Type-C/Type-D | addresses. If an optional MPLS SID is present in the Type-C/Type-D | |||
segments, the SID MUST be used to encode the echo reply with MPLS | segments, the SID MUST be used to encode the echo reply with MPLS | |||
labels. If the MPLS SID does not match with the IPv4 or IPv6 address | labels. If the MPLS SID does not match with the IPv4 or IPv6 address | |||
field in the Type-C or Type-D SID, log information should be | field in the Type-C or Type-D SID, log information should be | |||
generated. | generated. | |||
The reply path return code is set as described in Section 7.4 of | The Reply Path Return Code is set as described in Section 7.4 of | |||
[RFC7110]. According to Section 5.3 of [RFC7110], the Reply Path TLV | [RFC7110]. According to Section 5.3 of [RFC7110], the Reply Path TLV | |||
is included in an echo reply indicating the specified return path | is included in an echo reply indicating the specified return path | |||
that the echo reply message is required to follow. | that the echo reply message is required to follow. | |||
When the node is configured to dynamically create a return path for | When the node is configured to dynamically create a return path for | |||
the next echo request, the procedures described in Section 5.5 MUST | the next echo request, the procedures described in Section 5.5 MUST | |||
be used. The reply path return code MUST be set to 0x0006, and the | be used. The Reply Path Return Code MUST be set to 0x0006, and the | |||
same Reply Path TLV or a new Reply Path TLV MUST be included in the | same Reply Path TLV or a new Reply Path TLV MUST be included in the | |||
echo reply. | echo reply. | |||
5.4. Receiving an Echo Reply | 5.4. Receiving an Echo Reply | |||
The rules and processes defined in Section 4.6 of [RFC8029] and | The rules and processes defined in Section 4.6 of [RFC8029] and | |||
Section 5.4 of [RFC7110] apply here. In addition, if the Reply Path | Section 5.4 of [RFC7110] apply here. In addition, if the Reply Path | |||
return code is "Use Reply Path TLV in the echo reply for building the | Return Code is "Use Reply Path TLV from this echo reply for building | |||
next echo request" (as defined in this document), the Reply Path TLV | the next echo request" (as defined in this document), the Reply Path | |||
from the echo reply MUST be sent in the next echo request with the | TLV from the echo reply MUST be sent in the next echo request with | |||
TTL incremented by 1. If the initiator node does not support the | the TTL incremented by 1. If the initiator node does not support the | |||
return code "Use Reply Path TLV in the echo reply for building the | Return Code "Use Reply Path TLV from this echo reply for building the | |||
next echo request", log information should be generated indicating | next echo request", log information should be generated indicating | |||
the return code, and the operator may choose to specify the return | the Return Code, and the operator may choose to specify the return | |||
path explicitly or use other mechanisms to verify the SR policy. If | path explicitly or use other mechanisms to verify the SR Policy. If | |||
the return code is 0x0007 "Local policy does not allow dynamic return | the Return Code is 0x0007 "Local policy does not allow dynamic return | |||
path building", it indicates that the intermediate node does not | path building", it indicates that the intermediate node does not | |||
support building the dynamic return path. Log information should be | support building the dynamic return path. Log information should be | |||
generated on the initiator receiving this return code, and the | generated on the initiator receiving this Return Code, and the | |||
operator may choose to specify the return path explicitly or use | operator may choose to specify the return path explicitly or use | |||
other mechanisms to verify the SR Policy. If the TTL is already 255, | other mechanisms to verify the SR Policy. If the TTL is already 255, | |||
the traceroute procedure MUST be ended with an appropriate log | the traceroute procedure MUST be ended with an appropriate log | |||
message. | message. | |||
5.5. Building a Reply Path TLV Dynamically | 5.5. Building a Reply Path TLV Dynamically | |||
In some cases, the head-end may not have complete visibility of | In some cases, the head-end may not have complete visibility of | |||
inter-AS/inter-domain topology. In such cases, it can rely on | inter-AS/inter-domain topology. In such cases, it can rely on | |||
routers in the path to build the reverse path for MPLS traceroute | routers in the path to build the reverse path for MPLS traceroute | |||
procedures. For this purpose, the Reply Path TLV in the echo reply | procedures. For this purpose, the Reply Path TLV in the echo reply | |||
corresponds to the return path to be used in building the next echo | corresponds to the return path to be used in building the next echo | |||
request. A new return code "Use Reply Path TLV in the echo reply for | request. A new Return Code "Use Reply Path TLV from this echo reply | |||
building the next echo request" is defined in this document. | for building the next echo request" is defined in this document. | |||
+========+======================================+ | +========+=========================================+ | |||
| Value | Meaning | | | Value | Meaning | | |||
+========+======================================+ | +========+=========================================+ | |||
| 0x0006 | Use Reply Path TLV in the echo reply | | | 0x0006 | Use Reply Path TLV from this echo reply | | |||
| | for building the next echo request | | | | for building the next echo request | | |||
+--------+--------------------------------------+ | +--------+-----------------------------------------+ | |||
Table 1 | Table 1 | |||
5.5.1. Procedures to Build the Return Path | 5.5.1. Procedures to Build the Return Path | |||
To dynamically build the return path for the traceroute procedures, | To dynamically build the return path for the traceroute procedures, | |||
the domain border nodes along the path being traced should support | the domain border nodes along the path being traced should support | |||
the procedures described in this section. Local policy on the domain | the procedures described in this section. Local policy on the domain | |||
border nodes should determine whether the domain border node | border nodes should determine whether the domain border node | |||
participates in building the return path dynamically during | participates in building the return path dynamically during | |||
traceroute. | traceroute. | |||
skipping to change at line 640 ¶ | skipping to change at line 642 ¶ | |||
downstream nodes in the path will not know what SRGB to use to | downstream nodes in the path will not know what SRGB to use to | |||
translate the IP address to a label. As the ABR added its own node | translate the IP address to a label. As the ABR added its own node | |||
label, it is guaranteed that this ABR will be in the return path and | label, it is guaranteed that this ABR will be in the return path and | |||
will be forwarding the traffic based on the next label after its | will be forwarding the traffic based on the next label after its | |||
label. | label. | |||
When an ASBR receives an echo request from another AS, and the ASBR | When an ASBR receives an echo request from another AS, and the ASBR | |||
is configured to build the return path dynamically, the ASBR should | is configured to build the return path dynamically, the ASBR should | |||
build a Reply Path TLV and include it in the echo reply. The Reply | build a Reply Path TLV and include it in the echo reply. The Reply | |||
Path TLV should consist of its node label and an EPE-SID to the AS | Path TLV should consist of its node label and an EPE-SID to the AS | |||
from where the traceroute message was received. A Reply path return | from where the traceroute message was received. A Reply Path Return | |||
code of 0x0006 MUST be set in the echo reply to indicate that the | Code of 0x0006 MUST be set in the echo reply to indicate that the | |||
next echo request MUST use the return path from the Reply Path TLV in | next echo request MUST use the return path from the Reply Path TLV in | |||
the echo reply. ASBR should locally decide the outgoing interface | the echo reply. ASBR should locally decide the outgoing interface | |||
for the echo reply packet. Generally, remote ASBR will choose the | for the echo reply packet. Generally, remote ASBR will choose the | |||
interface on which the incoming OAM packet was received to send the | interface on which the incoming OAM packet was received to send the | |||
echo reply out. In case the ASBR identifies multiple paths to reach | echo reply out. In case the ASBR identifies multiple paths to reach | |||
the initiator, it MUST choose to send one such path in the Reply Path | the initiator, it MUST choose to send one such path in the Reply Path | |||
TLV. The Reply Path TLV is built by adding two Segment sub-TLVs. | TLV. The Reply Path TLV is built by adding two Segment sub-TLVs. | |||
The top Segment sub-TLV consists of the ASBR's Node-SID, and the | The top Segment sub-TLV consists of the ASBR's Node-SID, and the | |||
second segment consists of the EPE-SID in the reverse direction to | second segment consists of the EPE-SID in the reverse direction to | |||
reach the AS from which the OAM packet was received. The type of | reach the AS from which the OAM packet was received. The type of | |||
skipping to change at line 668 ¶ | skipping to change at line 670 ¶ | |||
Reply Path TLV to a label stack and build an MPLS header for the echo | Reply Path TLV to a label stack and build an MPLS header for the echo | |||
reply packet. This procedure can be applied to an end-to-end path | reply packet. This procedure can be applied to an end-to-end path | |||
consisting of multiple ASes. Each ASBR that receives an echo request | consisting of multiple ASes. Each ASBR that receives an echo request | |||
from another AS adds its Node-SID and EPE-SID on top of the existing | from another AS adds its Node-SID and EPE-SID on top of the existing | |||
segments in the Reply Path TLV. | segments in the Reply Path TLV. | |||
An ASBR that receives the echo request from a neighbor belonging to | An ASBR that receives the echo request from a neighbor belonging to | |||
the same AS MUST look at the Reply Path TLV received in the echo | the same AS MUST look at the Reply Path TLV received in the echo | |||
request. If the Reply Path TLV consists of a Type-C/Type-D segment, | request. If the Reply Path TLV consists of a Type-C/Type-D segment, | |||
it MUST convert the Type-C/Type-D segment to a Type-A segment by | it MUST convert the Type-C/Type-D segment to a Type-A segment by | |||
deriving a label from its own SRGB. The ASBR MUST set the reply path | deriving a label from its own SRGB. The ASBR MUST set the Reply Path | |||
return code to 0x0006 and send the newly constructed Reply Path TLV | Return Code to 0x0006 and send the newly constructed Reply Path TLV | |||
in the echo reply. | in the echo reply. | |||
Internal nodes or non-domain border nodes might not set the Reply | Internal nodes or non-domain border nodes might not set the Reply | |||
Path TLV return code to 0x0006 in the echo reply message as there is | Path TLV Return Code to 0x0006 in the echo reply message as there is | |||
no change in the return path. In these cases, the head-end node/PMS | no change in the return path. In these cases, the head-end node/PMS | |||
that initiates the traceroute procedure MUST continue to send the | that initiates the traceroute procedure MUST continue to send the | |||
previously sent Reply Path TLV in the echo request message in every | previously sent Reply Path TLV in the echo request message in every | |||
subsequent echo request. | subsequent echo request. | |||
Note that an ASBR's local policy may prohibit it from participating | Note that an ASBR's local policy may prohibit it from participating | |||
in the dynamic traceroute procedures. If such an ASBR is encountered | in the dynamic traceroute procedures. If such an ASBR is encountered | |||
in the forward path, dynamic return path building procedures will | in the forward path, dynamic return path building procedures will | |||
fail. In such cases, an ASBR that supports this document MUST set | fail. In such cases, an ASBR that supports this document MUST set | |||
the return code to 0x0007 to indicate that local policies do not | the Return Code to 0x0007 to indicate that local policies do not | |||
allow the dynamic return path building. | allow the dynamic return path building. | |||
+========+==========================================================+ | +========+==========================================================+ | |||
| Value | Meaning | | | Value | Meaning | | |||
+========+==========================================================+ | +========+==========================================================+ | |||
| 0x0007 | Local policy does not allow | | | 0x0007 | Local policy does not allow | | |||
| | dynamic return path building | | | | dynamic return path building | | |||
+--------+----------------------------------------------------------+ | +--------+----------------------------------------------------------+ | |||
Table 2 | Table 2 | |||
skipping to change at line 726 ¶ | skipping to change at line 728 ¶ | |||
described in [RFC8029]. | described in [RFC8029]. | |||
7. IANA Considerations | 7. IANA Considerations | |||
7.1. Segment Sub-TLV | 7.1. Segment Sub-TLV | |||
IANA has assigned three new sub-TLVs from the "Sub-TLVs for TLV Types | IANA has assigned three new sub-TLVs from the "Sub-TLVs for TLV Types | |||
1, 16, and 21" registry of the "Multiprotocol Label Switching (MPLS) | 1, 16, and 21" registry of the "Multiprotocol Label Switching (MPLS) | |||
Label Switched Paths (LSPs) Ping Parameters" registry group. | Label Switched Paths (LSPs) Ping Parameters" registry group. | |||
+==========+====================================+=============+ | +==========+=====================================+=============+ | |||
| Sub-Type | Sub-TLV Name | Reference | | | Sub-Type | Sub-TLV Name | Reference | | |||
+==========+====================================+=============+ | +==========+=====================================+=============+ | |||
| 46 | SID only in the form of MPLS label | Section 4.1 | | | 46 | SID only, in the form of MPLS label | Section 4.1 | | |||
| | | of RFC 9716 | | | | | of RFC 9716 | | |||
+----------+------------------------------------+-------------+ | +----------+-------------------------------------+-------------+ | |||
| 47 | IPv4 Node Address with an optional | Section 4.2 | | | 47 | IPv4 Node Address with an optional | Section 4.2 | | |||
| | SID for SR-MPLS | of RFC 9716 | | | | SID for SR-MPLS | of RFC 9716 | | |||
+----------+------------------------------------+-------------+ | +----------+-------------------------------------+-------------+ | |||
| 48 | IPv6 Node Address with an optional | Section 4.3 | | | 48 | IPv6 Node Address with an optional | Section 4.3 | | |||
| | SID for SR-MPLS | of RFC 9716 | | | | SID for SR-MPLS | of RFC 9716 | | |||
+----------+------------------------------------+-------------+ | +----------+-------------------------------------+-------------+ | |||
Table 3 | Table 3 | |||
The allocation of code points for the Segment sub-TLVs should be done | The allocation of code points for the Segment sub-TLVs should be done | |||
from the Standards Action range (0-16383). | from the Standards Action range (0-16383). | |||
7.2. New Registry for Segment ID Sub-TLV Flags | 7.2. New Registry for Segment ID Sub-TLV Flags | |||
IANA has created a new "Segment ID Sub-TLV Flags" registry (see | IANA has created a new "Segment ID Sub-TLV Flags" registry (see | |||
Section 4.4) under the "Multiprotocol Label Switching (MPLS) Label | Section 4.4) under the "Multiprotocol Label Switching (MPLS) Label | |||
Switched Paths (LSPs) Ping Parameters" registry group. | Switched Paths (LSPs) Ping Parameters" registry group. | |||
This registry tracks the assignment of 8 flags in the Segment ID sub- | This registry tracks the assignment of 8 flags in the Segment ID sub- | |||
TLV flags field. The flags are numbered from 0 (the most significant | TLV flags field. The flags are numbered from 0 (the most significant | |||
bit and transmitted first) to 7. | bit and transmitted first) to 7. | |||
New entries are assigned by Standards Action. Initial entries in the | New entries are assigned by Standards Action. Initial entries in the | |||
registry are as follows: | registry are as follows: | |||
+============+========+=========================+ | +============+========+=========================+ | |||
| Bit number | Name | Reference | | | Bit number | Name | Reference | | |||
+============+========+=========================+ | +============+========+=========================+ | |||
| 1 | A Flag | Section 4.4 of RFC 9716 | | | 1 | A-Flag | Section 4.4 of RFC 9716 | | |||
+------------+--------+-------------------------+ | +------------+--------+-------------------------+ | |||
Table 4 | Table 4 | |||
7.3. Reply Path Return Codes Registry | 7.3. Reply Path Return Codes Registry | |||
IANA has assigned new return codes in the "Reply Path Return Codes" | IANA has assigned new Return Codes in the "Reply Path Return Codes" | |||
registry under the "Multiprotocol Label Switching (MPLS) Label | registry under the "Multiprotocol Label Switching (MPLS) Label | |||
Switched Paths (LSPs) Ping Parameters" registry group. | Switched Paths (LSPs) Ping Parameters" registry group. | |||
+========+=========================================+===========+ | +========+=========================================+===========+ | |||
| Value | Meaning | Reference | | | Value | Meaning | Reference | | |||
+========+=========================================+===========+ | +========+=========================================+===========+ | |||
| 0x0006 | Use Reply Path TLV from this echo reply | RFC 9716 | | | 0x0006 | Use Reply Path TLV from this echo reply | RFC 9716 | | |||
| | for building the next echo request | | | | | for building the next echo request | | | |||
+--------+-----------------------------------------+-----------+ | +--------+-----------------------------------------+-----------+ | |||
| 0x0007 | Local policy does not allow dynamic | RFC 9716 | | | 0x0007 | Local policy does not allow dynamic | RFC 9716 | | |||
| | return path building | | | | | return path building | | | |||
+--------+-----------------------------------------+-----------+ | +--------+-----------------------------------------+-----------+ | |||
Table 5 | Table 5 | |||
The return codes should be assigned from the Standards Action range | The Return Codes should be assigned from the Standards Action range | |||
(0x0000-0xFFFB). | (0x0000-0xFFFB). | |||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
skipping to change at line 903 ¶ | skipping to change at line 905 ¶ | |||
The example topology given in Figure 1 will be used in the below | The example topology given in Figure 1 will be used in the below | |||
sections to explain LSP ping and traceroute procedures. The PMS/ | sections to explain LSP ping and traceroute procedures. The PMS/ | |||
head-end has a complete view of the topology. PE1, P1, P2, ASBR1, | head-end has a complete view of the topology. PE1, P1, P2, ASBR1, | |||
and ASBR2 are in AS1. Similarly, ASBR3, ASBR4, P3, P4, and PE4 are | and ASBR2 are in AS1. Similarly, ASBR3, ASBR4, P3, P4, and PE4 are | |||
in AS2. | in AS2. | |||
AS1 and AS2 have SR enabled. IGPs like OSPF/IS-IS are used to flood | AS1 and AS2 have SR enabled. IGPs like OSPF/IS-IS are used to flood | |||
SIDs in each AS. ASBR1, ASBR2, ASBR3, and ASBR4 advertise BGP EPE- | SIDs in each AS. ASBR1, ASBR2, ASBR3, and ASBR4 advertise BGP EPE- | |||
SIDs for the inter-AS links. The topologies of AS1 and AS2 are | SIDs for the inter-AS links. The topologies of AS1 and AS2 are | |||
advertised via BGP - Link State (BGP-LS) to the controller/PMS or | advertised via BGP - Link State (BGP-LS) to the controller, PMS, or | |||
head-end node. The EPE-SIDs are also advertised via BGP-LS as | head-end node. The EPE-SIDs are also advertised via BGP-LS as | |||
described in [RFC9086]. The example uses EPE-SIDs for the inter-AS | described in [RFC9086]. The example uses EPE-SIDs for the inter-AS | |||
links, but the same could be achieved using Adjacency-SIDs advertised | links, but the same could be achieved using Adjacency-SIDs advertised | |||
for a passive IGP link. | for a passive IGP link. | |||
The description in this document uses the notations below for SIDs. | The description in this document uses the notations below for SIDs. | |||
Node-SIDs: N-PE1, N-P1, N-ASBR1, etc. | Node-SIDs: N-PE1, N-P1, N-ASBR1, etc. | |||
Adjacency-SIDs: Adj-PE1-P1, Adj-P1-P2, etc. | Adjacency-SIDs: Adj-PE1-P1, Adj-P1-P2, etc. | |||
skipping to change at line 1053 ¶ | skipping to change at line 1055 ¶ | |||
based on its own SRGB. When the traceroute procedure crosses the | based on its own SRGB. When the traceroute procedure crosses the | |||
border ASBR1, head-end PE1 should send a Type-A segment for N-PE1 | border ASBR1, head-end PE1 should send a Type-A segment for N-PE1 | |||
based on the label derived from ASBR1's SRGB. This is required | based on the label derived from ASBR1's SRGB. This is required | |||
because ASBR4, P3, P4, etc. may not have the topology information to | because ASBR4, P3, P4, etc. may not have the topology information to | |||
derive SRGB for PE1. After the traceroute procedure reaches ASBR4, | derive SRGB for PE1. After the traceroute procedure reaches ASBR4, | |||
the return path will be [N-PE1 (Type-A with the label based on | the return path will be [N-PE1 (Type-A with the label based on | |||
ASBR1's SRGB), EPE-ASBR4-ASBR1, N-ASBR4 (Type-C)]. | ASBR1's SRGB), EPE-ASBR4-ASBR1, N-ASBR4 (Type-C)]. | |||
If the packet needs to follow a return path specific to an algorithm | If the packet needs to follow a return path specific to an algorithm | |||
(as defined in [RFC9350]), a Type-C Segment sub-TLV with a | (as defined in [RFC9350]), a Type-C Segment sub-TLV with a | |||
corresponding algorithm field set should be used. The A-flag should | corresponding algorithm field set should be used. The A-Flag should | |||
be set to indicate that the SID corresponding to the algorithm should | be set to indicate that the SID corresponding to the algorithm should | |||
be used. | be used. | |||
To extend the example to three or more ASes, let us consider a | To extend the example to three or more ASes, let us consider a | |||
traceroute from PE1 to PE5 in Figure 1. In this example, the PE1 to | traceroute from PE1 to PE5 in Figure 1. In this example, the PE1 to | |||
PE5 path has to cross three domains: AS1, AS2, and AS3. Let us | PE5 path has to cross three domains: AS1, AS2, and AS3. Let us | |||
consider a path from PE1 to PE5 that goes through [PE1, ASBR1, ASBR4, | consider a path from PE1 to PE5 that goes through [PE1, ASBR1, ASBR4, | |||
ASBR6, ASBR8, PE5]. When the traceroute procedure is visiting the | ASBR6, ASBR8, PE5]. When the traceroute procedure is visiting the | |||
nodes in AS1, the Reply Path TLV sent from the head-end consists of | nodes in AS1, the Reply Path TLV sent from the head-end consists of | |||
[N-PE1]. When the traceroute procedure reaches the ASBR4, the return | [N-PE1]. When the traceroute procedure reaches the ASBR4, the return | |||
skipping to change at line 1083 ¶ | skipping to change at line 1085 ¶ | |||
topology consists of multi-domain IGP with a common border node | topology consists of multi-domain IGP with a common border node | |||
between the domains. This could be achieved with multi-area or | between the domains. This could be achieved with multi-area or | |||
multi-level IGP or with multiple instances of IGP deployed on the | multi-level IGP or with multiple instances of IGP deployed on the | |||
same node. The return path computation for this topology is similar | same node. The return path computation for this topology is similar | |||
to multi-AS computation, except that the return path consists of a | to multi-AS computation, except that the return path consists of a | |||
single border node label. | single border node label. | |||
A.1.3. Procedures for Building Reply Path TLV Dynamically | A.1.3. Procedures for Building Reply Path TLV Dynamically | |||
Let us consider the topology from Figure 1. Let us consider an SR | Let us consider the topology from Figure 1. Let us consider an SR | |||
policy path built from PE1 to PE4 with the following label stack: | Policy path built from PE1 to PE4 with the following label stack: | |||
N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4. PE1 begins traceroute | N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4. PE1 begins traceroute | |||
procedures with the TTL set to 1 and includes [N-PE1] in the Reply | procedures with the TTL set to 1 and includes [N-PE1] in the Reply | |||
Path TLV. The traceroute packet TTL expires on P1, and P1 processes | Path TLV. The traceroute packet TTL expires on P1, and P1 processes | |||
the traceroute as per the procedures described in [RFC8029] and | the traceroute as per the procedures described in [RFC8029] and | |||
[RFC8287]. P1 sends an echo reply with the same Reply Path TLV with | [RFC8287]. P1 sends an echo reply with the same Reply Path TLV with | |||
the reply path return code set to 6. The return code of the echo | the Reply Path Return Code set to 6. The Return Code of the echo | |||
reply itself is set to the return code as per [RFC8029] and | reply itself is set to the Return Code as per [RFC8029] and | |||
[RFC8287]. This traceroute doesn't need any changes to the Reply | [RFC8287]. This traceroute doesn't need any changes to the Reply | |||
Path TLV until it leaves AS1. The same Reply Path TLV that is | Path TLV until it leaves AS1. The same Reply Path TLV that is | |||
received may be included in the echo reply by P1 and P2, or no Reply | received may be included in the echo reply by P1 and P2, or no Reply | |||
Path TLV is included so that the head-end continues to use the same | Path TLV is included so that the head-end continues to use the same | |||
return path in the echo request that it used to send the previous | return path in the echo request that it used to send the previous | |||
echo request. | echo request. | |||
When ASBR1 receives the echo request, in the case it receives the | When ASBR1 receives the echo request, in the case it receives the | |||
Type-C/Type-D segment in the Reply Path TLV in the echo request, it | Type-C/Type-D segment in the Reply Path TLV in the echo request, it | |||
converts that Type-C/Type-D segment to Type-A based on its own SRGB. | converts that Type-C/Type-D segment to Type-A based on its own SRGB. | |||
When ASBR4 receives the echo request, it should form this Reply Path | When ASBR4 receives the echo request, it should form this Reply Path | |||
TLV using its Node-SID (N-ASBR4) and EPE-SID (EPE-ASRB4-ASBR1) labels | TLV using its Node-SID (N-ASBR4) and EPE-SID (EPE-ASRB4-ASBR1) labels | |||
and set the reply path return code to 0x0006. Then, PE1 should use | and set the Reply Path Return Code to 0x0006. Then, PE1 should use | |||
this Reply Path TLV in subsequent echo requests. In this example, | this Reply Path TLV in subsequent echo requests. In this example, | |||
when the subsequent echo request reaches P3, it should use this Reply | when the subsequent echo request reaches P3, it should use this Reply | |||
Path TLV for sending the echo reply. The same Reply Path TLV is | Path TLV for sending the echo reply. The same Reply Path TLV is | |||
sufficient for any router in AS2 to send the reply. This is because | sufficient for any router in AS2 to send the reply. This is because | |||
the first label (N-ASBR4) can direct the echo reply to ASBR4 and the | the first label (N-ASBR4) can direct the echo reply to ASBR4 and the | |||
second one (EPE-ASBR4-ASBR1) can direct the echo reply to AS1. Once | second one (EPE-ASBR4-ASBR1) can direct the echo reply to AS1. Once | |||
the echo reply reaches AS1, normal IP forwarding or the N-PE1 helps | the echo reply reaches AS1, normal IP forwarding or the N-PE1 helps | |||
it to reach PE1. | it to reach PE1. | |||
The example described in the above paragraphs can be extended to | The example described in the above paragraphs can be extended to | |||
multiple ASes. This is done by following the same procedure for each | multiple ASes. This is done by following the same procedure for each | |||
ASBR, i.e., adding Node-SIDs and EPE-SIDs on receiving echo requests | ASBR, i.e., adding Node-SIDs and EPE-SIDs on receiving echo requests | |||
from neighboring ASes. | from neighboring ASes. | |||
Let us consider the topology from Figure 2. It consists of multiple | Let us consider the topology from Figure 2. It consists of multiple | |||
IGP domains with multiple areas/levels or separate IGP instances. | IGP domains with multiple areas/levels or separate IGP instances. | |||
There is a single border node that separates the two domains. In | There is a single border node that separates the two domains. In | |||
this case, PE1 sends a traceroute packet with the TTL set to 1 and | this case, PE1 sends a traceroute packet with the TTL set to 1 and | |||
includes N-PE1 in the Reply Path TLV. ABR1 receives the echo request | includes N-PE1 in the Reply Path TLV. ABR1 receives the echo | |||
and while sending the echo reply adds its node label to the Reply | request, adds its node label to the Reply Path TLV (while sending the | |||
Path TLV and sets the Reply path return code to 0x0006. The Reply | echo reply), and sets the Reply Path Return Code to 0x0006. The | |||
Path TLV in the echo reply from ABR1 consists of [N-ABR1, N-PE1]. | Reply Path TLV in the echo reply from ABR1 consists of [N-ABR1, | |||
The next echo request with a TTL of 2 reaches the P node. It is an | N-PE1]. The next echo request with a TTL of 2 reaches the P node. | |||
internal node, so it does not change the return path. The echo | It is an internal node, so it does not change the return path. The | |||
request with a TTL of 3 reaches ABR2, and it adds its node label so | echo request with a TTL of 3 reaches ABR2, and it adds its node label | |||
the Reply Path TLV sent in the echo reply will be [N-ABR2, N-ABR1, | so the Reply Path TLV sent in the echo reply will be [N-ABR2, N-ABR1, | |||
N-PE1]. The echo request with a TTL of 4 reaches PE4, and it sends | N-PE1]. The echo request with a TTL of 4 reaches PE4, and it sends | |||
an echo reply return code as an egress. PE4 does not include any | an echo reply Return Code as an egress. PE4 does not include any | |||
Reply Path TLVs in the echo reply. The above example assumes a | Reply Path TLVs in the echo reply. The above example assumes a | |||
uniform SRGB throughout the domain. In the case of different SRGBs, | uniform SRGB throughout the domain. In the case of different SRGBs, | |||
the top segment will be a Type-C/Type-D segment and all other | the top segment will be a Type-C/Type-D segment and all other | |||
segments will be Type-A. Each border node converts the Type-C/Type-D | segments will be Type-A. Each border node converts the Type-C/Type-D | |||
segment to Type-A before adding its segment to the Reply Path TLV. | segment to Type-A before adding its segment to the Reply Path TLV. | |||
Acknowledgments | Acknowledgments | |||
Thanks to Bruno Decraene for suggesting the use of the generic | Thanks to Bruno Decraene for suggesting the use of the generic | |||
Segment sub-TLV. Thanks to Adrian Farrel, Huub van Helvoort, Dhruv | Segment sub-TLV. Thanks to Adrian Farrel, Huub van Helvoort, Dhruv | |||
End of changes. 37 change blocks. | ||||
89 lines changed or deleted | 91 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |