| rfc9716.original | rfc9716.txt | |||
|---|---|---|---|---|
| Routing area S. Hegde | Internet Engineering Task Force (IETF) S. Hegde | |||
| Internet-Draft Juniper Networks Inc. | Request for Comments: 9716 Juniper Networks, Inc. | |||
| Intended status: Standards Track K. Arora | Category: Standards Track K. Arora | |||
| Expires: 28 December 2024 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 | |||
| 26 June 2024 | February 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 | |||
| draft-ietf-mpls-spring-inter-domain-oam-20 | ||||
| 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. An SR-MPLS | can be directly applied to the use of an MPLS data plane. A Segment | |||
| network may consist of multiple IGP domains or multiple Autonomous | Routing over MPLS (SR-MPLS) network may consist of multiple IGP | |||
| Systems (ASes) under the control of the same organization. It is | domains or multiple Autonomous Systems (ASes) under the control of | |||
| useful to have the Label Switched Path (LSP) ping and traceroute | the same organization. It is useful to have the Label Switched Path | |||
| procedures when an SR end-to-end path traverses multiple ASes or IGP | (LSP) ping and traceroute procedures when an SR end-to-end path | |||
| domains. This document outlines mechanisms to enable efficient LSP | traverses multiple ASes or IGP domains. This document outlines | |||
| ping and traceroute in inter-AS and inter-domain SR-MPLS networks | mechanisms to enable efficient LSP ping and traceroute procedures in | |||
| through a straightforward extension to the Operations, | inter-AS and inter-domain SR-MPLS networks. This is achieved through | |||
| Administration, and Maintenance (OAM) protocol, relying solely on | a straightforward extension to the Operations, Administration, and | |||
| data plane forwarding for handling echo replies on transit nodes. | Maintenance (OAM) protocol, relying solely on data plane forwarding | |||
| for handling echo replies on transit nodes. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
| provisions of BCP 78 and BCP 79. | ||||
| Internet-Drafts are working documents of the Internet Engineering | ||||
| Task Force (IETF). Note that other groups may also distribute | ||||
| working documents as Internet-Drafts. The list of current Internet- | ||||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
| Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
| and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
| time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
| material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
| Internet Standards is available in Section 2 of RFC 7841. | ||||
| This Internet-Draft will expire on 28 December 2024. | Information about the current status of this document, any errata, | |||
| and how to provide feedback on it may be obtained at | ||||
| https://www.rfc-editor.org/info/rfc9716. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
| license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
| Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
| and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
| extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
| described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
| provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
| in the Revised BSD License. | ||||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction | |||
| 1.1. Definition of Domain . . . . . . . . . . . . . . . . . . 5 | 1.1. Definition of Domain | |||
| 1.2. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.2. Requirements Language | |||
| 2. Inter-domain Networks with Multiple IGPs . . . . . . . . . . 5 | 2. Inter-Domain Networks with Multiple IGPs | |||
| 3. Reply Path TLV . . . . . . . . . . . . . . . . . . . . . . . 6 | 3. Reply Path TLV | |||
| 4. Segment Sub-TLV . . . . . . . . . . . . . . . . . . . . . . . 7 | 4. Segment Sub-TLV | |||
| 4.1. Type-A: SID only, in the form of MPLS Label . . . . . . . 7 | 4.1. Type-A: SID Only, in the Form of an MPLS Label | |||
| 4.2. Type-C: IPv4 Node Address with Optional SID for | 4.2. Type-C: IPv4 Node Address with an Optional SID for SR-MPLS | |||
| SR-MPLS . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 4.3. Type-D: IPv6 Node Address with an Optional SID for SR-MPLS | |||
| 4.3. Type D: IPv6 Node Address with Optional SID for SR | 4.4. Segment Flags | |||
| MPLS . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 5. Detailed Procedures | |||
| 4.4. Segment Flags . . . . . . . . . . . . . . . . . . . . . . 11 | 5.1. Sending an Echo Request | |||
| 5. Detailed Procedures . . . . . . . . . . . . . . . . . . . . . 11 | 5.2. Receiving an Echo Request | |||
| 5.1. Sending an Echo Request . . . . . . . . . . . . . . . . . 11 | 5.3. Sending an Echo Reply | |||
| 5.2. Receiving an Echo Request . . . . . . . . . . . . . . . . 12 | 5.4. Receiving an Echo Reply | |||
| 5.3. Sending an Echo Reply . . . . . . . . . . . . . . . . . . 12 | 5.5. Building a Reply Path TLV Dynamically | |||
| 5.4. Receiving an Echo Reply . . . . . . . . . . . . . . . . . 13 | 5.5.1. Procedures to Build the Return Path | |||
| 5.5. Building Reply Path TLV Dynamically . . . . . . . . . . . 13 | 6. Security Considerations | |||
| 5.5.1. The Procedures to Build the Return Path . . . . . . . 14 | 7. IANA Considerations | |||
| 6. Security Considerations . . . . . . . . . . . . . . . . . . . 15 | 7.1. Segment Sub-TLV | |||
| 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 16 | 7.2. New Registry for Segment ID Sub-TLV Flags | |||
| 7.1. Segment Sub-TLV . . . . . . . . . . . . . . . . . . . . . 16 | 7.3. Reply Path Return Codes Registry | |||
| 7.2. New Registry for Segment Sub-TLV Flags . . . . . . . . . 16 | 8. References | |||
| 7.3. Reply Path Return Codes Registry . . . . . . . . . . . . 17 | 8.1. Normative References | |||
| 8. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 17 | 8.2. Informative References | |||
| 9. Implementation Status . . . . . . . . . . . . . . . . . . . . 17 | Appendix A. Examples | |||
| 9.1. Juniper Networks . . . . . . . . . . . . . . . . . . . . 18 | A.1. Detailed Example | |||
| 10. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 18 | A.1.1. Procedures for Segment Routing LSP Ping | |||
| 11. APPENDIX . . . . . . . . . . . . . . . . . . . . . . . . . . 18 | A.1.2. Procedures for SR LSP Traceroute | |||
| 11.1. Detailed Example . . . . . . . . . . . . . . . . . . . . 19 | A.1.3. Procedures for Building Reply Path TLV Dynamically | |||
| 11.1.1. Procedures for Segment Routing LSP ping . . . . . . 19 | Acknowledgments | |||
| 11.1.2. Procedures for SR LSP traceroute . . . . . . . . . . 20 | Contributors | |||
| 11.1.3. Procedures for building Reply Path TLV | Authors' Addresses | |||
| dynamically . . . . . . . . . . . . . . . . . . . . . 23 | ||||
| 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 24 | ||||
| 12.1. Normative References . . . . . . . . . . . . . . . . . . 24 | ||||
| 12.2. Informative References . . . . . . . . . . . . . . . . . 24 | ||||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 26 | ||||
| 1. Introduction | 1. Introduction | |||
| Many network deployments have built their networks consisting of | Many network deployments have built their networks consisting of | |||
| multiple ASes either for the ease of operations or as a result of | multiple ASes either for the ease of operations or as a result of | |||
| network mergers and acquisitions. SR can be deployed in such | network mergers and acquisitions. SR can be deployed in such | |||
| scenarios to provide end-to-end paths, traversing multiple Autonomous | scenarios to provide end-to-end paths, traversing multiple Autonomous | |||
| systems (ASes). | Systems (ASes). | |||
| [RFC8660] specifies SR with an MPLS data plane. [RFC8402] describes | [RFC8660] specifies SR with an MPLS data plane. [RFC8402] describes | |||
| BGP Peering Segments, and [RFC9087] describes Centralized BGP Egress | BGP peering segments, and [RFC9087] describes centralized BGP Egress | |||
| Peer Engineering, which will help in steering packets from one AS to | Peer Engineering, which will help in steering packets from one AS to | |||
| another. By utilizing these SR capabilities, it is possible to | another. By utilizing these SR capabilities, it is possible to | |||
| create paths that span multiple ASes. | create paths that span multiple ASes. | |||
| +----------------+ | +----------------+ | |||
| | Controller/PMS | | | Controller/PMS | | |||
| +----------------+ | +----------------+ | |||
| |---AS1-----| |------AS2------| |----AS3---| | |---AS1-----| |----AS2----| |----AS3---| | |||
| ASBR2----ASBR3 ASBR5------ASBR7 | ASBR2----ASBR3 ASBR5------ASBR7 | |||
| / \ / \ | / \ / \ | |||
| / \ / \ | / \ / \ | |||
| PE1----P1---P2 P3---P4---PE4 P5---P6--PE5 | PE1----P1---P2 P3---P4---PE4 P5---P6--PE5 | |||
| \ / \ / | \ / \ / | |||
| \ / \ / | \ / \ / | |||
| ASBR1----ASBR4 ASBR6------ASBR8 | ASBR1----ASBR4 ASBR6------ASBR8 | |||
| Autonomous System: AS1, AS2, AS3 | Figure 1: Inter-AS Segment Routing Topology | |||
| Provider Edge: PE1, PE4, PE5 | ||||
| Provider: P1, P2, P3, P4, P5, P6 | ||||
| AS Boundary Router: ASBR1, ASBR2, ASBR3, ASBR4, | ||||
| ASBR5, ASBR6, ASBR7, ASBR8 | ||||
| Figure 1: Inter-AS Segment Routing Topology | Autonomous System: AS1, AS2, AS3 | |||
| Provider Edge: PE1, PE4, PE5 | ||||
| Provider: P1, P2, P3, P4, P5, P6 | ||||
| Autonomous System Boundary Router: ASBR1, ASBR2, ASBR3, ASBR4, | ||||
| 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 determine | and traceroute procedures on these inter-AS SR-MPLS paths, to detect | |||
| the actual path that traffic takes through the network. LSP ping/ | and diagnose failed deliveries, and to determine the actual path that | |||
| traceroute procedures use IP connectivity for echo reply to reach the | traffic takes through the network. LSP ping and traceroute | |||
| head-end. In inter-AS networks, IP connectivity may not be there | procedures use IP connectivity for echo replies to reach the head- | |||
| from each router in the path. For example, in Figure 1, P3 and P4 | end. In inter-AS networks, IP connectivity may not be there from | |||
| 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([RFC8287] | isolation using existing LSP ping and traceroute mechanisms (see | |||
| and [RFC8029]). That is because there might not always be IP | [RFC8287] and [RFC8029]). That is because there might not always be | |||
| connectivity from a responding node back to the source address of the | IP connectivity from a responding node back to the source address of | |||
| ping packet when the responding node is in a different AS from the | the ping packet when the responding node is in a different AS from | |||
| source of the ping. | the source of the ping. | |||
| [RFC8403] describes mechanisms to carry out MPLS ping/traceroute from | [RFC8403] describes mechanisms to carry out MPLS ping and traceroute | |||
| a Path Monitoring System (PMS). It is possible to build GRE tunnels | from a Path Monitoring System (PMS). It is possible to build GRE | |||
| or static routes to each router in the network to get IP connectivity | tunnels or static routes to each router in the network to get IP | |||
| for the reverse path. This mechanism is operationally very heavy and | connectivity for the reverse path. This mechanism is operationally | |||
| requires the PMS to be capable of building a huge number of GRE | very heavy and requires the PMS to be capable of building a huge | |||
| tunnels or installing the necessary static routes, which may not be | number of GRE tunnels or installing the necessary static routes, | |||
| feasible. | which may not be feasible. | |||
| [RFC7743] describes an Echo-relay based solution based on advertising | [RFC7743] describes an Echo-relay-based solution that is predicated | |||
| a new Relay Node Address Stack TLV containing a stack of Echo-relay | on advertising a new Relay Node Address Stack TLV containing a stack | |||
| IP addresses. These mechanisms can be applied to SR networks as | of Echo-relay IP addresses. These mechanisms can be applied to SR | |||
| well. The [RFC7743] mechanism requires the return ping packet to be | networks as well. The mechanism from [RFC7743] requires the return | |||
| processed on the slow path or as a bump-in-the-wire on every relay | ping packet to be processed on the slow path or as a bump-in-the-wire | |||
| node. The motivation of the current document is to provide an | on every relay node. The motivation of the current document is to | |||
| alternate mechanism for ping/traceroute in inter-domain SR networks. | provide an alternate mechanism for ping and traceroute in inter- | |||
| The definition of the term "domain" as applicable to this document is | domain SR networks. The definition of the term "domain" as | |||
| 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 | |||
| MPLS-capable node will be able to forward the echo-reply packet in | MPLS-capable node will be able to forward the echo-reply packet in | |||
| the fast path. The current document describes a mechanism that uses | the fast path. The current document describes a mechanism that uses | |||
| the Reply Path TLV [RFC7110] to convey the reverse path. Three new | the Reply Path TLV [RFC7110] to convey the reverse path. Three new | |||
| sub-TLVs are defined for the Reply path TLV that facilitate encoding | sub-TLVs are defined for the Reply Path TLV that facilitate encoding | |||
| SR label stack. The return path can either be derived by a smart | SR label stacks. The return path can either be derived by a smart | |||
| application or a controller that has a full topology view or end-to- | application or a controller that has a full topology view or end-to- | |||
| end view of a section of the topology. This document also proposes | end view of a section of the topology. This document also proposes | |||
| mechanisms to derive the return path dynamically during traceroute | mechanisms to derive the return path dynamically during traceroute | |||
| procedures. | procedures. | |||
| This document focuses on the inter-domain use case. The protocol | This document focuses on the inter-domain use case. The protocol | |||
| extensions described may also indicate the return path for other use | extensions described may also indicate the return path for other use | |||
| cases, which are outside the scope of this document and are not | cases, which are outside the scope of this document and are not | |||
| further detailed here. The SRv6 data plane is also not covered in | further detailed here. The SRv6 data plane is also not covered in | |||
| this document | this document. | |||
| 1.1. Definition of Domain | 1.1. Definition of Domain | |||
| In this document, the term "domain" refers to an IGP domain where | In this document, the term "domain" refers to an IGP domain where | |||
| every node is visible to every other node for the purpose of shortest | every node is visible to every other node for the purpose of shortest | |||
| path computation, implying an IGP area or level. An Autonomous | path computation, implying an IGP area or level. An Autonomous | |||
| System (AS) comprises one or more IGP domains. The procedures | System (AS) comprises one or more IGP domains. The procedures | |||
| described herein are applicable to paths constructed across multiple | described herein are applicable to paths constructed across multiple | |||
| domains, including both inter-area and inter-AS paths. These | domains, including both inter-area and inter-AS paths. These | |||
| procedures and deployment scenarios are relevant for inter-AS paths | procedures and deployment scenarios are relevant for inter-AS paths | |||
| where the participating ASes are under closely coordinating | where the participating ASes are under closely coordinating | |||
| administrations or single ownership. This document pertains to SR- | administrations or single ownership. This document pertains to SR- | |||
| MPLS networks where all nodes within each domain are SR-capable. It | MPLS networks where all nodes within each domain are SR capable. It | |||
| also applies to SR-MPLS networks where SR functions as an overlay | also applies to SR-MPLS networks where SR functions as an overlay | |||
| with SR-incapable underlay nodes. In such networks, the traceroute | with SR-incapable underlay nodes. In such networks, the traceroute | |||
| procedure is executed only on the overlay SR nodes. | procedure is executed only on the overlay SR nodes. | |||
| 1.2. Requirements Language | 1.2. 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 BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
| 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 | |||
| Reply Path TLV and its use in echo reply are equally applicable to | the Reply Path TLV and its use in echo replies are equally applicable | |||
| networks consisting of multiple IGP domains that use BGP-LU or label | to networks consisting of multiple IGP domains that use BGP-Labeled | |||
| stacking. | Unicast (BGP-LU) or label stacking. | |||
| 3. Reply Path TLV | 3. Reply Path TLV | |||
| Reply Path (RP) TLV is defined in [RFC7110]. SR networks statically | The Reply Path (RP) TLV is defined in [RFC7110]. SR networks | |||
| assign the labels to nodes and a PMS/head-end may know the entire | statically assign the labels to nodes, and a PMS/head-end may know | |||
| Link State Database (LSDB) along with assigned SIDs. The reverse | the entire Link State Database (LSDB) along with assigned SIDs. The | |||
| path can be built from the PMS/head-end by stacking segments for the | reverse path can be built from the PMS/head-end by stacking segments | |||
| reverse path. Reply Path TLV as defined in [RFC7110] is used to | for the reverse path. The Reply Path TLV as defined in [RFC7110] is | |||
| carry the return path. Reply mode 5, Reply via Specified Path is | used to carry the return path. Reply Mode 5 (Reply via Specified | |||
| defined in section 4.1 of [RFC7110]. While using the procedures | Path) is defined in Section 4.1 of [RFC7110]. While using the | |||
| described in this document, the reply mode is set to 5 (Reply via | procedures described in this document, the Reply Mode is set to 5 | |||
| Specified Path), and Reply Path TLV is included in the echo request | (Reply via Specified Path), and the Reply Path TLV is included in the | |||
| message as described in [RFC7110]. The Reply Path TLV is constructed | echo request message as described in [RFC7110]. The Reply Path TLV | |||
| as per Section 4.2 of [RFC7110]. This document defines three new | is constructed as per Section 4.2 of [RFC7110]. This document | |||
| 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 | |||
| progresses and crosses each domain. One of the ways this can be | progresses and crosses each domain. One of the ways this can be | |||
| implemented on the head-end is to acquire the entire LSDB (of all | implemented on the head-end is to acquire the entire LSDB (of all | |||
| domains) and build a return path for every node along the SR-MPLS | domains) and build a return path for every node along the SR-MPLS | |||
| path based on the knowledge of the LSDB. Another mechanism is to use | path based on the knowledge of the LSDB. Another mechanism is to use | |||
| 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 Type-A, Type-C, and | to TLVs 1, 16, and 21. This document defines the usage and | |||
| Type-D Segment sub-TLVs usage and processing when it appears in TLV | processing of the Type-A, Type-C, and Type-D Segment sub-TLVs when | |||
| 21(Reply Path TLV). If these sub-TLVs appear in TLVs 1 or 16, | they appear in TLV 21 (Reply Path TLV). If these sub-TLVs appear in | |||
| appropriate error codes MUST be returned as defined in [RFC8029]. | TLVs 1 or 16, appropriate error codes MUST be returned as defined in | |||
| [RFC8029]. | ||||
| Type-A: SID only, in the form of MPLS Label | Type-A: SID only, in the form of an MPLS label | |||
| Type-C: IPv4 Node Address with optional SID | Type-C: IPv4 Node Address with an optional SID | |||
| Type-D: IPv6 Node Address with optional SID for SR MPLS | Type-D: IPv6 Node Address with an optional SID for SR-MPLS | |||
| 4.1. Type-A: SID only, in the form of MPLS Label | 4.1. Type-A: SID Only, in the Form of an MPLS Label | |||
| The Type A Segment Sub-TLV encodes a single SID in the form of an | The Type-A Segment sub-TLV encodes a single SID in the form of an | |||
| MPLS label. The format is as follows: | MPLS label. The format is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | RESERVED | | | Flags | RESERVED | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Label | TC |S| TTL | | | Label | TC |S| TTL | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 3: Type-A Segment Sub-TLV | Figure 3: Type-A Segment Sub-TLV | |||
| where: | Where: | |||
| Type: 2 octects. Carries value TBD1(to be assigned by IANA from the | Type: 2 octets. Carries value 46 (assigned by IANA from the "Sub- | |||
| registry "Sub-TLVs for TLV Types 1, 16, and 21"). | TLVs for TLV Types 1, 16, and 21" registry). | |||
| Length: 2 octets. Carries value 8. The length value excludes the | Length: 2 octets. Carries value 8. The length value excludes the | |||
| length of the Type and Length Fields. | length of the Type and Length fields. | |||
| Flags: 1 octet of flags as defined in Section 4.4. | Flags: 1 octet of flags as defined in Section 4.4. | |||
| RESERVED: 3 octets of reserved bits. MUST be set to zero when | RESERVED: 3 octets of reserved bits. MUST be set to zero when | |||
| sending; MUST be ignored on receipt. | sending; MUST be ignored on receipt. | |||
| Label: 20 bits of label value. | Label: 20 bits of label value. | |||
| TC: 3 bits of traffic class. If the originator wants the receiver to | TC: 3 bits of Traffic Class (TC). If the originator wants the | |||
| choose the TC value, it MUST set the Traffic Class (TC) field to | receiver to choose the TC value, it MUST set the TC field to zero. | |||
| zero. | ||||
| S: 1 bit Reserved.The S bit MUST be zero upon transmission, and MUST | S: 1 bit Reserved. The S bit MUST be zero upon transmission and | |||
| be ignored upon reception. | MUST be ignored upon reception. | |||
| TTL: 1 octet of TTL. If the originator wants the receiver to choose | TTL: 1 octet of TTL. If the originator wants the receiver to choose | |||
| the TTL value, it MUST set the TTL field to 255. | the TTL value, it MUST set the TTL field to 255. | |||
| The label, TC, S, and TTL collectively referred to as SID. | The labels, TC, S, and TTL are collectively referred to as a SID. | |||
| The following applies to the Type-A Segment sub-TLV: | The following applies to the Type-A Segment sub-TLV: | |||
| The receiver MAY override the originator's values for these fields. | The receiver MAY override the originator's values for these fields. | |||
| This would be determined by local policy at the receiver. One | This would be determined by local policy at the receiver. One | |||
| possible policy would be to override the fields only if the fields | possible policy would be to override the fields only if the fields | |||
| have the default values specified above. | have the default values specified above. | |||
| 4.2. Type-C: IPv4 Node Address with Optional SID for SR-MPLS | 4.2. Type-C: IPv4 Node Address with an Optional SID for SR-MPLS | |||
| The Type-C Segment sub-TLV encodes an IPv4 node address, SR | The Type-C Segment sub-TLV encodes an IPv4 Node Address, SR | |||
| Algorithm, and an optional SID in the form of an MPLS label. The | Algorithm, and an optional SID in the form of an MPLS label. The | |||
| format is as follows: | format is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | RESERVED (MBZ) | SR Algorithm | | | Flags | RESERVED (MBZ) | SR Algorithm | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | IPv4 Node Address (4 octets) | | | IPv4 Node Address (4 octets) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | SID (optional, 4 octets) | | | SID (optional, 4 octets) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 4: Type-C Segment Sub-TLV | Figure 4: Type-C Segment Sub-TLV | |||
| where: | Where: | |||
| Type: TBD2 (to be assigned by IANA from the registry "Sub-TLVs for | Type: 47 (assigned by IANA from the "Sub-TLVs for TLV Types 1, 16, | |||
| TLV Types 1, 16, and 21"). | and 21" registry). | |||
| Length: 2 octets. Caries value 8 when no optional SID is included or | Length: 2 octets. Carries value 8 when no optional SID is included | |||
| value 12 when optional SID is included. | or value 12 when the optional SID is included. | |||
| 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 specifying SR Algorithm as described in section | SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | |||
| 3.1.1 in [RFC8402] or Flexible algorithm as defined in [RFC9350], | is present, this specifies the SR Algorithm as described in | |||
| when A-Flag as defined in Section 4.4 is present. SR Algorithm is | Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | |||
| used by the receiver to derive the Label. When A-flag is unset, this | [RFC9350]. The SR Algorithm is used by the receiver to derive the | |||
| field has no meaning and thus MUST be set to zero on transmission and | label. When the A-Flag is unset, this field has no meaning 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 (eg:loopback address). | belonging to the node (e.g., loopback address). | |||
| SID: optional: 4-octet field containing label, 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 Optional SID for SR MPLS | 4.3. Type-D: IPv6 Node Address with an Optional SID for SR-MPLS | |||
| The Type-D Segment sub-TLV encodes an IPv6 node address, SR Algorithm | The Type-D Segment sub-TLV encodes an IPv6 Node Address, SR | |||
| and an optional SID in the form of an MPLS label. The format is as | Algorithm, and an optional SID in the form of an MPLS label. The | |||
| follows: | format is as follows: | |||
| 0 1 2 3 | 0 1 2 3 | |||
| 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Type | Length | | | Type | Length | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | Flags | RESERVED(MBZ) | SR Algorithm | | | Flags | RESERVED (MBZ) | SR Algorithm | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| // IPv6 Node Address (16 octets) // | // IPv6 Node Address (16 octets) // | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | SID (optional, 4 octets) | | | SID (optional, 4 octets) | | |||
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Figure 5: Type-D Segment Sub-TLV | Figure 5: Type-D Segment Sub-TLV | |||
| where: | Where: | |||
| Type: TBD3 (to be assigned by IANA from the registry "Sub-TLVs for | Type: 48 (assigned by IANA from the "Sub-TLVs for TLV Types 1, 16, | |||
| TLV Types 1, 16, and 21"). | and 21" registry). | |||
| Length: 2 Octets. Caries value 20 when no optional SID is included | Length: 2 octets. Carries value 20 when no optional SID is included | |||
| or value 24 when optional SID is included. | or value 24 when the optional SID is included. | |||
| 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 specifying SR-Algorithm as described in section | SR Algorithm: 1 octet. When the A-Flag (as defined in Section 4.4) | |||
| 3.1.1 in [RFC8402] or Flexible algorithm as defined in [RFC9350], | is present, this specifies the SR Algorithm as described in | |||
| when A-Flag as defined in Section 4.4 is present. SR-Algorithm is | Section 3.1.1 of [RFC8402] or the Flexible Algorithm as defined in | |||
| used by the receiver to derive the label. When A-flag is unset, this | [RFC9350]. The SR Algorithm is used by the receiver to derive the | |||
| field has no meaning and thus MUST be set to zero (MBZ) on | label. When the A-Flag is unset, this field has no meaning and | |||
| transmission and ignored on receipt. | thus MUST be set to zero (MBZ) on transmission and ignored on | |||
| 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 address | The IPv6 Node Address MUST be present. It should be a stable | |||
| belonging to the node (eg:loopback address). | address belonging to the node (e.g., loopback address). | |||
| SID: optional: 4-octet field containing label, TC, S and TTL as | SID: Optional 4-octet field containing the labels TC, S, and TTL as | |||
| defined in Section 4.1. The SID is optional and specifies a 4-octet | defined in Section 4.1. When the SID field is present, it MUST be | |||
| MPLS SID containing label, TC, S, and TTL as defined in Section 4.1. | used for constructing the Reply Path. | |||
| When the SID field is present, it MUST be used for constructing the | ||||
| Reply Path. | ||||
| 4.4. Segment Flags | 4.4. Segment Flags | |||
| The Segment Types described above contain the following flags in the | The Segment Types described above contain the following flags in the | |||
| "Flags" field (codes to be assigned by IANA from the new registry | Flags field (codes assigned by IANA from the "Segment ID Sub-TLV | |||
| "Segment Sub-TLV Flags"): | Flags" registry): | |||
| 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 SR Algorithm ID in the | A-Flag: This flag indicates the presence of an SR Algorithm ID in | |||
| "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: | |||
| A-Flag applies to Segment Type-C and Type-D. If A-Flag appears with | The A-Flag applies to Segment Type-C and Type-D. If the A-Flag | |||
| 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 | |||
| This section uses the term "initiator" for the node that initiates | This section uses the term "initiator" for the node that initiates | |||
| the MPLS ping or MPLS traceroute procedure. The term "responder" is | the MPLS ping or the MPLS traceroute procedure. The term "responder" | |||
| used for the node that receives the echo request and sends the echo | is used for the node that receives the echo request and sends the | |||
| reply. The term egress node is used to identify the last node where | echo reply. The term "egress node" is used to identify the last node | |||
| the MPLS ping or traceroute is destined to. In an MPLS network any | where the MPLS ping or traceroute is destined to. In an MPLS | |||
| node can be initiator or responder or egress. | network, any node can be an initiator, responder, or egress. | |||
| 5.1. Sending an Echo Request | 5.1. Sending an Echo Request | |||
| In the inter-AS scenario, the procedures outlined in this document | In the inter-AS scenario, the procedures outlined in this document | |||
| are employed to specify the return path when IP connectivity to the | are employed to specify the return path when IP connectivity to the | |||
| initiator is unavailable. These procedures may also be utilized | initiator is unavailable. These procedures may also be utilized | |||
| regardless of the availability of IP connectivity. The LSP ping | regardless of the availability of IP connectivity. The LSP ping | |||
| initiator MUST set the Reply Mode of the echo request to 5 "Reply via | initiator MUST set the Reply Mode of the echo request to 5 (Reply via | |||
| Specified Path", and a Reply Path TLV MUST be carried in the echo | Specified Path), and a Reply Path TLV MUST be carried in the echo | |||
| request message correspondingly. The Reply Path TLV MUST contain the | request message correspondingly. The Reply Path TLV MUST contain the | |||
| SR Path in the reverse direction encoded as an ordered list of | SR Path in the reverse direction encoded as an ordered list of | |||
| segments. The first segment MUST correspond to the top segment in | segments. The first segment MUST correspond to the top segment in | |||
| 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 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. | |||
| Absence of Reply Path TLV is treated as a malformed echo request. | The absence of the Reply Path TLV is treated as a malformed echo | |||
| When an echo request is received, if the responder does not support | request. When an echo request is received, if the responder does not | |||
| the Reply Mode 5 defined in [RFC7110], an echo reply with the return | support the Reply Mode 5 defined in [RFC7110], an echo reply with the | |||
| code set to "Malformed echo request received" and the Subcode set to | Return Code set to "Malformed echo request received" and the Subcode | |||
| zero must be sent back to the initiator according to the rules of | set to zero must be sent back to the initiator according to the rules | |||
| [RFC8029]. If the echo request message contains a malformed Segment | of [RFC8029]. If the echo request message contains a malformed | |||
| sub-TLV, such as incorrect length field, an echo reply with return | Segment sub-TLV, such as an incorrect length field, an echo reply | |||
| code set to "Malformed echo request received" and the Subcode set to | must be sent back to the initiator with the Return Code set to | |||
| zero must be sent back to the initiator. | "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 FEC validation | echo reply. The responder MUST follow the normal Forwarding | |||
| procedures as described in [RFC8029] and [RFC8287] and this document | Equivalence Class (FEC) validation procedures as described in | |||
| does not suggest any change to those procedures. When the echo reply | [RFC8029] and [RFC8287] and this document does not suggest any change | |||
| has to be sent out the Reply Path TLV MUST be used to construct the | to those procedures. When the echo reply has to be sent out, the | |||
| MPLS packet to send out. | Reply Path TLV MUST be used to construct the MPLS packet to send out. | |||
| 5.3. Sending an Echo Reply | 5.3. Sending an Echo Reply | |||
| The echo reply message is sent as an MPLS packet with an MPLS label | The echo reply message is sent as an MPLS packet with an MPLS label | |||
| stack. The echo reply message MUST be constructed as described in | stack. The echo reply message MUST be constructed as described in | |||
| the [RFC8029]. An MPLS packet is constructed with an echo reply in | [RFC8029]. An MPLS packet is constructed with an echo reply in the | |||
| the payload. The top label MUST be constructed from the first | payload. The top label MUST be constructed from the first segment of | |||
| segment of the Reply Path TLV. The remaining labels MUST be | the Reply Path TLV. The remaining labels MUST be constructed by | |||
| constructed by following the order of the segments from the Reply | following the order of the segments from the Reply Path TLV. The | |||
| Path TLV. The MPLS header of the Echo Reply MUST be constructed from | MPLS header of the echo reply MUST be constructed from the segments | |||
| the segments in Reply Path TLV and MUST NOT add any other label. The | in the Reply Path TLV and MUST NOT add any other label. The S bit is | |||
| S bit is set for the bottom label as per MPLS specifications | set for the bottom label as per the MPLS specifications [RFC3032]. | |||
| [RFC3032] The responder MAY check the reachability of the top label | The responder MAY check the reachability of the top label in its own | |||
| in its own Label Forwarding Information Base (LFIB) before sending | Label Forwarding Information Base (LFIB) before sending the echo | |||
| the echo reply. If the top label is unreachable, the responder | reply. If the top label is unreachable, the responder SHOULD send | |||
| SHOULD send the appropriate return code and follow 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 may | does not have IP reachability to the originator, in which case, it | |||
| not be possible to send an Echo Reply at all. Even if sent (for | may not be possible to send an echo reply at all. Even if sent (by | |||
| example by following a default route present on the responder), 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 SID | derive the SID from available topology information. Optionally, the | |||
| 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 Node-SIDs associated with the IPv4/IPv6 addresses. | labels based on the Node-SIDs associated with the IPv4/IPv6 | |||
| If optional MPLS SID is present in the Type-C/Type-D segments SID | addresses. If an optional MPLS SID is present in the Type-C/Type-D | |||
| MUST be used to encode the echo reply with MPLS labels. If the MPLS | segments, the SID MUST be used to encode the echo reply with MPLS | |||
| SID does not match with the IPv4 or IPv6 address field in the Type-C | labels. If the MPLS SID does not match with the IPv4 or IPv6 address | |||
| or Type-D SID, log information should be generated. | field in the Type-C or Type-D SID, log information should be | |||
| 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 TBA1 and the same | be used. The Reply Path Return Code MUST be set to 0x0006, and the | |||
| Reply Path TLV or a new Reply Path TLV MUST be included in the echo | same Reply Path TLV or a new Reply Path TLV MUST be included in the | |||
| 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" (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 TTL | TLV from the echo reply MUST be sent in the next echo request with | |||
| incremented by 1. If the initiator node does not support the return | the TTL incremented by 1. If the initiator node does not support the | |||
| code "Use Reply Path TLV in the echo reply for building the next echo | Return Code "Use Reply Path TLV from this echo reply for building the | |||
| request", log information should be generated indicating the return | next echo request", log information should be generated indicating | |||
| code and the operator may choose to specify the return path | the Return Code, and the operator may choose to specify the return | |||
| explicitly or use other mechanisms to verify the SR policy. If the | path explicitly or use other mechanisms to verify the SR Policy. If | |||
| return code is TBA2, "Local policy does not allow dynamic Return Path | the Return Code is 0x0007 "Local policy does not allow dynamic return | |||
| building", it indicates that the intermediate node does not support | path building", it indicates that the intermediate node does not | |||
| 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 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 | | |||
| TBA1 Use Reply Path TLV in the echo reply | +========+=========================================+ | |||
| for building the next echo request. | | 0x0006 | Use Reply Path TLV from this echo reply | | |||
| | | for building the next echo request | | ||||
| +--------+-----------------------------------------+ | ||||
| 5.5.1. The Procedures to Build the Return Path | Table 1 | |||
| To dynamically build the return Path for the traceroute procedures, | 5.5.1. Procedures to Build the Return Path | |||
| 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. | |||
| The head-end/PMS node may include its node label while initiating the | The head-end/PMS node may include its node label while initiating the | |||
| traceroute procedure. When an Area Border Router (ABR) receives the | traceroute procedure. When an Area Border Router (ABR) receives the | |||
| echo request, if the local policy implies building a dynamic return | echo request, if the local policy implies building a dynamic return | |||
| path, ABR should include its Node label in the reply path TLV and | path, the ABR should include its node label in the Reply Path TLV and | |||
| send it in the echo reply. If there is a Reply Path TLV included in | send it in the echo reply. If there is a Reply Path TLV included in | |||
| the received echo request message, the ABR's node label is added | the received echo request message, the ABR's node label is added | |||
| before the existing segments. The type of segment added is based on | before the existing segments. The type of segment added is based on | |||
| local policy. In cases when SRGB is not uniform across the network | local policy. In cases when the Segment Routing Global Block (SRGB) | |||
| which can be inferred from the LSDB, it is RECOMMENDED to add a | is not uniform across the network, which can be inferred from the | |||
| Type-C or a Type-D segment, but implementations MAY safely use other | LSDB, it is RECOMMENDED to add a Type-C or a Type-D segment. | |||
| approaches if they see benefits in doing so. If the existing segment | However, implementations MAY safely use other approaches if they see | |||
| in the Reply Path TLV is a Type-C/Type-D segment, that segment should | benefits in doing so. If the existing segment in the Reply Path TLV | |||
| be converted to a Type-A segment based on the ABR's own SRGB. This | is a Type-C/Type-D segment, that segment should be converted to a | |||
| is because downstream nodes in the path will not know what SRGB to | Type-A segment based on the ABR's own SRGB. This is because | |||
| use to translate the IP address to a label. As the ABR added its own | downstream nodes in the path will not know what SRGB to use to | |||
| Node label, it is guaranteed that this ABR will be in the return path | translate the IP address to a label. As the ABR added its own node | |||
| and will be forwarding the traffic based on the next label after its | 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 | ||||
| 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 TBA1 MUST be set in the echo reply to indicate that the next | Code of 0x0006 MUST be set in the echo reply to indicate that the | |||
| echo request MUST use the return Path from the Reply Path TLV in the | next echo request MUST use the return path from the Reply Path TLV in | |||
| echo reply. ASBR should locally decide the outgoing interface for | the echo reply. ASBR should locally decide the outgoing interface | |||
| 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. Reply Path TLV is built by adding two segment sub TLVs. The | TLV. The Reply Path TLV is built by adding two Segment sub-TLVs. | |||
| top segment sub TLV consists of the ASBR's Node SID and the second | The top Segment sub-TLV consists of the ASBR's Node-SID, and the | |||
| segment consists of the EPE-SID in the reverse direction to reach the | second segment consists of the EPE-SID in the reverse direction to | |||
| AS from which the OAM packet was received. The type of segment | reach the AS from which the OAM packet was received. The type of | |||
| chosen to build Reply Path TLV is a local policy. It is recommended | segment chosen to build the Reply Path TLV is a local policy. It is | |||
| to use the Type-C/Type-D segment for the top segment when the SRGB is | recommended to use the Type-C/Type-D segment for the top segment when | |||
| not guaranteed to be uniform in the domain. | the SRGB is not guaranteed to be uniform in the domain. | |||
| Irrespective of which type of segment is included in the Reply Path | Irrespective of which type of segment is included in the Reply Path | |||
| TLV, the responder to the echo requests MUST always translate the | TLV, the responder to the echo requests MUST always translate the | |||
| 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 TBA1 and send the newly constructed Reply Path TLV in | Return Code to 0x0006 and send the newly constructed Reply Path TLV | |||
| 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 TBA1 in the echo reply message as there is no | Path TLV Return Code to 0x0006 in the echo reply message as there is | |||
| 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 TBA2 to indicate local policies do not allow the | the Return Code to 0x0007 to indicate that local policies do not | |||
| dynamic return path building. | allow the dynamic return path building. | |||
| Value Meaning | +========+==========================================================+ | |||
| ------ --------------------------------------------------- | | Value | Meaning | | |||
| TBA2 Local policy does not allow dynamic Return Path | +========+==========================================================+ | |||
| building. | | 0x0007 | Local policy does not allow | | |||
| | | dynamic return path building | | ||||
| +--------+----------------------------------------------------------+ | ||||
| Table 2 | ||||
| 6. Security Considerations | 6. Security Considerations | |||
| The procedures described in this document enable LSP ping and | The procedures described in this document enable LSP ping and | |||
| traceroute to be executed across multiple IGP domains or multiple | traceroute procedures to be executed across multiple IGP domains or | |||
| ASes that belong to the same administration or closely cooperating | multiple ASes that belong to the same administration or closely | |||
| administrations. It is assumed that sharing domain internal | cooperating administrations. It is assumed that sharing domain | |||
| information across such domains does not pose a security risk. | internal information across such domains does not pose a security | |||
| However, procedures described in this document may be used by an | risk. However, the procedures described in this document may be used | |||
| attacker to extract the domain's internal information. An operator | by an attacker to extract the domain's internal information. An | |||
| MUST deploy appropriate filter policies as described in [RFC8029] to | operator MUST deploy appropriate filter policies as described in | |||
| restrict the LSP ping/traceroute packets based on origin. It is also | [RFC8029] to restrict the LSP ping and traceroute packets based on | |||
| RECOMMENDED that an operator deploy security mechanisms such as | origin. It is also RECOMMENDED that an operator deploy security | |||
| MACsec [IEEE-802.1AE] on inter-domain links or security-vulnerable | mechanisms such as Media Access Control Security (MACsec) | |||
| links to prevent spoofing attacks. | [IEEE-802.1AE] on inter-domain links or security-vulnerable links to | |||
| prevent spoofing attacks. | ||||
| All the security considerations defined in [RFC8029] will be | All the security considerations defined in [RFC8029] will be | |||
| applicable for this document. Appropriate filter policies SHOULD be | applicable for this document. Appropriate filter policies SHOULD be | |||
| applied at the edges to prevent attackers from getting into the | applied at the edges to prevent attackers from getting into the | |||
| network. In the event of such a security breach, the network devices | network. In the event of such a security breach, the network devices | |||
| MUST have mechanisms to prevent Denial-of-service attacks as | MUST have mechanisms to prevent denial-of-service attacks as | |||
| described in [RFC8029]. | described in [RFC8029]. | |||
| 7. IANA Considerations | 7. IANA Considerations | |||
| 7.1. Segment Sub-TLV | 7.1. Segment Sub-TLV | |||
| IANA should assign three new sub-TLVs from the "sub-TLVs for TLV | IANA has assigned three new sub-TLVs from the "Sub-TLVs for TLV Types | |||
| Types 1, 16, and 21" sub-registry of the "Multiprotocol Label | 1, 16, and 21" registry of the "Multiprotocol Label Switching (MPLS) | |||
| Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" | Label Switched Paths (LSPs) Ping Parameters" registry group. | |||
| registry. | ||||
| Sub-Type Sub-TLV Name Reference | +==========+=====================================+=============+ | |||
| -------- ----------------- ------------ | | Sub-Type | Sub-TLV Name | Reference | | |||
| TBD1 SID only in the form of MPLS Section 4.1 | +==========+=====================================+=============+ | |||
| label of this document | | 46 | SID only, in the form of MPLS label | Section 4.1 | | |||
| TBD2 IPv4 Node Address with Section 4.2 | | | | of RFC 9716 | | |||
| optional SID for SR-MPLS of this document | +----------+-------------------------------------+-------------+ | |||
| TBD3 IPv6 Node Address with Section 4.3 | | 47 | IPv4 Node Address with an optional | Section 4.2 | | |||
| optional SID for SR-MPLS of this document | | | SID for SR-MPLS | of RFC 9716 | | |||
| +----------+-------------------------------------+-------------+ | ||||
| | 48 | IPv6 Node Address with an optional | Section 4.3 | | ||||
| | | SID for SR-MPLS | of RFC 9716 | | ||||
| +----------+-------------------------------------+-------------+ | ||||
| The allocation of code points for the segment sub-TLVs should be done | Table 3 | |||
| from the Standards Action range (0-16383) | ||||
| 7.2. New Registry for Segment Sub-TLV Flags | The code points for the Segment sub-TLVs have been registered in the | |||
| Standards Action range (0-16383). | ||||
| IANA should create a new "Segment ID Sub-TLV flags" (see | 7.2. New Registry for Segment ID Sub-TLV Flags | |||
| Section Section 4.4) registry under the "Multiprotocol Label | ||||
| Switching (MPLS) Label Switched Paths (LSPs) Ping Parameters" | IANA has created a new "Segment ID Sub-TLV Flags" registry (see | |||
| registry. | Section 4.4) under the "Multiprotocol Label Switching (MPLS) Label | |||
| 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 (most significant | TLV flags field. The flags are numbered from 0 (the most significant | |||
| bit, 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 this document | | 1 | A-Flag | Section 4.4 of RFC 9716 | | |||
| +------------+--------+-------------------------+ | ||||
| Table 4 | ||||
| 7.3. Reply Path Return Codes Registry | 7.3. Reply Path Return Codes Registry | |||
| IANA should assign 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. | Switched Paths (LSPs) Ping Parameters" registry group. | |||
| Value Meaning Reference | +========+=========================================+===========+ | |||
| -------- ----------------- ------------ | | Value | Meaning | Reference | | |||
| TBA1 Use Reply Path TLV This document | +========+=========================================+===========+ | |||
| from this echo reply | | 0x0006 | Use Reply Path TLV from this echo reply | RFC 9716 | | |||
| for building next | | | for building the next echo request | | | |||
| echo request. | +--------+-----------------------------------------+-----------+ | |||
| | 0x0007 | Local policy does not allow dynamic | RFC 9716 | | ||||
| | | return path building | | | ||||
| +--------+-----------------------------------------+-----------+ | ||||
| TBA2 Local policy does This document | Table 5 | |||
| not allow dynamic | ||||
| return Path building. | ||||
| The return codes should be assigned from the Standards Action range | The Return Codes have been assigned in the Standards Action range | |||
| (0x0000-0xFFFB). | (0x0000-0xFFFB). | |||
| 8. Contributors | 8. References | |||
| Carlos Pignataro | 8.1. Normative References | |||
| NC State University | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, | ||||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| cpignata@gmail.com | [RFC7110] Chen, M., Cao, W., Ning, S., Jounay, F., and S. Delord, | |||
| "Return Path Specified Label Switched Path (LSP) Ping", | ||||
| RFC 7110, DOI 10.17487/RFC7110, January 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7110>. | ||||
| Zafar Ali | [RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N., | |||
| Aldrin, S., and M. Chen, "Detecting Multiprotocol Label | ||||
| Switched (MPLS) Data-Plane Failures", RFC 8029, | ||||
| DOI 10.17487/RFC8029, March 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8029>. | ||||
| Cisco Systems, Inc. | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| zali@cisco.com | [RFC8287] Kumar, N., Ed., Pignataro, C., Ed., Swallow, G., Akiya, | |||
| N., Kini, S., and M. Chen, "Label Switched Path (LSP) | ||||
| Ping/Traceroute for Segment Routing (SR) IGP-Prefix and | ||||
| IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data | ||||
| Planes", RFC 8287, DOI 10.17487/RFC8287, December 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8287>. | ||||
| 9. Implementation Status | 8.2. Informative References | |||
| This section is to be removed before publishing as an RFC. | [IEEE-802.1AE] | |||
| IEEE, "IEEE Standard for Local and metropolitan area | ||||
| networks-Media Access Control (MAC) Security", IEEE Std | ||||
| 8021.AE-2018, DOI 10.1109/IEEESTD.2018.8585421, December | ||||
| 2018, <https://ieeexplore.ieee.org/document/8585421>. | ||||
| RFC-Editor: Please clean up the references cited by this section | [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., | |||
| before publication. | Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack | |||
| Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, | ||||
| <https://www.rfc-editor.org/info/rfc3032>. | ||||
| This section records the status of known implementations of the | [RFC7743] Luo, J., Ed., Jin, L., Ed., Nadeau, T., Ed., and G. | |||
| protocol defined by this specification at the time of posting of this | Swallow, Ed., "Relayed Echo Reply Mechanism for Label | |||
| Internet-Draft, and is based on a proposal described in [RFC7942]. | Switched Path (LSP) Ping", RFC 7743, DOI 10.17487/RFC7743, | |||
| The description of implementations in this section is intended to | January 2016, <https://www.rfc-editor.org/info/rfc7743>. | |||
| assist the IETF in its decision processes in progressing drafts to | ||||
| RFCs. Please note that the listing of any individual implementation | ||||
| here does not imply endorsement by the IETF. Furthermore, no effort | ||||
| has been spent to verify the information presented here that was | ||||
| supplied by IETF contributors. This is not intended as, and must not | ||||
| be construed to be, a catalog of available implementations or their | ||||
| features. Readers are advised to note that other implementations may | ||||
| exist. | ||||
| 9.1. Juniper Networks | [RFC8277] Rosen, E., "Using BGP to Bind MPLS Labels to Address | |||
| Prefixes", RFC 8277, DOI 10.17487/RFC8277, October 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8277>. | ||||
| Organization: Juniper Networks | [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | |||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
| Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | ||||
| July 2018, <https://www.rfc-editor.org/info/rfc8402>. | ||||
| Implementation: JUNOS. | [RFC8403] Geib, R., Ed., Filsfils, C., Pignataro, C., Ed., and N. | |||
| Kumar, "A Scalable and Topology-Aware MPLS Data-Plane | ||||
| Monitoring System", RFC 8403, DOI 10.17487/RFC8403, July | ||||
| 2018, <https://www.rfc-editor.org/info/rfc8403>. | ||||
| Description: Implementation for sending Return path TLV with Type-A | [RFC8604] Filsfils, C., Ed., Previdi, S., Dawra, G., Ed., | |||
| segment subTLV | Henderickx, W., and D. Cooper, "Interconnecting Millions | |||
| of Endpoints with Segment Routing", RFC 8604, | ||||
| DOI 10.17487/RFC8604, June 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8604>. | ||||
| Maturity Level: Prototype | [RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., | |||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
| Routing with the MPLS Data Plane", RFC 8660, | ||||
| DOI 10.17487/RFC8660, December 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8660>. | ||||
| Coverage: Partial. Type-A SIDs in Return Path TLV | [RFC9086] Previdi, S., Talaulikar, K., Ed., Filsfils, C., Patel, K., | |||
| Ray, S., and J. Dong, "Border Gateway Protocol - Link | ||||
| State (BGP-LS) Extensions for Segment Routing BGP Egress | ||||
| Peer Engineering", RFC 9086, DOI 10.17487/RFC9086, August | ||||
| 2021, <https://www.rfc-editor.org/info/rfc9086>. | ||||
| Contact: shraddha@juniper.net | [RFC9087] Filsfils, C., Ed., Previdi, S., Dawra, G., Ed., Aries, E., | |||
| and D. Afanasiev, "Segment Routing Centralized BGP Egress | ||||
| Peer Engineering", RFC 9087, DOI 10.17487/RFC9087, August | ||||
| 2021, <https://www.rfc-editor.org/info/rfc9087>. | ||||
| 10. Acknowledgments | [RFC9256] Filsfils, C., Talaulikar, K., Ed., Voyer, D., Bogdanov, | |||
| A., and P. Mattes, "Segment Routing Policy Architecture", | ||||
| RFC 9256, DOI 10.17487/RFC9256, July 2022, | ||||
| <https://www.rfc-editor.org/info/rfc9256>. | ||||
| Thanks to Bruno Decraene for suggesting the use of generic Segment | [RFC9350] Psenak, P., Ed., Hegde, S., Filsfils, C., Talaulikar, K., | |||
| sub-TLV. Thanks to Adrian Farrel, Huub van Helvoort, Dhruv Dhody, | and A. Gulko, "IGP Flexible Algorithm", RFC 9350, | |||
| Dongjie, for careful review and comments. Thanks to Mach Chen for | DOI 10.17487/RFC9350, February 2023, | |||
| suggesting the use of Reply Path TLV. Thanks to Gregory Mirsky for | <https://www.rfc-editor.org/info/rfc9350>. | |||
| the detailed review which helped improve the readability of the | ||||
| document to a great extent. | ||||
| 11. APPENDIX | [RFC9552] Talaulikar, K., Ed., "Distribution of Link-State and | |||
| Traffic Engineering Information Using BGP", RFC 9552, | ||||
| DOI 10.17487/RFC9552, December 2023, | ||||
| <https://www.rfc-editor.org/info/rfc9552>. | ||||
| Appendix A. Examples | ||||
| This section elaborates examples of the inter-domain ping and | This section elaborates examples of the inter-domain ping and | |||
| Traceroute procedures described in this document. | traceroute procedures described in this document. | |||
| 11.1. Detailed Example | A.1. Detailed Example | |||
| 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/ISIS are used to flood | AS1 and AS2 have SR enabled. IGPs like OSPF/IS-IS are used to flood | |||
| SIDs in each AS. The ASBR1, ASBR2, ASBR3,and ASBR4 advertise BGP | SIDs in each AS. ASBR1, ASBR2, ASBR3, and ASBR4 advertise BGP EPE- | |||
| EPE-SIDs for the inter-AS links. Topology 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 head- | advertised via BGP - Link State (BGP-LS) to the controller, PMS, or | |||
| end node. The EPE-SIDs are also advertised via BGP-LS as described | head-end node. The EPE-SIDs are also advertised via BGP-LS as | |||
| in [RFC9086]. The example uses EPE-SIDs for the inter-AS links but | described in [RFC9086]. The example uses EPE-SIDs for the inter-AS | |||
| the same could be achieved using adjacency-SIDs advertised for a | links, but the same could be achieved using Adjacency-SIDs advertised | |||
| passive IGP link. | for a passive IGP link. | |||
| The description in the document uses below notations for Segment | The description in this document uses the notations below for SIDs. | |||
| Identifiers (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. | |||
| EPE-SIDs: EPE-ASBR2-ASBR3, EPE-ASBR1-ASBR4, EPE-ASBR3-ASBR2 etc. | EPE-SIDs: EPE-ASBR2-ASBR3, EPE-ASBR1-ASBR4, EPE-ASBR3-ASBR2, etc. | |||
| 11.1.1. Procedures for Segment Routing LSP ping | A.1.1. Procedures for Segment Routing LSP Ping | |||
| Consider an SR-MPLS path from PE1 to PE4 consisting of a label stack | Consider an SR-MPLS path from PE1 to PE4 consisting of a label stack | |||
| [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4] from Figure 1. In order to | [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4] from Figure 1. In order to | |||
| perform MPLS ping procedures on this path, the remote end (PE4) needs | perform MPLS ping procedures on this path, the remote end (PE4) needs | |||
| IP connectivity to head-end PE1, for the echo reply to travel back to | IP connectivity to head-end PE1 for the echo reply to travel back to | |||
| PE1. In a deployment that uses a controller-computed inter-domain | PE1. In a deployment that uses a controller-computed inter-domain | |||
| path, there may be no IP connectivity from PE4 to PE1 as they lie in | path, there may be no IP connectivity from PE4 to PE1 as they lie in | |||
| different ASes. | different ASes. | |||
| PE1 sends an echo request message to the endpoint PE4 along the path | PE1 sends an echo request message to the endpoint PE4 along the path | |||
| that consists of label stacks [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, | that consists of label stacks [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, | |||
| N-PE4]. PE1 adds the return path from PE4 to PE1 in the echo request | N-PE4]. PE1 adds the return path from PE4 to PE1 in the echo request | |||
| message in the Reply Path TLV. As an example, the Reply Path TLV for | message in the Reply Path TLV. As an example, the Reply Path TLV for | |||
| PE1 to PE4 for LSP ping is [N-ASBR4, EPE-ASBR4-ASBR1, N-PE1]. This | PE1 to PE4 for LSP ping is [N-ASBR4, EPE-ASBR4-ASBR1, N-PE1]. This | |||
| example path provides the entire return path up to the head-end node | example path provides the entire return path up to the head-end node | |||
| PE1. The mechanism used to construct the return path is | PE1. The mechanism used to construct the return path is | |||
| implementation-dependent. | implementation dependent. | |||
| An implementation may also build a return Path consisting of labels | An implementation may also build a return path consisting of labels | |||
| to reach its own AS. Once the label stack is popped off, the echo | to reach its own AS. Once the label stack is popped off, the echo | |||
| reply message will be exposed. The further packet forwarding will be | reply message will be exposed. The further packet forwarding will be | |||
| based on IP lookup. An example return Path for this case could be | based on IP lookup. An example return path for this case could be | |||
| [N-ASBR4, EPE-ASBR4-ASBR1]. | [N-ASBR4, EPE-ASBR4-ASBR1]. | |||
| On receiving an MPLS echo request, PE4 first validates FEC in the | On receiving an MPLS echo request, PE4 first validates the FEC in the | |||
| echo request. PE4 then builds a label stack to send the response | echo request. PE4 then builds a label stack to send the response | |||
| from PE4 to PE1 by copying the labels from the Reply Path TLV. PE4 | from PE4 to PE1 by copying the labels from the Reply Path TLV. PE4 | |||
| builds the echo reply packet with the MPLS label stack constructed | builds the echo reply packet with the MPLS label stack constructed, | |||
| and imposes MPLS headers on top of the echo reply packet and sends | imposes MPLS headers on top of the echo reply packet, and sends out | |||
| out the packet to PE1. This segment List stack can successfully | the packet to PE1. This segment list stack can successfully steer | |||
| steer the reply back to the head-end node (PE1). | the reply back to the head-end node (PE1). | |||
| Let us consider a case when P3 node does not have a route to reach | Let us consider a case when the P3 node does not have a route to | |||
| N-PE4. On P3 ping packet would be dropped and the head-end node | reach N-PE4. On P3, a ping packet would be dropped, and the head-end | |||
| (PE1) will not receive Echo Reply indicating failure. | node (PE1) will not receive an echo reply indicating failure. | |||
| 11.1.2. Procedures for SR LSP traceroute | A.1.2. Procedures for SR LSP Traceroute | |||
| 11.1.2.1. Procedures for SR LSP traceroute with the Same SRGB on All | A.1.2.1. Procedures for SR LSP Traceroute with the Same SRGB on All | |||
| Nodes | Nodes | |||
| The traceroute procedure involves visiting every node on the path and | The traceroute procedure involves visiting every node on the path and | |||
| obtaining echo replies from every node. In this section, we describe | obtaining echo replies from every node. In this section, we describe | |||
| the traceroute mechanisms when the head-end/PMS has complete | the traceroute mechanisms when the head-end/PMS has complete | |||
| visibility of the LSDB. The head-end/PMS computes the return path | visibility of the LSDB. The head-end/PMS computes the return path | |||
| from each node in the entire SR-MPLS path that is being tracerouted. | from each node in the entire SR-MPLS path that is being tracerouted. | |||
| The return path computation is implementation-dependent. As the | The return path computation is implementation dependent. As the | |||
| head-end/PMS completely controls the return path, it can use | head-end/PMS completely controls the return path, it can use | |||
| proprietary computations to build the return path. | proprietary computations to build the return path. | |||
| One of the ways the return path can be built is to use the principle | One of the ways the return path can be built is to use the principle | |||
| of building label stacks by adding each domain border node's Node-SID | of building label stacks by adding each domain border node's Node-SID | |||
| on the return path label stack as the traceroute progresses. For | on the return path label stack as the traceroute progresses. For | |||
| inter-AS networks, in addition to the border node's Node-SID, EPE-SID | inter-AS networks, in addition to the border node's Node-SID, the | |||
| in the reverse direction also needs to be added to the label stack. | EPE-SID in the reverse direction also needs to be added to the label | |||
| stack. | ||||
| The Inter-domain/inter-AS traceroute procedure uses the TTL expiry | The inter-domain/inter-AS traceroute procedure uses the TTL expiry | |||
| mechanism as specified in [RFC8029] and [RFC8287]. Every echo | mechanism as specified in [RFC8029] and [RFC8287]. Every echo | |||
| request packet head-end/PMS will include the appropriate return path | request packet head-end/PMS will include the appropriate return path | |||
| in the Reply Path TLV. The node that receives the echo request will | in the Reply Path TLV. The node that receives the echo request will | |||
| follow procedures described in Section 5.1 and Section 5.2 to send | follow procedures described in Sections 5.1 and 5.2 to send out an | |||
| out an echo reply. | echo reply. | |||
| For Example: | For example: | |||
| Let us consider a topology from Figure 1. Let us consider an SR-MPLS | Let us consider the topology from Figure 1. Let us consider an SR- | |||
| path [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4]. The traceroute is | MPLS path [N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4]. The traceroute is | |||
| being executed for this inter-AS path for destination PE4. PE1 sends | being executed for this inter-AS path for destination PE4. PE1 sends | |||
| the first echo request with TTL set to 1 and includes a Reply Path | the first echo request with the TTL set to 1 and includes a Reply | |||
| TLV consisting of a Type-A segment containing a label derived from | Path TLV consisting of a Type-A segment containing a label derived | |||
| its own SR Global Block (SRGB). Note that the type of segment used | from its own SRGB. Note that the type of segment used in | |||
| in constructing the return Path is determined by local policy. If | constructing the return path is determined by local policy. If the | |||
| the entire network has the same SRGB configured, Type-A segments can | entire network has the same SRGB configured, Type-A segments can be | |||
| be used. The TTL expires on P1 and P1 sends an echo reply using the | used. The TTL expires on P1, and P1 sends an echo reply using the | |||
| return path. Note that implementations may choose to exclude the | return path. Note that implementations may choose to exclude the | |||
| Reply Path TLV until the traceroute reaches the first domain border | Reply Path TLV until the traceroute reaches the first domain border | |||
| as the return IP path to PE1 is expected to be available inside the | as the return IP path to PE1 is expected to be available inside the | |||
| first domain. | first domain. | |||
| The TTL is set to 2 and the next the echo request is sent out. Until | The TTL is set to 2, and the next echo request is sent out. Until | |||
| the traceroute procedure reaches the domain border node ASBR1, the | the traceroute procedure reaches the domain border node ASBR1, the | |||
| same return path TLV consisting of a single Label (PE1's node Label) | same return path TLV consisting of a single label (PE1's node label) | |||
| is used. When an echo request reaches the border node ASBR1, and an | is used. When an echo request reaches the border node ASBR1, and an | |||
| echo reply is received from ASBR1, the next echo request needs to | echo reply is received from ASBR1, the next echo request needs to | |||
| include an additional label as ASBR1 is a border node. The head-end | include an additional label as ASBR1 is a border node. The head-end | |||
| node has complete visibility of the network LSDB learned via BGP-LS | node has complete visibility of the network LSDB learned via BGP-LS | |||
| [RFC9552] and [RFC9086] and can derive the details of Autonomous | (see [RFC9552] and [RFC9086]) and can derive the details of ASBR | |||
| System Boundary Router (ASBR) nodes. The Reply Path TLV is built | nodes. The Reply Path TLV is built based on the forward path. As | |||
| based on the forward path. As the forward path consists of EPE- | the forward path consists of EPE-ASBR1-ASBR4, an EPE-SID in the | |||
| ASBR1-ASBR4, an EPE-SID in the reverse direction is included in the | reverse direction is included in the Reply Path TLV. The return path | |||
| Reply Path TLV. The return path now consists of two labels [EPE- | now consists of two labels: [EPE-ASBR4-ASBR1, N-PE1]. The echo reply | |||
| ASBR4-ASBR1, N-PE1]. The echo reply from ASBR4 will use this return | from ASBR4 will use this return path to send the reply. | |||
| path to send the reply. | ||||
| The next echo request after visiting the border node ASBR4 will | After visiting the border node ASBR4, the next echo request will | |||
| update the return path with the Node-SID label of ASBR4. The return | update the return path with the Node-SID label of ASBR4. The return | |||
| path beyond ASBR4 will be [N-ASBR4, EPE-ASBR4-ASBR1, N-PE1]. This | path beyond ASBR4 will be [N-ASBR4, EPE-ASBR4-ASBR1, N-PE1]. This | |||
| same return path is used until the traceroute procedure reaches the | same return path is used until the traceroute procedure reaches the | |||
| next set of border nodes. When there are multiple ASes the | next set of border nodes. When there are multiple ASes, the | |||
| traceroute procedure will continue by adding a set of Node-SIDs and | traceroute procedure will continue by adding a set of Node-SIDs and | |||
| EPE-SIDs as the border nodes are visited. | EPE-SIDs as the border nodes are visited. | |||
| Note that the above return path-building procedure requires the LSDB | Note that the above return path building procedure requires the LSDB | |||
| of all the domains to be available at the head-end/PMS. | of all the domains to be available at the head-end/PMS. | |||
| Let us consider a case when P3 node does not have a route to reach | Let us consider a case when the P3 node does not have a route to | |||
| N-PE4. When TTL of the packet is 5, the packet reaches P3 and the | reach N-PE4. When the TTL of the packet is 5, the packet reaches P3, | |||
| packet TTL becomes zero and the packet is sent to the control plane. | its TTL becomes zero, and it is sent to the control plane. The FEC | |||
| The FEC validation Procedures are executed and the Echo Reply is sent | validation procedures are executed, and the echo reply is sent using | |||
| using the labels in Reply Path TLV which is [N-PE1, EPE-ASBR4-ASBR1, | the labels in the Reply Path TLV, which is [N-PE1, EPE-ASBR4-ASBR1, | |||
| N-ASBR4]. Head-end PE1 increases the TTL to 6 and sends next Echo | N-ASBR4]. The head-end PE1 increases the TTL to 6 and sends the next | |||
| Request. The packet is dropped at P3 as there is no route on P3 to | echo request. The packet is dropped at P3 as there is no route on P3 | |||
| forward to N-PE4. Traceroute identifies the path [N-P1, N-ASBR1, | to forward to N-PE4. The traceroute identifies that the path [N-P1, | |||
| EPE-ASBR1-ASBR4, N-PE4] is broken at P3. | N-ASBR1, EPE-ASBR1-ASBR4, N-PE4] is broken at P3. | |||
| 11.1.2.2. Procedures for SR LSP Traceroute with the Different SRGBs | A.1.2.2. Procedures for SR LSP Traceroute with Different SRGBs | |||
| Section 11.1.2.1 assumes the same SRGB is configured on all nodes | Appendix A.1.2.1 assumes the same SRGB is configured on all nodes | |||
| along the path. The SRGB may differ from one node to another node | along the path. The SRGB may differ from one node to another node, | |||
| and the SR architecture [RFC8402] allows the nodes to use different | and the SR architecture [RFC8402] allows the nodes to use different | |||
| SRGBs. In such scenarios, PE1 finds out the difference in SRGB by | SRGBs. In such scenarios, PE1 finds out the difference in the SRGB | |||
| looking into the LSDB and sends Type-C (or Type-D in the case of IPv6 | by looking into the LSDB. Then, it sends the Type-C segment (or the | |||
| networks) segment with the node address of PE1 and with optional MPLS | Type-D segment, in the case of IPv6 networks) with the node address | |||
| SID associated with the node address. The receiving node derives the | of PE1 and with an optional MPLS SID associated with the node | |||
| label for the return path based on its own SRGB. When the traceroute | address. The receiving node derives the label for the return path | |||
| procedure crosses the border ASBR1, head-end PE1 should send a Type-A | based on its own SRGB. When the traceroute procedure crosses the | |||
| segment for N-PE1 based on the label derived from ASBR1's SRGB. This | border ASBR1, head-end PE1 should send a Type-A segment for N-PE1 | |||
| is required because, ASBR4, P3, P4, etc. may not have the topology | based on the label derived from ASBR1's SRGB. This is required | |||
| information to derive SRGB for PE1. After the traceroute procedure | because ASBR4, P3, P4, etc. may not have the topology information to | |||
| reaches ASBR4 the return path will be [N-PE1 (Type-A with label based | derive SRGB for PE1. After the traceroute procedure reaches ASBR4, | |||
| on ASBR1's SRGB), EPE-ASBR4-ASBR1, N-ASBR4 (Type-C)]. | the return path will be [N-PE1 (Type-A with the label based on | |||
| ASBR1's SRGB), EPE-ASBR4-ASBR1, N-ASBR4 (Type-C)]. | ||||
| If the packet needs to follow 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 | (as defined in [RFC9350]), a Type-C Segment sub-TLV with a | |||
| corresponding algorithm field set should be used. A-flag should be | corresponding algorithm field set should be used. The A-Flag should | |||
| set to indicate that the SID corresponding to the algorithm should be | be set to indicate that the SID corresponding to the algorithm should | |||
| used. | be used. | |||
| To extend the example to 3 or more ASes, let us consider a traceroute | To extend the example to three or more ASes, let us consider a | |||
| from PE1 to PE5 in Figure 1. In this example, the PE1 to PE5 path | traceroute from PE1 to PE5 in Figure 1. In this example, the PE1 to | |||
| has to cross 3 domains AS1, AS2, and AS3. Let us consider a path | PE5 path has to cross three domains: AS1, AS2, and AS3. Let us | |||
| from PE1 to PE5 that goes through [PE1, ASBR1, ASBR4, ASBR6, ASBR8, | consider a path from PE1 to PE5 that goes through [PE1, ASBR1, ASBR4, | |||
| PE5]. When the traceroute procedure is visiting the nodes in AS1, | ASBR6, ASBR8, PE5]. When the traceroute procedure is visiting the | |||
| the Reply Path TLV sent from the head-end consists of [N-PE1]. When | nodes in AS1, the Reply Path TLV sent from the head-end consists of | |||
| the traceroute procedure reaches the ASBR4, the return Path consists | [N-PE1]. When the traceroute procedure reaches the ASBR4, the return | |||
| of [N-PE1, EPE-ASBR4-ASBR1]. While visiting nodes in AS2, the | path consists of [N-PE1, EPE-ASBR4-ASBR1]. While visiting nodes in | |||
| traceroute procedure consists of Reply Path TLV [N-PE1, EPE- | AS2, the traceroute procedure consists of the Reply Path TLV [N-PE1, | |||
| ASBR4-ASBR1, N-ASBR4]. Similarly, while visiting ASBR8, the EPE-SID | EPE-ASBR4-ASBR1, N-ASBR4]. Similarly, while visiting ASBR8, the EPE- | |||
| from ASBR8 to ASBR6 is added to the Reply Path TLV. While visiting | SID from ASBR8 to ASBR6 is added to the Reply Path TLV. While | |||
| nodes in AS3, the Node-SID of ASBR8 would also be added which makes | visiting nodes in AS3, the Node-SID of ASBR8 would also be added, | |||
| the return Path [N-PE1, EPE-ASBR4-ASBR1, N-ASBR4, EPE-ASBR8-ASBR6, | which makes the return path [N-PE1, EPE-ASBR4-ASBR1, N-ASBR4, EPE- | |||
| N-ASBR8] | ASBR8-ASBR6, N-ASBR8]. | |||
| Let us consider another example from topology Figure 2. This | ||||
| Let us consider another example from the topology in Figure 2. This | ||||
| 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 multiple instances of IGP deployed on the same | multi-level IGP or with multiple instances of IGP deployed on the | |||
| node. The return path computation for this topology is similar to | same node. The return path computation for this topology is similar | |||
| the 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. | |||
| 11.1.3. Procedures for building Reply Path TLV dynamically | A.1.3. Procedures for Building Reply Path TLV Dynamically | |||
| Let us consider a 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 label stack, N-P1, | Policy path built from PE1 to PE4 with the following label stack: | |||
| N-ASBR1, EPE-ASBR1-ASBR4, N-PE4. PE1 begins traceroute with the TTL | N-P1, N-ASBR1, EPE-ASBR1-ASBR4, N-PE4. PE1 begins traceroute | |||
| set to 1 and includes [N-PE1] in the Reply Path TLV. The traceroute | procedures with the TTL set to 1 and includes [N-PE1] in the Reply | |||
| packet TTL expires on P1 and P1 processes the traceroute as per the | Path TLV. The traceroute packet TTL expires on P1, and P1 processes | |||
| procedures described in [RFC8029] and [RFC8287]. P1 sends an echo | the traceroute as per the procedures described in [RFC8029] and | |||
| reply with the same Reply Path TLV with the reply path return code | [RFC8287]. P1 sends an echo reply with the same Reply Path TLV with | |||
| set to 6. The return code of the echo reply itself is set to the | the Reply Path Return Code set to 6. The Return Code of the echo | |||
| return code as per [RFC8029] and [RFC8287]. This traceroute doesn't | reply itself is set to the Return Code as per [RFC8029] and | |||
| need any changes to the Reply Path TLV till it leaves AS1. The same | [RFC8287]. This traceroute doesn't need any changes to the Reply | |||
| Reply Path TLV that is received may be included in the echo reply by | Path TLV until it leaves AS1. The same Reply Path TLV that is | |||
| P1 and P2 or no Reply Path TLV included so that head-end continues to | received may be included in the echo reply by P1 and P2, or no Reply | |||
| use the same return path in the echo request that it used to send the | Path TLV is included so that the head-end continues to use the same | |||
| previous echo request. | return path in the echo request that it used to send the previous | |||
| 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 TBA1. Then PE1 should use this | and set the Reply Path Return Code to 0x0006. Then, PE1 should use | |||
| Reply Path TLV in subsequent echo requests. In this example, when | this Reply Path TLV in subsequent echo requests. In this example, | |||
| the subsequent echo request reaches P3, it should use this Reply Path | when the subsequent echo request reaches P3, it should use this Reply | |||
| 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. Because the | sufficient for any router in AS2 to send the reply. This is because | |||
| first label(N-ASBR4) can direct echo reply to ASBR4 and the second | the first label (N-ASBR4) can direct the echo reply to ASBR4 and the | |||
| one (EPE-ASBR4-ASBR1) to direct echo reply to AS1. Once the echo | second one (EPE-ASBR4-ASBR1) can direct the echo reply to AS1. Once | |||
| reply reaches AS1, normal IP forwarding or the N-PE1 helps it to | the echo reply reaches AS1, normal IP forwarding or the N-PE1 helps | |||
| 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 by following the same procedure of each ASBR adding | multiple ASes. This is done by following the same procedure for each | |||
| Node-SID and EPE-SID on receiving echo requests from neighboring AS. | ASBR, i.e., adding Node-SIDs and EPE-SIDs on receiving echo requests | |||
| from neighboring ASes. | ||||
| Let us consider a 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 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 TBA1. The Reply Path | echo reply), and sets the Reply Path Return Code to 0x0006. The | |||
| TLV in the echo reply from ABR1 consists of [N-ABR1, N-PE1]. The | Reply Path TLV in the echo reply from ABR1 consists of [N-ABR1, | |||
| next echo request with TTL 2 reaches the P node. It is an internal | N-PE1]. The next echo request with a TTL of 2 reaches the P node. | |||
| node so it does not change the return Path. The echo request with | It is an internal node, so it does not change the return path. The | |||
| TTL 3 reaches ABR2 and it adds its node label so the Reply Path TLV | echo request with a TTL of 3 reaches ABR2, and it adds its node label | |||
| sent in the echo reply will be [N-ABR2, N-ABR1, N-PE1]. echo request | so the Reply Path TLV sent in the echo reply will be [N-ABR2, N-ABR1, | |||
| with TTL 4 reaches PE4 and it sends an echo reply return code as | N-PE1]. The echo request with a TTL of 4 reaches PE4, and it sends | |||
| Egress. PE4 does not include any Reply Path TLV in the echo reply. | an echo reply Return Code as an egress. PE4 does not include any | |||
| The above example assumes a uniform SRGB throughout the domain. In | Reply Path TLVs in the echo reply. The above example assumes a | |||
| the case of different SRGBs, the top segment will be a Type-C/Type-D | uniform SRGB throughout the domain. In the case of different SRGBs, | |||
| segment and all other segments will be Type-A. Each border node | the top segment will be a Type-C/Type-D segment and all other | |||
| converts the Type-C/Type-D segment to Type-A before adding its | segments will be Type-A. Each border node converts the Type-C/Type-D | |||
| segment to the Reply Path TLV. | segment to Type-A before adding its segment to the Reply Path TLV. | |||
| 12. References | ||||
| 12.1. Normative References | ||||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | ||||
| Requirement Levels", BCP 14, RFC 2119, | ||||
| DOI 10.17487/RFC2119, March 1997, | ||||
| <https://www.rfc-editor.org/info/rfc2119>. | ||||
| [RFC7110] Chen, M., Cao, W., Ning, S., Jounay, F., and S. Delord, | ||||
| "Return Path Specified Label Switched Path (LSP) Ping", | ||||
| RFC 7110, DOI 10.17487/RFC7110, January 2014, | ||||
| <https://www.rfc-editor.org/info/rfc7110>. | ||||
| [RFC8029] Kompella, K., Swallow, G., Pignataro, C., Ed., Kumar, N., | ||||
| Aldrin, S., and M. Chen, "Detecting Multiprotocol Label | ||||
| Switched (MPLS) Data-Plane Failures", RFC 8029, | ||||
| DOI 10.17487/RFC8029, March 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8029>. | ||||
| [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
| 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
| May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
| [RFC8287] Kumar, N., Ed., Pignataro, C., Ed., Swallow, G., Akiya, | ||||
| N., Kini, S., and M. Chen, "Label Switched Path (LSP) | ||||
| Ping/Traceroute for Segment Routing (SR) IGP-Prefix and | ||||
| IGP-Adjacency Segment Identifiers (SIDs) with MPLS Data | ||||
| Planes", RFC 8287, DOI 10.17487/RFC8287, December 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8287>. | ||||
| 12.2. Informative References | ||||
| [IEEE-802.1AE] | ||||
| IEEE, "IEEE Standard for Local and metropolitan area | ||||
| networks–Media Access Control (MAC) Security", August | ||||
| 2023. | ||||
| [RFC3032] Rosen, E., Tappan, D., Fedorkow, G., Rekhter, Y., | ||||
| Farinacci, D., Li, T., and A. Conta, "MPLS Label Stack | ||||
| Encoding", RFC 3032, DOI 10.17487/RFC3032, January 2001, | ||||
| <https://www.rfc-editor.org/info/rfc3032>. | ||||
| [RFC7743] Luo, J., Ed., Jin, L., Ed., Nadeau, T., Ed., and G. | ||||
| Swallow, Ed., "Relayed Echo Reply Mechanism for Label | ||||
| Switched Path (LSP) Ping", RFC 7743, DOI 10.17487/RFC7743, | ||||
| January 2016, <https://www.rfc-editor.org/info/rfc7743>. | ||||
| [RFC7942] Sheffer, Y. and A. Farrel, "Improving Awareness of Running | ||||
| Code: The Implementation Status Section", BCP 205, | ||||
| RFC 7942, DOI 10.17487/RFC7942, July 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7942>. | ||||
| [RFC8277] Rosen, E., "Using BGP to Bind MPLS Labels to Address | ||||
| Prefixes", RFC 8277, DOI 10.17487/RFC8277, October 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8277>. | ||||
| [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | ||||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
| Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | ||||
| July 2018, <https://www.rfc-editor.org/info/rfc8402>. | ||||
| [RFC8403] Geib, R., Ed., Filsfils, C., Pignataro, C., Ed., and N. | ||||
| Kumar, "A Scalable and Topology-Aware MPLS Data-Plane | ||||
| Monitoring System", RFC 8403, DOI 10.17487/RFC8403, July | ||||
| 2018, <https://www.rfc-editor.org/info/rfc8403>. | ||||
| [RFC8604] Filsfils, C., Ed., Previdi, S., Dawra, G., Ed., | ||||
| Henderickx, W., and D. Cooper, "Interconnecting Millions | ||||
| of Endpoints with Segment Routing", RFC 8604, | ||||
| DOI 10.17487/RFC8604, June 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8604>. | ||||
| [RFC8660] Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S., | ||||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
| Routing with the MPLS Data Plane", RFC 8660, | ||||
| DOI 10.17487/RFC8660, December 2019, | ||||
| <https://www.rfc-editor.org/info/rfc8660>. | ||||
| [RFC9086] Previdi, S., Talaulikar, K., Ed., Filsfils, C., Patel, K., | Acknowledgments | |||
| Ray, S., and J. Dong, "Border Gateway Protocol - Link | ||||
| State (BGP-LS) Extensions for Segment Routing BGP Egress | ||||
| Peer Engineering", RFC 9086, DOI 10.17487/RFC9086, August | ||||
| 2021, <https://www.rfc-editor.org/info/rfc9086>. | ||||
| [RFC9087] Filsfils, C., Ed., Previdi, S., Dawra, G., Ed., Aries, E., | Thanks to Bruno Decraene for suggesting the use of the generic | |||
| and D. Afanasiev, "Segment Routing Centralized BGP Egress | Segment sub-TLV. Thanks to Adrian Farrel, Huub van Helvoort, Dhruv | |||
| Peer Engineering", RFC 9087, DOI 10.17487/RFC9087, August | Dhody, and Dongjie for their careful reviews and comments. Thanks to | |||
| 2021, <https://www.rfc-editor.org/info/rfc9087>. | Mach Chen for suggesting the use of the Reply Path TLV. Thanks to | |||
| Gregory Mirsky for the detailed review, which helped improve the | ||||
| readability of the document to a great extent. | ||||
| [RFC9256] Filsfils, C., Talaulikar, K., Ed., Voyer, D., Bogdanov, | Contributors | |||
| A., and P. Mattes, "Segment Routing Policy Architecture", | ||||
| RFC 9256, DOI 10.17487/RFC9256, July 2022, | ||||
| <https://www.rfc-editor.org/info/rfc9256>. | ||||
| [RFC9350] Psenak, P., Ed., Hegde, S., Filsfils, C., Talaulikar, K., | Carlos Pignataro | |||
| and A. Gulko, "IGP Flexible Algorithm", RFC 9350, | NC State University | |||
| DOI 10.17487/RFC9350, February 2023, | Email: cpignata@gmail.com | |||
| <https://www.rfc-editor.org/info/rfc9350>. | ||||
| [RFC9552] Talaulikar, K., Ed., "Distribution of Link-State and | Zafar Ali | |||
| Traffic Engineering Information Using BGP", RFC 9552, | Cisco Systems, Inc. | |||
| DOI 10.17487/RFC9552, December 2023, | Email: zali@cisco.com | |||
| <https://www.rfc-editor.org/info/rfc9552>. | ||||
| Authors' Addresses | Authors' Addresses | |||
| Shraddha Hegde | Shraddha Hegde | |||
| Juniper Networks Inc. | Juniper Networks, Inc. | |||
| Exora Business Park | Exora Business Park | |||
| Bangalore 560103 | Bangalore 560103 | |||
| KA | KA | |||
| India | India | |||
| Email: shraddha@juniper.net | Email: shraddha@juniper.net | |||
| Kapil Arora | Kapil Arora | |||
| Individual Contributor | Individual Contributor | |||
| Email: kapil.it@gmail.com | Email: kapil.it@gmail.com | |||
| Mukul Srivastava | Mukul Srivastava | |||
| Juniper Networks Inc. | Juniper Networks, Inc. | |||
| Email: msri@juniper.net | Email: msri@juniper.net | |||
| Samson Ninan | Samson Ninan | |||
| Ciena | Ciena | |||
| Email: samson.cse@gmail.com | Email: samson.cse@gmail.com | |||
| Nagendra Kumar | Nagendra Kumar | |||
| Oracle | Oracle | |||
| Email: nagendrakumar.nainar@gmail.com | Email: nagendrakumar.nainar@gmail.com | |||
| End of changes. 195 change blocks. | ||||
| 733 lines changed or deleted | 710 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||