draft-ietf-mpls-lsp-ping-01.txt | draft-ietf-mpls-lsp-ping-02.txt | |||
---|---|---|---|---|
Network Working Group K. Kompella (Juniper) | Network Working Group K. Kompella (Juniper) | |||
Internet Draft P. Pan (Ciena) | Internet Draft P. Pan (Ciena) | |||
draft-ietf-mpls-lsp-ping-01.txt N. Sheth (Juniper) | draft-ietf-mpls-lsp-ping-02.txt N. Sheth (Juniper) | |||
Category: Standards Track D. Cooper (Global Crossing) | Category: Standards Track D. Cooper (Global Crossing) | |||
Expires: April 2003 G. Swallow (Cisco) | Expires: September 2003 G. Swallow (Cisco) | |||
S. Wadhwa (Juniper) | S. Wadhwa (Juniper) | |||
R. Bonica (WorldCom) | R. Bonica (WorldCom) | |||
October 2002 | March 2003 | |||
Detecting MPLS Data Plane Liveness | Detecting MPLS Data Plane Liveness | |||
*** DRAFT *** | *** DRAFT *** | |||
Status of this Memo | Status of this Memo | |||
This document is an Internet-Draft and is in full conformance with | This document is an Internet-Draft and is in full conformance with | |||
all provisions of Section 10 of RFC2026. | all provisions of Section 10 of RFC2026. | |||
skipping to change at page 1, line 39 | skipping to change at page 1, line 39 | |||
material or to cite them other than as ``work in progress.'' | material or to cite them other than as ``work in progress.'' | |||
The list of current Internet-Drafts can be accessed at | The list of current Internet-Drafts can be accessed at | |||
http://www.ietf.org/ietf/1id-abstracts.txt | http://www.ietf.org/ietf/1id-abstracts.txt | |||
The list of Internet-Draft Shadow Directories can be accessed at | The list of Internet-Draft Shadow Directories can be accessed at | |||
http://www.ietf.org/shadow.html. | http://www.ietf.org/shadow.html. | |||
Copyright Notice | Copyright Notice | |||
Copyright (C) The Internet Society (2002). All Rights Reserved. | Copyright (C) The Internet Society (2003). All Rights Reserved. | |||
Abstract | Abstract | |||
This document describes a simple and efficient mechanism that can be | This document describes a simple and efficient mechanism that can be | |||
used to detect data plane failures in Multi-Protocol Label Switching | used to detect data plane failures in Multi-Protocol Label Switching | |||
(MPLS) Label Switched Paths (LSPs). There are two parts to this | (MPLS) Label Switched Paths (LSPs). There are two parts to this | |||
document: information carried in an MPLS "echo request" and "echo | document: information carried in an MPLS "echo request" and "echo | |||
reply" for the purposes of fault detection and isolation; and | reply" for the purposes of fault detection and isolation; and | |||
mechanisms for reliably sending the echo reply. | mechanisms for reliably sending the echo reply. | |||
skipping to change at page 3, line 34 | skipping to change at page 3, line 34 | |||
To avoid potential Denial of Service attacks, it is recommended to | To avoid potential Denial of Service attacks, it is recommended to | |||
regulate the MPLS ping traffic going to the control plane. A rate | regulate the MPLS ping traffic going to the control plane. A rate | |||
limiter should be applied to the well-known UDP port defined below. | limiter should be applied to the well-known UDP port defined below. | |||
1.1. Conventions | 1.1. Conventions | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
document are to be interpreted as described in RFC 2119 [KEYWORDS]. | document are to be interpreted as described in RFC 2119 [KEYWORDS]. | |||
1.2. Changes since last revision | 1.2. Structure of this document | |||
The body of this memo contains four main parts: motivation, MPLS echo | ||||
request/reply packet format, MPLS ping operation, and a reliable | ||||
return path. It is suggested that first-time readers skip the actual | ||||
packet formats and read the Theory of Operation first; the document | ||||
is structured the way it is to avoid forward references. | ||||
The last section (reliable return path for RSVP LSPs) may be removed | ||||
in a future revision. | ||||
1.3. Changes since last revision | ||||
(This section to be removed before publication.) | (This section to be removed before publication.) | |||
- Packet format changed; Version Number field added | - Clarified definition of downstream router/interface. | |||
- Reply modes: "don't reply" added | - Added text for multipath (mostly just taken from Curtis) | |||
- Reply flags removed | - Mandated the use of Router Alert for sending echo requests | |||
- Return codes extended | - If reply mode says IPv4 with router alert, and the reply is | |||
- RSVP session formats modified | labeled, the top label MUST be the router alert label | |||
- VPN IPv4/v6 formats defined | - Expanded the Theory of Operation, and added a section on ECMP | |||
- L2 VPN endpoint and L2 circuits defined | - Expanded checks on receipt of echo requests, per email on list | |||
- Downstream mapping format changed | ||||
- Pad and Error Code TLVs introduced | 1.4. Issues remaining | |||
- Aspects dealing with CR-LDP moved to non-normative appendix | ||||
- IPR notices and Full Copyright Statement (per 2026) added | (This section to be removed before publication.) | |||
- other nits to better conform to 2223bis | ||||
- Monitoring mode | ||||
- Finalize ECMP format and semantics | ||||
- Keep or remove replies via control plane? | ||||
- Normalize error codes | ||||
2. Motivation | 2. Motivation | |||
When an LSP fails to deliver user traffic, the failure cannot always | When an LSP fails to deliver user traffic, the failure cannot always | |||
be detected by the MPLS control plane. There is a need to provide a | be detected by the MPLS control plane. There is a need to provide a | |||
tool that would enable users to detect such traffic "black holes" or | tool that would enable users to detect such traffic "black holes" or | |||
misrouting within a reasonable period of time; and a mechanism to | misrouting within a reasonable period of time; and a mechanism to | |||
isolate faults. | isolate faults. | |||
In this document, we describe a mechanism that accomplishes these | In this document, we describe a mechanism that accomplishes these | |||
goals. This mechanism is modeled after the ping/traceroute | goals. This mechanism is modeled after the ping/traceroute paradigm: | |||
philosophy: ping (ICMP echo request [ICMP]) is used for connectivity | ping (ICMP echo request [ICMP]) is used for connectivity checks, and | |||
checks, and traceroute is used for hop-by-hop fault localization as | traceroute is used for hop-by-hop fault localization as well as path | |||
well as path tracing. This document specifies a "ping mode" and a | tracing. This document specifies a "ping mode" and a "traceroute" | |||
"traceroute" mode for testing MPLS LSPs. | mode for testing MPLS LSPs. | |||
The basic idea is to test that packets that belong to a particular | The basic idea is to test that packets that belong to a particular | |||
Forwarding Equivalence Class (FEC) actually end their MPLS path on an | Forwarding Equivalence Class (FEC) actually end their MPLS path on an | |||
LSR that is an egress for that FEC. This document proposes that this | LSR that is an egress for that FEC. This document proposes that this | |||
test be carried out by sending a packet (called an "MPLS echo | test be carried out by sending a packet (called an "MPLS echo | |||
request") along the same data path as other packets belonging to this | request") along the same data path as other packets belonging to this | |||
FEC. An MPLS echo request also carries information about the FEC | FEC. An MPLS echo request also carries information about the FEC | |||
whose MPLS path is being verified. This echo request is forwarded | whose MPLS path is being verified. This echo request is forwarded | |||
just like any other packet belonging to that FEC. In "ping" mode | just like any other packet belonging to that FEC. In "ping" mode | |||
(basic connectivity check), the packet should reach the end of the | (basic connectivity check), the packet should reach the end of the | |||
skipping to change at page 5, line 42 | skipping to change at page 5, line 47 | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The Version Number is currently 1. (Note: the Version Number is to | The Version Number is currently 1. (Note: the Version Number is to | |||
be incremented whenever a change is made that affects the ability of | be incremented whenever a change is made that affects the ability of | |||
an implementation to correctly parse or process an MPLS echo | an implementation to correctly parse or process an MPLS echo | |||
request/reply. These changes include any syntactic or semantic | request/reply. These changes include any syntactic or semantic | |||
changes made to any of the fixed fields, or to any TLV or sub-TLV | changes made to any of the fixed fields, or to any TLV or sub-TLV | |||
assignment or format that is defined at a certain version number. | assignment or format that is defined at a certain version number. | |||
The Version Number may not need to be changed if a TLV or sub-TLV is | The Version Number may not need to be changed if an optional TLV or | |||
added.) | sub-TLV is added.) | |||
The Message Type is one of the following: | The Message Type is one of the following: | |||
Value Meaning | Value Meaning | |||
----- ------- | ----- ------- | |||
1 MPLS Echo Request | 1 MPLS Echo Request | |||
2 MPLS Echo Reply | 2 MPLS Echo Reply | |||
The Reply Mode can take one of the following values: | The Reply Mode can take one of the following values: | |||
skipping to change at page 8, line 23 | skipping to change at page 8, line 31 | |||
on an egress LSR with loopback address 192.168.1.1 (learned via LDP), | on an egress LSR with loopback address 192.168.1.1 (learned via LDP), | |||
X has two choices. X can send an MPLS echo request with a FEC Stack | X has two choices. X can send an MPLS echo request with a FEC Stack | |||
TLV with a single FEC of type VPN IPv4 prefix with a prefix of 10/8 | TLV with a single FEC of type VPN IPv4 prefix with a prefix of 10/8 | |||
with the Route Distinguisher for VPN foo. Alternatively, X can send | with the Route Distinguisher for VPN foo. Alternatively, X can send | |||
a FEC Stack TLV with two FECs, the first of type LDP IPv4 with a | a FEC Stack TLV with two FECs, the first of type LDP IPv4 with a | |||
prefix of 192.168.1.1/32 and the second of type of IP VPN with a | prefix of 192.168.1.1/32 and the second of type of IP VPN with a | |||
prefix 10/8 in VPN foo. In either case, the MPLS echo request would | prefix 10/8 in VPN foo. In either case, the MPLS echo request would | |||
have a label stack of <1001, 23456>. (Note: in this example, 1001 is | have a label stack of <1001, 23456>. (Note: in this example, 1001 is | |||
the "outer" label and 23456 is the "inner" label.) | the "outer" label and 23456 is the "inner" label.) | |||
3.1.1. IPv4 Prefix | 3.1.1. LDP IPv4 Prefix | |||
The value consists of four octets of an IPv4 prefix followed by one | The value consists of four octets of an IPv4 prefix followed by one | |||
octet of prefix length in bits. The IPv4 prefix is in network byte | octet of prefix length in bits. The IPv4 prefix is in network byte | |||
order. See [LDP] for an example of a Mapping for an IPv4 FEC. | order. See [LDP] for an example of a Mapping for an IPv4 FEC. | |||
3.1.2. IPv6 Prefix | 3.1.2. LDP IPv6 Prefix | |||
The value consists of sixteen octets of an IPv6 prefix followed by | The value consists of sixteen octets of an IPv6 prefix followed by | |||
one octet of prefix length in bits. The IPv6 prefix is in network | one octet of prefix length in bits. The IPv6 prefix is in network | |||
byte order. | byte order. See [LDP] for an example of a Mapping for an IPv6 FEC. | |||
3.1.3. RSVP IPv4 Session | 3.1.3. RSVP IPv4 Session | |||
The value has the format below. The value fields are taken from | The value has the format below. The value fields are taken from | |||
[RFC3209, sections 4.6.1.1 and 4.6.2.1]. | [RFC3209, sections 4.6.1.1 and 4.6.2.1]. | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IPv4 tunnel end point address | | | IPv4 tunnel end point address | | |||
skipping to change at page 11, line 19 | skipping to change at page 11, line 26 | |||
The Downstream Mapping is an optional TLV in an echo request. The | The Downstream Mapping is an optional TLV in an echo request. The | |||
Length is 12 + 4*N octets, where N is the number of Downstream | Length is 12 + 4*N octets, where N is the number of Downstream | |||
Labels. The Value of a Downstream Mapping has the following format: | Labels. The Value of a Downstream Mapping has the following format: | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream IPv4 Router ID | | | Downstream IPv4 Router ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| MTU | Address Type | Reserved | | | MTU | Address Type | DS Index | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Interface Address | | | Downstream Interface Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Hash Key Type | Depth Limit | Multipath Length | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| IP Address or Next Label | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. (more IP Addresses or Next Labels) . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream Label | Protocol | | | Downstream Label | Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream Label | Protocol | | | Downstream Label | Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The MTU is the largest MPLS frame (including label stack) that fits | The MTU is the largest MPLS frame (including label stack) that fits | |||
on the interface to the Downstream LSR. The Address Type is one of: | on the interface to the Downstream LSR. The Downstream Interface | |||
Address Type is one of: | ||||
Type # Address Type | Type # Address Type | |||
------ ------------ | ------ ------------ | |||
1 IPv4 | 1 IPv4 | |||
2 Unnumbered | 2 Unnumbered | |||
'Protocol' is taken from the following table: | 'Protocol' is taken from the following table: | |||
Protocol # Signaling Protocol | Protocol # Signaling Protocol | |||
---------- ------------------ | ---------- ------------------ | |||
0 Unknown | 0 Unknown | |||
1 Static | 1 Static | |||
2 BGP | 2 BGP | |||
3 LDP | 3 LDP | |||
4 RSVP-TE | 4 RSVP-TE | |||
5 Reserved; see Appendix | 5 Reserved; see Appendix | |||
The notion of "downstream router" should be explained. Consider an | The notion of "downstream router" and "downstream interface" should | |||
LSR X. If a packet with outermost label L and TTL n>1 arrived at X | be explained. Consider an LSR X. If a packet that was originated | |||
on interface I, X must be able to compute which LSRs could receive | with TTL n>1 arrived with outermost label L at LSR X, X must be able | |||
the packet with TTL=n+1, and what label they would see. (It is | to compute which LSRs could receive the packet if it was originated | |||
outside the scope of this document to specify how this computation | with TTL=n+1, over which interface the request would arrive and what | |||
may be done.) The set of these LSRs are the downstream routers (and | label stack those LSRs would see. (It is outside the scope of this | |||
their corresponding labels) for X with respect to L. | document to specify how this computation is done.) The set of these | |||
LSRs/interfaces are the downstream routers/interfaces (and their | ||||
corresponding labels) for X with respect to L. Each pair of | ||||
downstream router and interface requires a separate Downstream | ||||
Mapping to be added to the reply, and is given a unique DS Index. | ||||
(Note that there are multiple Downstream Label fields in each TLV as | ||||
the incoming label L may be swapped with a label stack.) | ||||
The case where X is the LSR originating the echo request is a special | The case where X is the LSR originating the echo request is a special | |||
case. X needs to figure out what LSRs would receive a labelled | case. X needs to figure out what LSRs would receive the MPLS echo | |||
packet with TTL=1 when X tries to send a packet to the FEC Stack that | request for a given FEC Stack that X originates with TTL=1. | |||
is being pinged. | ||||
The set of downstream routers at X may be alternative paths (see the | ||||
discussion below on ECMP) or simultaneous paths (e.g., for MPLS | ||||
multicast). In the former case, the Multipath sub-field is used as a | ||||
hint to the sender as to how it may influence the choice of these | ||||
alternatives. The Multipath Length is the total length of the | ||||
Multipath field (i.e., 4 + 4*M, where M is the number of IP | ||||
Address/Next Label fields). The Hash Key Type is taken from the | ||||
following table: | ||||
Hash Key Type IP Address or Next Label | ||||
-------------------- ------------------------ | ||||
0 no multipath (nothing; M = 0) | ||||
1 label M labels | ||||
2 IP address M IP addresses | ||||
3 label range M/2 low/high label pairs | ||||
4 IP address range M/2 low/high address pairs | ||||
5 no more labels (nothing; M = 0) | ||||
6 All IP addresses (nothing; M = 0) | ||||
7 no match (nothing; M = 0) | ||||
The Depth Limit is applicable only to a label stack, and is the | ||||
maximum number of labels considered in the hash; this SHOULD be set | ||||
to zero if unspecified or unlimited. | ||||
IP Address or Next Label is an IP address from the range 127/8 or an | ||||
next label which will exercise this particular path. | ||||
The semantics of the Hash Key Type and IP Address/Next Label are as | ||||
follows: | ||||
type 1 - a list of single labels is provided, any one of which | ||||
will | ||||
cause the hash to match this MP path. | ||||
type 2 - a list of single IP addresses is provided, any one of | ||||
which will cause the hash to match this MP path. | ||||
type 3 - a list of label ranges is provided, any one of which will | ||||
cause the hash to match this MP path. | ||||
type 4 - a list of IP address ranges is provided, any one of which | ||||
will cause the hash to match this MP path. | ||||
type 5 - if no more labels are provided on the stack, this MP path | ||||
will apply (can only appear once). | ||||
type 6 - Any IP addresses matches. Undertlying labels may go | ||||
elsewhere, but all IP takes only one MP path (can only | ||||
appear once). | ||||
type 7 - no matches are possible given the set of "Multipath | ||||
Exercise TLV" provided by prior hops. | ||||
If prior hops provide a "Downstream Multipath Mapping TLV" the labels | ||||
and IP addresses should be picked from the set provided in prior | ||||
"Multipath Exercise TLV" or "Hash Key Type" of 7 used. | ||||
3.3. Pad TLV | 3.3. Pad TLV | |||
The value part of the Pad TLV contains a variable number (>= 1) of | The value part of the Pad TLV contains a variable number (>= 1) of | |||
octets. The first octet takes values from the following table; all | octets. The first octet takes values from the following table; all | |||
the other octets (if any) are ignored. The receiver SHOULD verify | the other octets (if any) are ignored. The receiver SHOULD verify | |||
that the TLV is received in its entirety, but otherwise ignores the | that the TLV is received in its entirety, but otherwise ignores the | |||
contents of this TLV, apart from the first octet. | contents of this TLV, apart from the first octet. | |||
Value Meaning | Value Meaning | |||
skipping to change at page 12, line 38 | skipping to change at page 14, line 13 | |||
3-255 Reserved for future use | 3-255 Reserved for future use | |||
3.4. Error Code | 3.4. Error Code | |||
The Error Code TLV is currently not defined; its purpose is to | The Error Code TLV is currently not defined; its purpose is to | |||
provide a mechanism for a more elaborate error reporting structure, | provide a mechanism for a more elaborate error reporting structure, | |||
should the reason arise. | should the reason arise. | |||
4. Theory of Operation | 4. Theory of Operation | |||
4.1. Sending an MPLS Echo Request | An MPLS echo request is used to test a particular LSP. The LSP to be | |||
tested is identified by the "FEC Stack"; for example, if the LSP was | ||||
set up via LDP, and is to an egress IP address of 10.1.1.1, the FEC | ||||
stack contains a single element, namely, an LDP IPv4 prefix sub-TLV | ||||
with value 10.1.1.1/32. If the LSP being tested is an RSVP LSP, the | ||||
FEC stack consists of a single element that captures the RSVP Session | ||||
and Sender Template which uniquely identifies the LSP. | ||||
FEC stacks can be more complex. For example, one may wish to test a | ||||
VPN IPv4 prefix of 10.1/8 that is tunneled over an LDP LSP with | ||||
egress 10.10.1.1. The FEC stack would then contain two sub-TLVs, the | ||||
first being a VPN IPv4 prefix, and the second being an LDP IPv4 | ||||
prefix. If the underlying (LDP) tunnel were not known, or was | ||||
considered irrelevant, the FEC stack could be a single element with | ||||
just the VPN IPv4 sub-TLV. | ||||
When an MPLS echo request is received, the receiver is expected to do | ||||
a number of tests that verify that the control plane and data plane | ||||
are both healthy (for the FEC stack being pinged), and that the two | ||||
planes are in sync. | ||||
4.1. Dealing with Equal-Cost Multi-Path (ECMP) | ||||
LSPs need not be simple point-to-point tunnels. Frequently, a single | ||||
LSP may originate at several ingresses, and terminate at several | ||||
egresses; this is very common with LDP LSPs. LSPs for a given FEC | ||||
may also have multiple "next hops" at transit LSRs. At an ingress, | ||||
there may also be several different LSPs to choose from to get to the | ||||
desired endpoint. Finally, LSPs may have backup paths, detour paths | ||||
and other alternative paths to take should the primary LSP go down. | ||||
To deal with the last two first: it is assumed that the LSR sourcing | ||||
MPLS echo requests can force the echo request into any desired LSP, | ||||
so choosing among multiple LSPs at the ingress is not an issue. The | ||||
problem of probing the various flavors of backup paths that will | ||||
typically not be used for forwarding data unless the primary LSP is | ||||
down will not be addressed here. | ||||
Since the actual LSP and path that a given packet may take may not be | ||||
known a priori, it is useful if MPLS echo requests can exercise all | ||||
possible paths. This, while desirable, may not be practical, because | ||||
the algorithms that a given LSR uses to distribute packets over | ||||
alternative paths may be proprietary. | ||||
To achieve some degree of coverage of alternate paths, there is a | ||||
certain lattitude in choosing the destination IP address and source | ||||
UDP port for an MPLS echo request. This is clearly not sufficient; | ||||
in the case of traceroute, more lattitude is offered by means of the | ||||
"Multipath Exercise" sub-TLV of the Downstream Mapping TLV. This is | ||||
used as follows. An ingress LSR periodically sends an MPLS | ||||
traceroute message to determine whether there are multipaths for a | ||||
given LSP. If so, each hop will provide some information how each of | ||||
its downstreams can be exercised. The ingress can then send MPLS | ||||
echo requests that exercise these paths. If several transit LSRs | ||||
have ECMP, the ingress may attempt to compose these to exercise all | ||||
possible paths. However, full coverage may not be possible. | ||||
4.2. Sending an MPLS Echo Request | ||||
An MPLS echo request is a (possibly) labelled UDP packet. The IP | An MPLS echo request is a (possibly) labelled UDP packet. The IP | |||
header is set as follows: the source IP address is a routable address | header is set as follows: the source IP address is a routable address | |||
of the sender; the destination IP address is a (randomly chosen) | of the sender; the destination IP address is a (randomly chosen) | |||
address from 127/8; the IP TTL is set to 1. The source UDP port is | address from 127/8; the IP TTL is set to 1. The source UDP port is | |||
chosen by the sender; the destination UDP port is set to 3503 | chosen by the sender; the destination UDP port is set to 3503 | |||
(assigned by IANA for MPLS echo requests). If the echo request is | (assigned by IANA for MPLS echo requests). The Router Alert option | |||
labelled, the MPLS TTL on all the labels except the outermost should | is set in the IP header. If the echo request is labelled, the MPLS | |||
be set to 1. | TTL on all the labels except the outermost should be set to 1. | |||
In "ping" mode (end-to-end connectivity check), the TTL in the | In "ping" mode (end-to-end connectivity check), the TTL in the | |||
outermost label is set to 255. In "traceroute" mode (fault isolation | outermost label is set to 255. In "traceroute" mode (fault isolation | |||
mode), the TTL is set successively to 1, 2, .... | mode), the TTL is set successively to 1, 2, .... | |||
The sender chooses a Sender's Handle, and a Sequence Number. When | The sender chooses a Sender's Handle, and a Sequence Number. When | |||
sending subsequent MPLS echo requests, the sender SHOULD increment | sending subsequent MPLS echo requests, the sender SHOULD increment | |||
the sequence number by 1. However, a sender MAY choose to send a | the sequence number by 1. However, a sender MAY choose to send a | |||
group of echo requests with the same sequence number to improve the | group of echo requests with the same sequence number to improve the | |||
chance of arrival of at least one packet with that sequence number. | chance of arrival of at least one packet with that sequence number. | |||
skipping to change at page 13, line 25 | skipping to change at page 16, line 8 | |||
An MPLS echo request MUST have a FEC Stack TLV. Also, the Reply Mode | An MPLS echo request MUST have a FEC Stack TLV. Also, the Reply Mode | |||
must be set to the desired reply mode; the Return Code and Subcode | must be set to the desired reply mode; the Return Code and Subcode | |||
are set to zero. | are set to zero. | |||
In the "traceroute" mode, the echo request SHOULD contain one or more | In the "traceroute" mode, the echo request SHOULD contain one or more | |||
Downstream Mapping TLVs. For TTL=1, all the downstream routers (and | Downstream Mapping TLVs. For TTL=1, all the downstream routers (and | |||
corresponding labels) for the sender with respect to the FEC Stack | corresponding labels) for the sender with respect to the FEC Stack | |||
being pinged SHOULD be sent in the echo request. For n>1, the | being pinged SHOULD be sent in the echo request. For n>1, the | |||
Downstream Mapping TLVs from the echo reply for TTL=(n-1) are copied | Downstream Mapping TLVs from the echo reply for TTL=(n-1) are copied | |||
to the echo request with TTL=n. | to the echo request with TTL=n; the sender MAY choose to reduce the | |||
size of a "Downstream Multipath Mapping TLV" when copying into the | ||||
next echo request as long as the Hash Key Type matching the label or | ||||
IP address used to exercise the current MP is still present. | ||||
4.2. Receiving an MPLS Echo Request | 4.3. Receiving an MPLS Echo Request | |||
An LSR L that receives an MPLS echo request first parses the packet | An LSR X that receives an MPLS echo request first parses the packet | |||
to ensure that it is a well-formed packet, and that the TLVs are | to ensure that it is a well-formed packet, and that the TLVs are | |||
understood. If not, L SHOULD send an MPLS echo reply with the | understood. If not, X SHOULD send an MPLS echo reply with the Return | |||
Return Code set to "Malformed echo request received" or "TLV not | Code set to "Malformed echo request received" or "TLV not understood" | |||
understood" (as appropriate), and the Subcode set to the appropriate | (as appropriate), and the Subcode set to the appropriate value. | |||
value. | ||||
If the echo request is good, L then checks whether it is a valid | If the echo request is good, X then checks whether it is a valid | |||
transit or egress LSR for the FEC in the echo request. If not, L MAY | transit or egress LSR for the FEC in the echo request. If not, X MAY | |||
log this fact. | log this fact. If it is, X notes that interface I over which the | |||
echo was received, and the label L with which it came. X checks | ||||
whether it actually advertised L over interface I for the FEC in the | ||||
echo request. | ||||
If the echo request contains a Downstream Mapping TLV, L MUST further | If the echo request contains a Downstream Mapping TLV, X MUST further | |||
check whether its Router ID matches one of the Downstream IPv4 Router | check whether its Router ID matches one of the Downstream IPv4 Router | |||
IDs; and if so, whether the given Downstream Label is in fact the | IDs; and if so, whether the given Downstream Label is in fact the | |||
label that L sent as its mapping for the FEC. For an RSVP FEC, the | label that X sent as its mapping for the FEC over the downstream | |||
downstream label is the label that L sent in its Resv message. The | interface. The result of the checks in the previous and this | |||
result of the checks in the previous and this paragraph are captured | paragraph are captured in the Return Code/Subcode. | |||
in the Return Code/Subcode. | ||||
If the echo request has a Reply Mode that wants a reply, L uses the | If the echo request has a Reply Mode that wants a reply, X uses the | |||
procedure in the next subsection to send the echo reply. | procedure in the next subsection to send the echo reply. | |||
4.3. Sending an MPLS Echo Reply | 4.4. Sending an MPLS Echo Reply | |||
An MPLS echo reply is a UDP packet. It MUST ONLY be sent in response | An MPLS echo reply is a UDP packet. It MUST ONLY be sent in response | |||
to an MPLS echo request. The source IP address is a routable address | to an MPLS echo request. The source IP address is a routable address | |||
of the replier; the source port is the well-known UDP port for MPLS | of the replier; the source port is the well-known UDP port for MPLS | |||
ping. The destination IP address and UDP port are copied from the | ping. The destination IP address and UDP port are copied from the | |||
source IP address and UDP port of the echo request. The IP TTL is | source IP address and UDP port of the echo request. The IP TTL is | |||
set to 255. If the Reply Mode in the echo request is "Reply via an | set to 255. If the Reply Mode in the echo request is "Reply via an | |||
IPv4 UDP packet with Router Alert", then the IP header MUST contain | IPv4 UDP packet with Router Alert", then the IP header MUST contain | |||
the Router Alert IP option. | the Router Alert IP option. If the reply is sent over an LSP, the | |||
topmost label MUST in this case be the Router Alert label (1) (see | ||||
[LABEL-STACK]). | ||||
The format of the echo reply is the same as the echo request. The | The format of the echo reply is the same as the echo request. The | |||
Sender's Handle, the Sequence Number and TimeStamp Sent are copied | Sender's Handle, the Sequence Number and TimeStamp Sent are copied | |||
from the echo request; the TimeStamp Received is set to the time-of- | from the echo request; the TimeStamp Received is set to the time-of- | |||
day that the echo request is received (note that this information is | day that the echo request is received (note that this information is | |||
most useful if the time-of-day clocks on the requestor and the | most useful if the time-of-day clocks on the requestor and the | |||
replier are synchronized). The FEC Stack TLV from the echo request | replier are synchronized). The FEC Stack TLV from the echo request | |||
MAY be copied to the reply. | MAY be copied to the reply. | |||
The replier MUST fill in the Return Code and Subcode, as determined | The replier MUST fill in the Return Code and Subcode, as determined | |||
in the previous subsection. | in the previous subsection. | |||
If the echo request contains a Pad TLV, the replier MUST interpret | If the echo request contains a Pad TLV, the replier MUST interpret | |||
the first octet for instructions regarding how to reply. | the first octet for instructions regarding how to reply. | |||
If the echo request contains a Downstream Mapping TLV, the replier | If the echo request contains a Downstream Mapping TLV, the replier | |||
SHOULD compute its downstream routers and corresponding labels for | SHOULD compute its downstream routers and corresponding labels for | |||
the incoming label, and add Downstream Mapping TLVs for each one to | the incoming label, and add Downstream Mapping TLVs for each one to | |||
the echo reply it sends back. | the echo reply it sends back. | |||
4.4. Receiving an MPLS Echo Reply | 4.5. Receiving an MPLS Echo Reply | |||
An LSR X should only receive an MPLS Echo Reply in response to an | An LSR X should only receive an MPLS Echo Reply in response to an | |||
MPLS Echo Request that it sent. Thus, on receipt of an MPLS Echo | MPLS Echo Request that it sent. Thus, on receipt of an MPLS Echo | |||
Reply, X should parse the packet to assure that it is well-formed, | Reply, X should parse the packet to assure that it is well-formed, | |||
then attempt to match up the Echo Reply with an Echo Request that it | then attempt to match up the Echo Reply with an Echo Request that it | |||
had previously sent, using the destination UDP port and the Sender's | had previously sent, using the destination UDP port and the Sender's | |||
Handle. If no match is found, then X jettisons the Echo Reply; | Handle. If no match is found, then X jettisons the Echo Reply; | |||
otherwise, it checks the Sequence Number to see if it matches. Gaps | otherwise, it checks the Sequence Number to see if it matches. Gaps | |||
in the Sequence Number MAY be logged and SHOULD be counted. Once an | in the Sequence Number MAY be logged and SHOULD be counted. Once an | |||
Echo Reply is received for a given Sequence Number (for a given UDP | Echo Reply is received for a given Sequence Number (for a given UDP | |||
port and Handle), the Sequence Number for subsequent Echo Requests | port and Handle), the Sequence Number for subsequent Echo Requests | |||
for that UDP port and Handle SHOULD be incremented. | for that UDP port and Handle SHOULD be incremented. | |||
If the Echo Reply contains Downstream Mappings, and X wishes to | If the Echo Reply contains Downstream Mappings, and X wishes to | |||
traceroute further, it SHOULD copy the Downstream Mappings into its | traceroute further, it SHOULD copy the Downstream Mappings into its | |||
next Echo Request (with TTL incremented by one). | next Echo Request (with TTL incremented by one). | |||
4.5. Non-compliant Routers | 4.6. Non-compliant Routers | |||
If the egress for the FEC Stack being pinged does not support MPLS | If the egress for the FEC Stack being pinged does not support MPLS | |||
ping, then no reply will be sent, resulting in possible "false | ping, then no reply will be sent, resulting in possible "false | |||
negatives". If in "traceroute" mode, a transit LSR does not support | negatives". If in "traceroute" mode, a transit LSR does not support | |||
MPLS ping, then no reply will be forthcoming from that LSR for some | MPLS ping, then no reply will be forthcoming from that LSR for some | |||
TTL, say n. The LSR originating the echo request SHOULD try sending | TTL, say n. The LSR originating the echo request SHOULD try sending | |||
the echo request with TTL=n+1, n+2, ..., n+k in the hope that some | the echo request with TTL=n+1, n+2, ..., n+k in the hope that some | |||
transit LSR further downstream may support MPLS echo requests and | transit LSR further downstream may support MPLS echo requests and | |||
reply. In such a case, the echo request for TTL>n MUST NOT have | reply. In such a case, the echo request for TTL>n MUST NOT have | |||
Downstream Mapping TLVs, until a reply is received with a Downstream | Downstream Mapping TLVs, until a reply is received with a Downstream | |||
skipping to change at page 16, line 47 | skipping to change at page 19, line 33 | |||
If X does not receive an Resv message from the egress LSR that | If X does not receive an Resv message from the egress LSR that | |||
contains an LSP_ECHO object within some period of time, it declares | contains an LSP_ECHO object within some period of time, it declares | |||
the LSP as "down". At this point, the ingress LSR may apply the | the LSP as "down". At this point, the ingress LSR may apply the | |||
necessary procedures to fix the LSP. These may include generating a | necessary procedures to fix the LSP. These may include generating a | |||
message to network management, tearing-down and re-building the LSP, | message to network management, tearing-down and re-building the LSP, | |||
and/or rerouting user traffic to a backup LSP. | and/or rerouting user traffic to a backup LSP. | |||
To test an LSP that carries non-IP traffic, before injecting ICMP and | To test an LSP that carries non-IP traffic, before injecting ICMP and | |||
MPLS ping messages into the LSP, the IPv4 Explicit NULL label should | MPLS ping messages into the LSP, the IPv4 Explicit NULL label should | |||
be prepended to such messages. The ingress and egress LSR's must | be prepended to such messages. The ingress and egress LSR's must | |||
follow the procedures defined in [LABEL-STACKING]. | follow the procedures defined in [LABEL-STACK]. | |||
5.4. Procedures at the egress LSR | 5.4. Procedures at the egress LSR | |||
When the egress LSR receives an MPLS ping message, it follows the | When the egress LSR receives an MPLS ping message, it follows the | |||
procedures given above. If the Reply Mode is set to "Reply via the | procedures given above. If the Reply Mode is set to "Reply via the | |||
control plane", the LSR can, based on the RSVP SESSION and | control plane", the LSR can, based on the RSVP SESSION and | |||
SENDER_TEMPLATE objects carried in the MPLS ping message, find the | SENDER_TEMPLATE objects carried in the MPLS ping message, find the | |||
corresponding LSP in its RSVP-TE database. The LSR then checks to | corresponding LSP in its RSVP-TE database. The LSR then checks to | |||
see if the Resv message for this LSP contains an LSP_ECHO object with | see if the Resv message for this LSP contains an LSP_ECHO object with | |||
the same source UDP port value. If not, the LSR adds or updates the | the same source UDP port value. If not, the LSR adds or updates the | |||
skipping to change at page 17, line 33 | skipping to change at page 20, line 15 | |||
Note that an intermediate LSR using RSVP refresh reduction [RSVP- | Note that an intermediate LSR using RSVP refresh reduction [RSVP- | |||
REFRESH], the new or changed LSP_ECHO object will cause the LSR to | REFRESH], the new or changed LSP_ECHO object will cause the LSR to | |||
classify the RSVP message as a trigger message. | classify the RSVP message as a trigger message. | |||
6. Normative References | 6. Normative References | |||
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate | [KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[LABEL-STACKING] Rosen, E., et al, "MPLS Label Stack Encoding", RFC | [LABEL-STACK] Rosen, E., et al, "MPLS Label Stack Encoding", RFC | |||
3032, January 2001. | 3032, January 2001. | |||
[RSVP] Braden, R. (Editor), et al, "Resource ReSerVation protocol | [RSVP] Braden, R. (Editor), et al, "Resource ReSerVation protocol | |||
(RSVP) -- Version 1 Functional Specification," RFC 2205, | (RSVP) -- Version 1 Functional Specification," RFC 2205, | |||
September 1997. | September 1997. | |||
[RSVP-REFRESH] Berger, L., et al, "RSVP Refresh Overhead Reduction | [RSVP-REFRESH] Berger, L., et al, "RSVP Refresh Overhead Reduction | |||
Extensions", RFC 2961, April 2001. | Extensions", RFC 2961, April 2001. | |||
[RSVP-TE] Awduche, D., et al, "RSVP-TE: Extensions to RSVP for LSP | [RSVP-TE] Awduche, D., et al, "RSVP-TE: Extensions to RSVP for LSP | |||
skipping to change at page 19, line 11 | skipping to change at page 21, line 24 | |||
9. IANA Considerations | 9. IANA Considerations | |||
(To be filled in a later revision) | (To be filled in a later revision) | |||
10. Acknowledgments | 10. Acknowledgments | |||
This document is the outcome of many discussions among many people, | This document is the outcome of many discussions among many people, | |||
that include Manoj Leelanivas, Paul Traina, Yakov Rekhter, Der-Hwa | that include Manoj Leelanivas, Paul Traina, Yakov Rekhter, Der-Hwa | |||
Gan, Brook Bailey, Eric Rosen and Ina Minei. | Gan, Brook Bailey, Eric Rosen and Ina Minei. | |||
The Multipath Exercise sub-field of the Downstream Mapping TLV was | ||||
adapted from text suggested by Curtis Villamizar. | ||||
11. Appendix | 11. Appendix | |||
This appendix specifies non-normative aspects of detecting MPLS data | This appendix specifies non-normative aspects of detecting MPLS data | |||
plane liveness. | plane liveness. | |||
11.1. CR-LDP FEC | 11.1. CR-LDP FEC | |||
This section describes how a CR-LDP FEC can be included in an Echo | This section describes how a CR-LDP FEC can be included in an Echo | |||
Request using the following FEC subtype: | Request using the following FEC subtype: | |||
skipping to change at page 21, line 29 | skipping to change at page 24, line 7 | |||
be obtained from the IETF Secretariat. | be obtained from the IETF Secretariat. | |||
The IETF invites any interested party to bring to its attention any | The IETF invites any interested party to bring to its attention any | |||
copyrights, patents or patent applications, or other proprietary | copyrights, patents or patent applications, or other proprietary | |||
rights which may cover technology that may be required to practice | rights which may cover technology that may be required to practice | |||
this standard. Please address the information to the IETF Executive | this standard. Please address the information to the IETF Executive | |||
Director. | Director. | |||
Full Copyright Statement | Full Copyright Statement | |||
Copyright (C) The Internet Society (2002). All Rights Reserved. | Copyright (C) The Internet Society (2003). All Rights Reserved. | |||
This document and translations of it may be copied and furnished to | This document and translations of it may be copied and furnished to | |||
others, and derivative works that comment on or otherwise explain it | others, and derivative works that comment on or otherwise explain it | |||
or assist in its implmentation may be prepared, copied, published and | or assist in its implmentation may be prepared, copied, published and | |||
distributed, in whole or in part, without restriction of any kind, | distributed, in whole or in part, without restriction of any kind, | |||
provided that the above copyright notice and this paragraph are | provided that the above copyright notice and this paragraph are | |||
included on all such copies and derivative works. However, this | included on all such copies and derivative works. However, this | |||
document itself may not be modified in any way, such as by removing | document itself may not be modified in any way, such as by removing | |||
the copyright notice or references to the Internet Society or other | the copyright notice or references to the Internet Society or other | |||
Internet organizations, except as needed for the purpose of | Internet organizations, except as needed for the purpose of | |||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |