draft-ietf-mpls-lsp-ping-07.txt | draft-ietf-mpls-lsp-ping-08.txt | |||
---|---|---|---|---|
Network Working Group K. Kompella | Network Working Group Kireeti Kompella | |||
Internet Draft Juniper Networks | Internet Draft Juniper Networks, Inc. | |||
Category: Standards Track G. Swallow | Category: Standards Track | |||
Expires: April 2005 Cisco Systems | Expiration Date: August 2005 | |||
October 2004 | George Swallow | |||
Cisco Systems, Inc. | ||||
February 2005 | ||||
Detecting MPLS Data Plane Failures | Detecting MPLS Data Plane Failures | |||
draft-ietf-mpls-lsp-ping-07.txt | ||||
*** DRAFT *** | draft-ietf-mpls-lsp-ping-08.txt | |||
Status of this Memo | Status of this Memo | |||
By submitting this Internet-Draft, I certify that any applicable | By submitting this Internet-Draft, the authors certify that any | |||
patent or other IPR claims of which I am aware have been disclosed, | applicable patent or other IPR claims of which we are aware have been | |||
and any of which I become aware will be disclosed, in accordance with | disclosed, and any of which we become aware will be disclosed, in | |||
RFC 3668. | accordance with RFC 3668. | |||
Internet-Drafts are working documents of the Internet Engineering | This document is an Internet-Draft and is in full conformance with | |||
Task Force (IETF), its areas, and its working groups. Note that | all provisions of Section 5 of RFC3667. Internet-Drafts are working | |||
other groups may also distribute working documents as Internet- | documents of the Internet Engineering Task Force (IETF), its areas, | |||
Drafts. | and its working groups. Note that other groups may also distribute | |||
working documents as Internet-Drafts. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
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/1id-abstracts.html | |||
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 (2004). All Rights Reserved. | Copyright (C) The Internet Society (2005). | |||
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. | |||
Changes since last revision | Changes since last revision | |||
(This section to be removed before publication.) | (This section to be removed before publication.) | |||
Added a new error code for Downstream Mapping Mismatch. | o added clarification of TLV lengths, with examples; | |||
o added a Global Flags field in the header for the | ||||
Split TLV space into "mandatory" and "optional"; updated IANA | 'validate FEC' flag; | |||
allocation policies to reflect this. | o fixed the optional vs. mandatory Types wording; | |||
o added several new FEC sub-TLVs: | ||||
- 12 BGP labeled IPv4 prefix | ||||
+ 12 BGP labeled IPv4 prefix | ||||
+ 13 BGP labeled IPv6 prefix (TBD) | ||||
+ 14 Generic IPv4 prefix | ||||
+ 15 Generic IPv6 prefix | ||||
+ 16 Nil FEC | ||||
o in Downstream Mapping TLV | ||||
+ added an Address Type of IPv6 Unnumbered; | ||||
+ added DS Flags to the DS Map, with 2 defined bits; | ||||
+ renamed Hash key type to multipath type and dropped | ||||
codepoints for which no processing rules have been | ||||
defined; | ||||
o added "Reply TOS byte" TLV; | ||||
o updated processing rules to deal fully deal with implicit | ||||
null labels | ||||
o added text on processing fewer prefixes in DS maps; | ||||
o added text on "Testing LSPs That Are Used to Carry MPLS | ||||
Payloads"; | ||||
o fixed text on non-compatible routers. | ||||
Added two new top-level TLVs for LSR Self Test. | Contents | |||
Added a new optional top-level TLV for "Errored TLVs" | 1 Introduction .............................................. 5 | |||
1.1 Conventions ............................................... 5 | ||||
1.2 Structure of this document ................................ 5 | ||||
1.3 Contributors .............................................. 5 | ||||
2 Motivation ................................................ 6 | ||||
3 Packet Format ............................................. 7 | ||||
3.1 Return Codes .............................................. 10 | ||||
3.2 Target FEC Stack .......................................... 12 | ||||
3.2.1 LDP IPv4 Prefix ........................................... 13 | ||||
3.2.2 LDP IPv6 Prefix ........................................... 13 | ||||
3.2.3 RSVP IPv4 Session ......................................... 14 | ||||
3.2.4 RSVP IPv6 Session ......................................... 14 | ||||
3.2.5 VPN IPv4 Prefix ........................................... 15 | ||||
3.2.6 VPN IPv6 Prefix ........................................... 15 | ||||
3.2.7 L2 VPN Endpoint ........................................... 15 | ||||
3.2.8 FEC 128 Pseudowire (Deprecated) ........................... 16 | ||||
3.2.9 FEC 128 Pseudowire (Current) .............................. 16 | ||||
3.2.10 FEC 129 Pseudowire ........................................ 17 | ||||
3.2.11 BGP Labeled IPv4 Prefix ................................... 17 | ||||
3.2.12 Generic IPv4 Prefix ....................................... 18 | ||||
3.2.13 Generic IPv6 Prefix ....................................... 18 | ||||
3.2.14 Nil FEC ................................................... 19 | ||||
3.3 Downstream Mapping ........................................ 20 | ||||
3.3.1 Multipath Information Encoding ............................ 23 | ||||
3.3.2 Downstream Router and Interface ........................... 24 | ||||
3.4 Pad TLV ................................................... 25 | ||||
3.5 Error Code ................................................ 25 | ||||
3.6 Vendor Enterprise Code .................................... 25 | ||||
3.7 Interface and Label Stack Object .......................... 26 | ||||
3.7.1 IPv4 Interface and Label Stack Object ..................... 26 | ||||
3.7.2 IPv6 Interface and Label Stack Object ..................... 27 | ||||
3.8 Errored TLVs .............................................. 28 | ||||
3.9 Reply TOS Byte TLV ........................................ 29 | ||||
4 Theory of Operation ....................................... 29 | ||||
4.1 Dealing with Equal-Cost Multi-Path (ECMP) ................. 29 | ||||
4.2 Testing LSPs That Are Used to Carry MPLS Payloads ......... 30 | ||||
4.3 Sending an MPLS Echo Request .............................. 31 | ||||
4.4 Receiving an MPLS Echo Request ............................ 31 | ||||
4.5 Sending an MPLS Echo Reply ................................ 35 | ||||
4.6 Receiving an MPLS Echo Reply .............................. 36 | ||||
4.7 Issue with VPN IPv4 and IPv6 Prefixes ..................... 36 | ||||
4.8 Non-compliant Routers ..................................... 37 | ||||
5 References ................................................ 37 | ||||
6 Security Considerations ................................... 38 | ||||
7 IANA Considerations ....................................... 38 | ||||
7.1 Message Types, Reply Modes, Return Codes .................. 39 | ||||
7.2 TLVs ...................................................... 39 | ||||
8 Acknowledgments ........................................... 39 | ||||
A Appendix .................................................. 40 | ||||
A.1 CR-LDP FEC ................................................ 40 | ||||
A.2 Downstream Mapping for CR-LDP ............................. 40 | ||||
1. Introduction | 1. Introduction | |||
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 MPLS LSPs. There are two parts | used to detect data plane failures in MPLS LSPs. There are two parts | |||
to this document: information carried in an MPLS "echo request" and | to this document: information carried in an MPLS "echo request" and | |||
"echo reply"; and mechanisms for transporting the echo reply. The | "echo reply"; and mechanisms for transporting the echo reply. The | |||
first part aims at providing enough information to check correct | first part aims at providing enough information to check correct | |||
operation of the data plane, as well as a mechanism to verify the | operation of the data plane, as well as a mechanism to verify the | |||
data plane against the control plane, and thereby localize faults. | data plane against the control plane, and thereby localize faults. | |||
The second part suggests two methods of reliable reply channels for | The second part suggests two methods of reliable reply channels for | |||
the echo request message, for more robust fault isolation. | the echo request message, for more robust fault isolation. | |||
An important consideration in this design is that MPLS echo requests | An important consideration in this design is that MPLS echo requests | |||
follow the same data path that normal MPLS packets would traverse. | follow the same data path that normal MPLS packets would traverse. | |||
MPLS echo requests are meant primarily to validate the data plane, | MPLS echo requests are meant primarily to validate the data plane, | |||
and secondarily to verify the data plane against the control plane. | and secondarily to verify the data plane against the control plane. | |||
Mechanisms to check the control plane are valuable, but are not cov- | ||||
Mechanisms to check the control plane are valuable, but are not | ered in this document. | |||
covered in this document. | ||||
To avoid potential Denial of Service attacks, it is recommended to | To avoid potential Denial of Service attacks, it is recommended to | |||
regulate the LSP ping traffic going to the control plane. A rate | regulate the LSP 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]. | |||
skipping to change at page 3, line 28 | skipping to change at page 5, line 44 | |||
1.2. Structure of this document | 1.2. Structure of this document | |||
The body of this memo contains four main parts: motivation, MPLS echo | The body of this memo contains four main parts: motivation, MPLS echo | |||
request/reply packet format, LSP ping operation, and a reliable | request/reply packet format, LSP ping operation, and a reliable | |||
return path. It is suggested that first-time readers skip the actual | return path. It is suggested that first-time readers skip the actual | |||
packet formats and read the Theory of Operation first; the document | packet formats and read the Theory of Operation first; the document | |||
is structured the way it is to avoid forward references. | is structured the way it is to avoid forward references. | |||
1.3. Contributors | 1.3. Contributors | |||
The following made vital contributions to all aspects of this | The following made vital contributions to all aspects of this docu- | |||
document, and much of the material came out of debate and discussion | ment, and much of the material came out of debate and discussion | |||
among this group. | among this group. | |||
Ronald P. Bonica, Juniper Networks, Inc. | Ronald P. Bonica, Juniper Networks, Inc. | |||
Dave Cooper, Global Crossing | Dave Cooper, Global Crossing | |||
Ping Pan, Hammerhead Systems | Ping Pan, Hammerhead Systems | |||
Nischal Sheth, Juniper Networks, Inc. | Nischal Sheth, Juniper Networks, Inc. | |||
Sanjay Wadhwa, Juniper Networks, Inc. | Sanjay Wadhwa, Juniper Networks, Inc. | |||
2. Motivation | 2. Motivation | |||
skipping to change at page 4, line 18 | skipping to change at page 6, line 36 | |||
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 | |||
path, at which point it is sent to the control plane of the egress | path, at which point it is sent to the control plane of the egress | |||
LSR, which then verifies whether it is indeed an egress for the FEC. | LSR, which then verifies whether it is indeed an egress for the FEC. | |||
In "traceroute" mode (fault isolation), the packet is sent to the | In "traceroute" mode (fault isolation), the packet is sent to the | |||
control plane of each transit LSR, which performs various checks that | control plane of each transit LSR, which performs various checks that | |||
it is indeed a transit LSR for this path; this LSR also returns | it is indeed a transit LSR for this path; this LSR also returns fur- | |||
further information that helps check the control plane against the | ther information that helps check the control plane against the data | |||
data plane, i.e., that forwarding matches what the routing protocols | plane, i.e., that forwarding matches what the routing protocols | |||
determined as the path. | determined as the path. | |||
One way these tools can be used is to periodically ping a FEC to | One way these tools can be used is to periodically ping a FEC to | |||
ensure connectivity. If the ping fails, one can then initiate a | ensure connectivity. If the ping fails, one can then initiate a | |||
traceroute to determine where the fault lies. One can also | traceroute to determine where the fault lies. One can also periodi- | |||
periodically traceroute FECs to verify that forwarding matches the | cally traceroute FECs to verify that forwarding matches the control | |||
control plane; however, this places a greater burden on transit LSRs | plane; however, this places a greater burden on transit LSRs and thus | |||
and thus should be used with caution. | should be used with caution. | |||
3. Packet Format | 3. Packet Format | |||
An MPLS echo request is a (possibly labelled) IPv4 or IPv6 UDP | An MPLS echo request is a (possibly labelled) IPv4 or IPv6 UDP | |||
packet; the contents of the UDP packet have the following format: | packet; the contents of the UDP packet have 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Version Number | Must Be Zero | | | Version Number | Global Flags | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Message Type | Reply mode | Return Code | Return Subcode| | | Message Type | Reply mode | Return Code | Return Subcode| | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sender's Handle | | | Sender's Handle | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sequence Number | | | Sequence Number | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| TimeStamp Sent (seconds) | | | TimeStamp Sent (seconds) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| TimeStamp Sent (microseconds) | | | TimeStamp Sent (microseconds) | | |||
skipping to change at page 5, line 22 | skipping to change at page 7, line 45 | |||
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 an optional TLV or | The Version Number may not need to be changed if an optional TLV or | |||
sub-TLV is added.) | sub-TLV is added.) | |||
The Global Flags field is a bit vector with the following format: | ||||
0 1 | ||||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| SBZ |V| | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
One flag is defined for now, the V bit; the rest SHOULD be set to | ||||
zero when sending, and ignored on receipt. | ||||
The V (Validate FEC Stack) flag is set to 1 if the sender wants the | ||||
receiver to perform FEC stack validation; if V is 0, the choice is | ||||
left to the receiver. | ||||
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: | |||
Value Meaning | Value Meaning | |||
----- ------- | ----- ------- | |||
1 Do not reply | 1 Do not reply | |||
2 Reply via an IPv4/IPv6 UDP packet | 2 Reply via an IPv4/IPv6 UDP packet | |||
3 Reply via an IPv4/IPv6 UDP packet with Router Alert | 3 Reply via an IPv4/IPv6 UDP packet with Router Alert | |||
4 Reply via application level control channel | 4 Reply via application level control channel | |||
An MPLS echo request with "Do not reply" may be used for one-way | An MPLS echo request with "Do not reply" may be used for one-way con- | |||
connectivity tests; the receiving router may log gaps in the sequence | nectivity tests; the receiving router may log gaps in the sequence | |||
numbers and/or maintain delay/jitter statistics. An MPLS echo | numbers and/or maintain delay/jitter statistics. An MPLS echo | |||
request would normally have "Reply via an IPv4/IPv6 UDP packet"; if | request would normally have "Reply via an IPv4/IPv6 UDP packet"; if | |||
the normal IP return path is deemed unreliable, one may use "Reply | the normal IP return path is deemed unreliable, one may use "Reply | |||
via an IPv4/IPv6 UDP packet with Router Alert" (note that this | via an IPv4/IPv6 UDP packet with Router Alert" (note that this | |||
requires that all intermediate routers understand and know how to | requires that all intermediate routers understand and know how to | |||
forward MPLS echo replies). The echo reply uses the same IP version | forward MPLS echo replies). The echo reply uses the same IP version | |||
number as the received echo request, i.e., an IPv4 encapsulated echo | number as the received echo request, i.e., an IPv4 encapsulated echo | |||
reply is sent in response to an IPv4 encapsulated echo request. | reply is sent in response to an IPv4 encapsulated echo request. | |||
Any application which supports an IP control channel between its | Any application which supports an IP control channel between its con- | |||
control entities may set the Reply Mode to 4 to ensure that replies | trol entities may set the Reply Mode to 4 to ensure that replies use | |||
use that same channel. Further definition of this codepoint is | that same channel. Further definition of this codepoint is applica- | |||
application specific and thus beyond the scope of this docuemnt. | tion specific and thus beyond the scope of this docuemnt. | |||
Return Codes and Subcodes are described in the next section. | Return Codes and Subcodes are described in the next section. | |||
The Sender's Handle is filled in by the sender, and returned | the Sender's Handle is filled in by the sender, and returned | |||
unchanged by the receiver in the echo reply (if any). There are no | unchanged by the receiver in the echo reply (if any). There are no | |||
semantics associated with this handle, although a sender may find | semantics associated with this handle, although a sender may find | |||
this useful for matching up requests with replies. | this useful for matching up requests with replies. | |||
The Sequence Number is assigned by the sender of the MPLS echo | The Sequence Number is assigned by the sender of the MPLS echo | |||
request, and can be (for example) used to detect missed replies. | request, and can be (for example) used to detect missed replies. | |||
The TimeStamp Sent is the time-of-day (in seconds and microseconds, | The TimeStamp Sent is the time-of-day (in seconds and microseconds, | |||
wrt the sender's clock) when the MPLS echo request is sent. The | wrt the sender's clock) when the MPLS echo request is sent. The | |||
TimeStamp Received in an echo reply is the time-of-day (wrt the | TimeStamp Received in an echo reply is the time-of-day (wrt the | |||
skipping to change at page 6, line 37 | skipping to change at page 9, line 26 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Value | | | Value | | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Types are defined below; Length is the length of the Value field in | Types are defined below; Length is the length of the Value field in | |||
octets. The Value field depends on the Type; it is zero padded to | octets. The Value field depends on the Type; it is zero padded to | |||
align to a four-octet boundary. | align to a four-octet boundary. TLVs may be nested within other | |||
TLVs, in which case the nested TLVs are called sub-TLVs. | ||||
Two examples follow. The LDP IPv4 FEC TLV has the following format: | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Type = 1 (LDP IPv4 FEC) | Length = 5 | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| IPv4 prefix | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Prefix Length | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
The Length for this TLV is 5. A FEC TLV which contains just an LDP | ||||
IPv4 FEC sub-TLV has the format: | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Type = 1 (FEC TLV) | Length = 12 | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| sub-Type = 1 (LDP IPv4 FEC) | Length = 5 | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| IPv4 prefix | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Prefix Length | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
A description of the Types and Values of the top level TLVs for LSP | ||||
ping are given below: | ||||
Type # Value Field | Type # Value Field | |||
------ ----------- | ------ ----------- | |||
1 Target FEC Stack | 1 Target FEC Stack | |||
2 Downstream Mapping | 2 Downstream Mapping | |||
3 Pad | 3 Pad | |||
4 Error Code | 4 Error Code | |||
5 Vendor Enterprise Code | 5 Vendor Enterprise Code | |||
6 TBD | 6 TBD | |||
7 IPv4 Interface and Label Stack Object | 7 IPv4 Interface and Label Stack Object | |||
8 IPv6 Interface and Label Stack Object | 8 IPv6 Interface and Label Stack Object | |||
9 Errored TLVs | 9 Errored TLVs | |||
10 Reply TOS Byte | ||||
Types with the high order bit not set (i.e., 1) are mandatory TLVs | Types less than 32768 (i.e., with the high order bit equal to 0) are | |||
that MUST either be supported by an implementation or result in the | mandatory TLVs that MUST either be supported by an implementation or | |||
return code of 2 ("One or more of the TLVs was not understood") being | result in the return code of 2 ("One or more of the TLVs was not | |||
sent in the echo response. | understood") being sent in the echo response. | |||
Types with the high order bit not set (i.e., 0) are optional TLVs | Types greater than or equal to 32768 (i.e., with the high order bit | |||
that MUST be ignored if the implementation does not support or | equal to 1) are optional TLVs that SHOULD be ignored if the implemen- | |||
understand them. | tation does not understand or support them. | |||
3.1. Return Codes | 3.1. Return Codes | |||
The Return Code is set to zero by the sender. The receiver can set | The Return Code is set to zero by the sender. The receiver can set | |||
it to one of the values listed below. The notation <RSC> refers to | it to one of the values listed below. The notation <RSC> refers to | |||
the Return Subcode. This field is filled in with the stack-depth for | the Return Subcode. This field is filled in with the stack-depth for | |||
those codes which specify that. For all other codes the Return | those codes which specify that. For all other codes the Return Sub- | |||
Subcode MUST be set to zero. | code MUST be set to zero. | |||
Value Meaning | Value Meaning | |||
----- ------- | ----- ------- | |||
0 No return code or return code contained in the Error | 0 No return code or return code contained in the Error | |||
Code TLV | Code TLV | |||
1 Malformed echo request received | 1 Malformed echo request received | |||
2 One or more of the TLVs was not understood | 2 One or more of the TLVs was not understood | |||
skipping to change at page 8, line 4 | skipping to change at page 11, line 36 | |||
8 Label switched at stack-depth <RSC> | 8 Label switched at stack-depth <RSC> | |||
9 Label switched but no MPLS forwarding at stack-depth | 9 Label switched but no MPLS forwarding at stack-depth | |||
<RSC> | <RSC> | |||
10 Mapping for this FEC is not the given label at stack | 10 Mapping for this FEC is not the given label at stack | |||
depth <RSC> | depth <RSC> | |||
11 No label entry at stack-depth <RSC> | 11 No label entry at stack-depth <RSC> | |||
12 Protocol not associated with interface at FEC stack | 12 Protocol not associated with interface at FEC stack | |||
depth <RSC> | depth <RSC> | |||
13 Premature termination of ping due to label stack | 13 Premature termination of ping due to label stack | |||
shrinking to a single label | shrinking to a single label | |||
Note 1. The Return Subcode contains the point in the label stack | Note 1 | |||
where processing was terminated. If the RSC is 0, no labels | ||||
were processed. Otherwise the packet would have been label | The Return Subcode contains the point in the label stack" where pro- | |||
switched at depth RSC. | cessing was terminated. If the RSC is 0, no labels were processed. | |||
Otherwise the packet would have been label switched at depth RSC. | ||||
3.2. Target FEC Stack | 3.2. Target FEC Stack | |||
A Target FEC Stack is a list of sub-TLVs. The number of elements is | A Target FEC Stack is a list of sub-TLVs. The number of elements is | |||
determined by the looking at the sub-TLV length fields. | determined by the looking at the sub-TLV length fields. | |||
Sub-Type # Length Value Field | Sub-Type # Length Value Field | |||
---------- ------ ----------- | ---------- ------ ----------- | |||
1 5 LDP IPv4 prefix | 1 5 LDP IPv4 prefix | |||
2 17 LDP IPv6 prefix | 2 17 LDP IPv6 prefix | |||
3 20 RSVP IPv4 Session Query | 3 20 RSVP IPv4 Session Query | |||
4 56 RSVP IPv6 Session Query | 4 56 RSVP IPv6 Session Query | |||
5 Reserved; see Appendix | 5 Reserved; see Appendix | |||
6 13 VPN IPv4 prefix | 6 13 VPN IPv4 prefix | |||
7 25 VPN IPv6 prefix | 7 25 VPN IPv6 prefix | |||
8 14 L2 VPN endpoint | 8 14 L2 VPN endpoint | |||
9 10 "FEC 128" Pseudowire (old) | 9 10 "FEC 128" Pseudowire (old) | |||
10 14 "FEC 128" Pseudowire (new) | 10 14 "FEC 128" Pseudowire (new) | |||
11 13+ "FEC 129" Pseudowire | 11 13+ "FEC 129" Pseudowire | |||
12 10 BGP labeled IPv4 prefix | 12 9 BGP labeled IPv4 prefix | |||
13 ?? BGP labeled IPv6 prefix (TBD) | ||||
14 5 Generic IPv4 prefix | ||||
15 17 Generic IPv6 prefix | ||||
16 4*N Nil FEC | ||||
Other FEC Types will be defined as needed. | Other FEC Types will be defined as needed. | |||
Note that this TLV defines a stack of FECs, the first FEC element | Note that this TLV defines a stack of FECs, the first FEC element | |||
corresponding to the top of the label stack, etc. | corresponding to the top of the label stack, etc. | |||
An MPLS echo request MUST have a Target FEC Stack that describes the | An MPLS echo request MUST have a Target FEC Stack that describes the | |||
FEC stack being tested. For example, if an LSR X has an LDP mapping | FEC stack being tested. For example, if an LSR X has an LDP mapping | |||
for 192.168.1.1 (say label 1001), then to verify that label 1001 does | for 192.168.1.1 (say label 1001), then to verify that label 1001 does | |||
indeed reach an egress LSR that announced this prefix via LDP, X can | indeed reach an egress LSR that announced this prefix via LDP, X can | |||
skipping to change at page 12, line 26 | skipping to change at page 16, line 32 | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Remote PE Address | | | Remote PE Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| VC ID | | | VC ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Encapsulation Type | Must Be Zero | | | Encapsulation Type | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
This FEC will be deprecated, and is retained only for backward | This FEC will be deprecated, and is retained only for backward com- | |||
compatibility. Implementations of LSP ping SHOULD accept and process | patibility. Implementations of LSP ping SHOULD accept and process | |||
this TLV, but SHOULD send LSP ping echo requests with the new TLV | this TLV, but SHOULD send LSP ping echo requests with the new TLV | |||
(see next section), unless explicitly asked by configuration to use | (see next section), unless explicitly asked by configuration to use | |||
the old TLV. | the old TLV. | |||
An LSR receiving this TLV SHOULD use the source IP address of the LSP | An LSR receiving this TLV SHOULD use the source IP address of the LSP | |||
echo request to infer the Sender's PE Address. | echo request to infer the Sender's PE Address. | |||
3.2.9. FEC 128 Pseudowire (Current) | 3.2.9. FEC 128 Pseudowire (Current) | |||
The value field consists of the sender's PE address (the source | The value field consists of the sender's PE address (the source | |||
skipping to change at page 13, line 17 | skipping to change at page 17, line 28 | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sender's PE Address | | | Sender's PE Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Remote PE Address | | | Remote PE Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| PW Type | AGI Length | SAII Length | | | PW Type | AGI Length | SAII Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| TAII Length | AGI Value ... SAII Value ... TAII Value ... | | TAII Length | AGI Value ... SAII Value ... TAII Value ... | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. ... . | . ... . | |||
. . | . . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
... | 0-3 octets of zero padding | | | ... | 0-3 octets of zero padding | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The Length of this TLV is 13 + AGI length + SAII length + TAII | The Length of this TLV is 13 + AGI length + SAII length + TAII | |||
length. Padding is used to make the total length a multiple of 4; | length. Padding is used to make the total length a multiple of 4; | |||
the length of the padding is not included in the Length field. | the length of the padding is not included in the Length field. | |||
3.2.11. BGP Labeled IPv4 Prefix | 3.2.11. BGP Labeled IPv4 Prefix | |||
The value field consists of the BGP Next Hop associated with the NLRI | The value field consists of the BGP Next Hop associated with the NLRI | |||
advertising the prefix and label, the IPv4 prefix (with trailing 0 | advertising the prefix and label, the IPv4 prefix (with trailing 0 | |||
skipping to change at page 13, line 46 | skipping to change at page 18, line 15 | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| BGP Next Hop | | | BGP Next Hop | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IPv4 Prefix | | | IPv4 Prefix | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Prefix Length | Must Be Zero | | | Prefix Length | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
3.2.12. Generic IPv4 Prefix | ||||
The value consists of four octets of an IPv4 prefix followed by one | ||||
octet of prefix length in bits; the format is given below. The IPv4 | ||||
prefix is in network byte order; if the prefix is shorter than 32 | ||||
bits, trailing bits SHOULD be set to zero. This FEC is used if the | ||||
protocol advertising the label is unknown, or may change during the | ||||
course of the LSP. An example is an inter-AS LSP that may be sig- | ||||
naled by LDP in one AS, by RSVP-TE in another AS, and by BGP between | ||||
the ASes, such as is common for inter-AS VPNs. | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| IPv4 prefix | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Prefix Length | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
3.2.13. Generic IPv6 Prefix | ||||
The value consists of sixteen octets of an IPv6 prefix followed by | ||||
one octet of prefix length in bits; the format is given below. The | ||||
IPv6 prefix is in network byte order; if the prefix is shorter than | ||||
128 bits, the trailing bits SHOULD be set to zero. | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| IPv6 prefix | | ||||
| (16 octets) | | ||||
| | | ||||
| | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Prefix Length | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
3.2.14. Nil FEC | ||||
At times labels from the reserved range, e.g. Router Alert and | ||||
Explicit-null, may be added to the label stack for various diagnostic | ||||
purposes such as influencing load-balancing. These labels may have | ||||
no explicit FEC associated with them. The Nil FEC stack is defined | ||||
to allow a Target FEC stack subtlv to be added to the target FEC | ||||
stack to account for such labels so that proper validation can still | ||||
be performed. | ||||
The Length is 4*N octets, where N is the number of Labels contained | ||||
in the Nil FEC stack. | ||||
Labels are 20 bit values treated as numbers. The first label speci- | ||||
fied correspond with the label nearest the top of the label stack. | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Label 1 | SBZ | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Label 2 | SBZ | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
Label 1, Label 2, ... are the actual labels inserted in the label | ||||
stack; the SBZ fields SHOULD be zero when sent, and ignored on | ||||
receipt. | ||||
3.3. Downstream Mapping | 3.3. Downstream Mapping | |||
The Downstream Mapping object is an optional TLV. Only one | The Downstream Mapping object is an optional TLV. Only one Down- | |||
Downstream Mapping request may appear in and echo request. The | stream Mapping request may appear in and echo request. The presence | |||
presence of a Downstream Mapping object is a request that Downstream | of a Downstream Mapping object is a request that Downstream Mapping | |||
Mapping objects be included in the echo reply. If the replying | objects be included in the echo reply. If the replying router is the | |||
router is the destination of the FEC, then a Downstream Mapping TLV | destination of the FEC, then a Downstream Mapping TLV SHOULD NOT be | |||
SHOULD NOT be included in the echo reply. Otherwise Downstream | included in the echo reply. Otherwise Downstream Mapping objects | |||
Mapping objects SHOULD include a Downstream Mapping object for each | SHOULD include a Downstream Mapping object for each interface over | |||
interface over which this FEC could be forwarded. For a more precise | which this FEC could be forwarded. For a more precise definition of | |||
definition of the notion of "downstream", see the section named | the notion of "downstream", see the section named "Downstream". | |||
"Downstream". | ||||
The Length is 16 + M + 4*N octets, where M is the Multipath Length, | The Length is 16 + M + 4*N octets, where M is the Multipath Length, | |||
and N is the number of Downstream Labels. The Value field of a | and N is the number of Downstream Labels. The Value field of a Down- | |||
Downstream Mapping has the following format: | stream 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| MTU | Address Type | Resvd (SBZ) | | | MTU | Address Type | DS Flags | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream IP Address (4 or 16 octets) | | | Downstream IP Address (4 or 16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream Interface Address (4 or 16 octets) | | | Downstream Interface Address (4 or 16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Hash Key Type | Depth Limit | Multipath Length | | | Multipath Type| Depth Limit | Multipath Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. . | . . | |||
. (Multipath Information) . | . (Multipath Information) . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream Label | Protocol | | | Downstream Label | Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Downstream Label | Protocol | | | Downstream Label | Protocol | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Maximum Transmission Unit (MTU) | Maximum Transmission Unit (MTU) | |||
The MTU is the largest MPLS frame (including label stack) that | The MTU is the largest MPLS frame (including label stack) that fits | |||
fits on the interface to the Downstream LSR. | on the interface to the Downstream LSR. | |||
Address Type | Address Type | |||
The Address Type indicates if the interface is numbered or | The Address Type indicates if the interface is numbered or unnumbered | |||
unnumbered and is set to one of the following values: | and is set to one of the following values: | |||
Type # Address Type | Type # Address Type | |||
------ ------------ | ------ ------------ | |||
1 IPv4 | 1 IPv4 Numbered | |||
2 Unnumbered | 2 IPv4 Unnumbered | |||
3 IPv6 | 3 IPv6 Numbered | |||
4 IPv6 Unnumbered | ||||
Reserved | DS Flags | |||
The field marked SBZ SHOULD be set to zero when sending and | The DS Flags field is a bit vector with the following format: | |||
SHOULD be ignored on receipt. | ||||
0 1 2 3 4 5 6 7 | ||||
+-+-+-+-+-+-+-+-+ | ||||
| Rsvd(MBZ) |I|N| | ||||
+-+-+-+-+-+-+-+-+ | ||||
Two flags are defined currently, I and N. The remaining flags MUST | ||||
be set to zero when sending, and ignored on receipt. | ||||
Flag Name and Meaning | ||||
---- ---------------- | ||||
I Interface and Label Stack Object Request | ||||
When this flag is set, it indicates that the replying | ||||
router should include an Interface and Label Stack | ||||
Object in the Echo-Reply message | ||||
N Treat as a Non-IP Packet | ||||
Echo-Request messages will be used to diagnose non-IP | ||||
flows. However, these messages are carried in IP | ||||
packets. For a router which alters its ECMP algorithm | ||||
based on the FEC or deep packet examinition, this flag | ||||
requests that the router treat this as it would if the | ||||
determination of an IP payload had failed. | ||||
Downstream IP Address and Downstream Interface Address | Downstream IP Address and Downstream Interface Address | |||
If the interface to the downstream LSR is numbered, then the | If the interface to the downstream LSR is numbered, then the Address | |||
Address Type MUST be set to IPv4 or IPv6, the Downstream IP | Type MUST be set to IPv4 or IPv6, the Downstream IP Address MUST be | |||
Address MUST be set to either the downstream LSR's Router ID or | set to either the downstream LSR's Router ID or the interface address | |||
the interface address of the downstream LSR, and the Downstream | of the downstream LSR, and the Downstream Interface Address MUST be | |||
Interface Address MUST be set to the downstream LSR's interface | set to the downstream LSR's interface address. | |||
address. | ||||
If the interface to the downstream LSR is unnumbered, the Address | If the interface to the downstream LSR is unnumbered, the Address | |||
Type MUST be Unnumbered, the Downstream IP Address MUST be the | Type MUST be Unnumbered, the Downstream IP Address MUST be the down- | |||
downstream LSR's Router ID (4 octets), and the Downstream | stream LSR's Router ID (4 octets), and the Downstream Interface | |||
Interface Address MUST be set to the index assigned by the | Address MUST be set to the index assigned by the upstream LSR to the | |||
upstream LSR to the interface. | interface. | |||
Multipath Type | ||||
The follow Mutipath Types are defined: | ||||
Key Type Multipath Information | ||||
--- ---------------- --------------------- | ||||
0 no multipath (empty; M = 0) | ||||
2 IP address IP addresses | ||||
4 IP address range low/high address pairs | ||||
8 Bit-masked IPv4 IP address prefix and bit mask | ||||
address set | ||||
9 Bit-masked label set Label prefix and bit mask | ||||
Type 0 indicates that all packets will be forwarded out this one | ||||
interface. | ||||
Types 2, 4, 8 and 9 specify that the supplied Multipath Information | ||||
will serve to execise this path. | ||||
Depth Limit | ||||
The Depth Limit is applicable only to a label stack, and is the maxi- | ||||
mum number of labels considered in the hash; this SHOULD be set to | ||||
zero if unspecified or unlimited. | ||||
Multipath Length | Multipath Length | |||
The length in octets of the Multipath Information. | The length in octets of the Multipath Information. | |||
Multipath Information | ||||
Address or label values encoded according to the Multipath Type. See | ||||
the next section below for encoding details. | ||||
Downstream Label(s) | Downstream Label(s) | |||
The set of labels in the label stack as it would have appeared if | The set of labels in the label stack as it would have appeared if | |||
this router were forwarding the packet through this interface. | this router were forwarding the packet through this interface. Any | |||
Any Implicit Null labels are explicitly inluded. Labels are | Implicit Null labels are explicitly inluded. Labels are treated as | |||
treated as numbers, i.e. they are right justified in the field. | numbers, i.e. they are right justified in the field. | |||
A Downstream Label is 24 bits, in the same format as an MPLS | A Downstream Label is 24 bits, in the same format as an MPLS label | |||
label minus the TTL field, i.e., the MSBit of the label is bit 0, | minus the TTL field, i.e., the MSBit of the label is bit 0, the LSbit | |||
the LSbit is bit 19, the EXP bits are bits 20-22, and bit 23 is | is bit 19, the EXP bits are bits 20-22, and bit 23 is the S bit. The | |||
the S bit. The replying router SHOULD fill in the EXP and S | replying router SHOULD fill in the EXP and S bits; the LSR receiving | |||
bits; the LSR receiving the echo reply MAY choose to ignore these | the echo reply MAY choose to ignore these bits. | |||
bits. | ||||
Protocol | Protocol | |||
The Protocol is taken from the following table: | The 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 | |||
Depth Limit | 3.3.1. Multipath Information Encoding | |||
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. | ||||
Multipath Information | ||||
The multipath information encodes labels or addresses which will | The multipath information encodes labels or addresses which will | |||
exercise this path. The multipath informaiton depends on the | exercise this path. The multipath informaiton depends on the multi- | |||
hash key type. The contents of the field are shown in the table | path type. The contents of the field are shown in the table above. | |||
above. IP addresses are drawn from the range 127/8. Labels are | IP addresses are drawn from the range 127/8. Labels are treated as | |||
treated as numbers, i.e. they are right justified in the field. | numbers, i.e. they are right justified in the field. Label and | |||
Label and Address pairs MUST NOT overlap and MUST be in ascending | Address pairs MUST NOT overlap and MUST be in ascending sequence. | |||
sequence. | ||||
Hash key 8 allows a denser encoding of IP address. The IPv4 | Type 8 allows a denser encoding of IP address. The IPv4 prefix is | |||
prefix is formatted as a base IPv4 address with the non-prefix | formatted as a base IPv4 address with the non-prefix low order bits | |||
low order bits set to zero. The maximum prefix length is 27. | set to zero. The maximum prefix length is 27. Following the prefix | |||
Following the prefix is a mask of length 2^(32-prefix length) | is a mask of length 2^(32-prefix length) bits. Each bit set to one | |||
bits. Each bit set to one represents a valid address. The | represents a valid address. The address is the base IPv4 address | |||
address is the base IPv4 address plus the position of the bit in | plus the position of the bit in the mask where the bits are numbered | |||
left to right begining with zero. | ||||
Type 9 allows a denser encoding of Labels. The label prefix is for- | ||||
matted as a base label value with the non-prefix low order bits set | ||||
to zero. The maximum prefix (including leading zeros due to encod- | ||||
ing) length is 27. Following the prefix is a mask of length | ||||
2^(32-prefix length) bits. Each bit set to one represents a valid | ||||
Label. The label is the base label plus the position of the bit in | ||||
the mask where the bits are numbered left to right begining with | the mask where the bits are numbered left to right begining with | |||
zero. | zero. | |||
Hash key 9 allows a denser encoding of Labels. The label prefix | If the received multipath information is non-null, the labels and IP | |||
is formatted as a base label value with the non-prefix low order | addresses MUST be picked from the set provided. If none of these | |||
bits set to zero. The maximum prefix (including leading zeros | labels or addresses map to a particular downstream interface, then | |||
due to encoding) length is 27. Following the prefix is a mask of | for that interface, the type MUST be set to 0. If the received mul- | |||
length 2^(32-prefix length) bits. Each bit set to one represents | tipath information is null, the receiver simply returns null. | |||
a valid Label. The label is the base label plus the position of | ||||
the bit in the mask where the bits are numbered left to right | ||||
begining with zero. | ||||
If the received multipath information is non-null, the labels and | ||||
IP addresses MUST be picked from the set provided or the Hash Key | ||||
Type MUST be set to 7. If the received multipath information is | ||||
null, the receiver simply returns null. | ||||
For example, suppose LSR X at hop 10 has two downstream LSRs Y | For example, suppose LSR X at hop 10 has two downstream LSRs Y and Z | |||
and Z for the FEC in question. X could return Hash Key Type 4, | for the FEC in question. The received X could return Hash Key Type | |||
with low/high IP addresses of 1.1.1.1->1.1.1.255 for downstream | 4, with low/high IP addresses of 1.1.1.1->1.1.1.255 for downstream | |||
LSR Y and 2.1.1.1->2.1.1.255 for downstream LSR Z. The head end | LSR Y and 2.1.1.1->2.1.1.255 for downstream LSR Z. The head end | |||
reflects this information to LSR Y. Y, which has three | reflects this information to LSR Y. Y, which has three downstream | |||
downstream LSRs U, V and W, computes that 1.1.1.1->1.1.1.127 | LSRs U, V and W, computes that 1.1.1.1->1.1.1.127 would go to U and | |||
would go to U and 1.1.1.128-> 1.1.1.255 would go to V. Y would | 1.1.1.128-> 1.1.1.255 would go to V. Y would then respond with 3 | |||
then respond with 3 Downstream Mappings: to U, with Hash Key Type | Downstream Mappings: to U, with Hash Key Type 4 (1.1.1.1->1.1.1.127); | |||
4 (1.1.1.1->1.1.1.127); to V, with Hash Key Type 4 | to V, with Hash Key Type 4 (1.1.1.127->1.1.1.255); and to W, with | |||
(1.1.1.127->1.1.1.255); and to W, with Hash Key Type 7. | Hash Key Type 7. | |||
3.3.1. "Downstream" | Note that computing multi-path information may impose a significant | |||
processing burden on the receiver. A receiver MAY thus choose to | ||||
process a subset of the received prefixes. The sender, on receiving | ||||
a reply to a Downstream Map with partial information, SHOULD assume | ||||
that the prefixes missing in the reply were skipped by the receiver, | ||||
and MAY re-request information about them in a new echo request. | ||||
3.3.2. Downstream Router and Interface | ||||
The notion of "downstream router" and "downstream interface" should | The notion of "downstream router" and "downstream interface" should | |||
be explained. Consider an LSR X. If a packet that was originated | be explained. Consider an LSR X. If a packet that was originated | |||
with TTL n>1 arrived with outermost label L at LSR X, X must be able | with TTL n>1 arrived with outermost label L at LSR X, X must be able | |||
to compute which LSRs could receive the packet if it was originated | to compute which LSRs could receive the packet if it was originated | |||
with TTL=n+1, over which interface the request would arrive and what | with TTL=n+1, over which interface the request would arrive and what | |||
label stack those LSRs would see. (It is outside the scope of this | label stack those LSRs would see. (It is outside the scope of this | |||
document to specify how this computation is done.) The set of these | document to specify how this computation is done.) The set of these | |||
LSRs/interfaces are the downstream routers/interfaces (and their | LSRs/interfaces are the downstream routers/interfaces (and their | |||
corresponding labels) for X with respect to L. Each pair of | corresponding labels) for X with respect to L. Each pair of down- | |||
downstream router and interface requires a separate Downstream | stream router and interface requires a separate Downstream Mapping to | |||
Mapping to be added to the reply. (Note that there are multiple | be added to the reply. (Note that there are multiple Downstream | |||
Downstream Label fields in each TLV as the incoming label L may be | Label fields in each TLV as the incoming label L may be swapped with | |||
swapped with a label stack.) | 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 the MPLS echo | case. X needs to figure out what LSRs would receive the MPLS echo | |||
request for a given FEC Stack that X originates with TTL=1. | request for a given FEC Stack that X originates with TTL=1. | |||
The set of downstream routers at X may be alternative paths (see the | The set of downstream routers at X may be alternative paths (see the | |||
discussion below on ECMP) or simultaneous paths (e.g., for MPLS | discussion below on ECMP) or simultaneous paths (e.g., for MPLS mul- | |||
multicast). In the former case, the Multipath sub-field is used as a | ticast). 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 | hint to the sender as to how it may influence the choice of these | |||
alternatives. The "No of Multipaths" is the number of IP | alternatives. The "No of Multipaths" is the number of IP | |||
Address/Next Label fields. The Hash Key Type is taken from the | Address/Next Label fields. | |||
following table: | ||||
Key Type Multipath Information | ||||
--- ---------------- --------------------- | ||||
0 no multipath (empty; M = 0) | ||||
1 label labels | ||||
2 IP address IP addresses | ||||
3 label range low/high label pairs | ||||
4 IP address range low/high address pairs | ||||
5 no more labels (empty; M = 0) | ||||
6 All IP addresses (empty; M = 0) | ||||
7 no match (empty; M = 0) | ||||
8 Bit-masked IPv4 IP address prefix and bit mask | ||||
address set | ||||
9 Bit-masked label set Label prefix and bit mask | ||||
Type 0 indicates that all packets will be forwarded out this one | ||||
interface. | ||||
Types 1, 2, 3, 4, 8 and 9 specify that the supplied Multipath | ||||
Information will serve to execise this path. | ||||
Types 5 and 6 are TBD. | ||||
Type 7 indicates that no matches are possible given the Multipath | ||||
Information in the received DS mapping information. | ||||
3.4. Pad TLV | 3.4. 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 | |||
----- ------- | ----- ------- | |||
1 Drop Pad TLV from reply | 1 Drop Pad TLV from reply | |||
2 Copy Pad TLV to reply | 2 Copy Pad TLV to reply | |||
3-255 Reserved for future use | 3-255 Reserved for future use | |||
3.5. Error Code | 3.5. 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 pro- | |||
provide a mechanism for a more elaborate error reporting structure, | vide a mechanism for a more elaborate error reporting structure, | |||
should the reason arise. | should the reason arise. | |||
3.6. Vendor Enterprise Code | 3.6. Vendor Enterprise Code | |||
The Length is always 4; the value is the SMI Enterprise code, in | The Length is always 4; the value is the SMI Enterprise code, in net- | |||
network octet order, of the vendor with a Vendor Private extension to | work octet order, of the vendor with a Vendor Private extension to | |||
any of the fields in the fixed part of the message, in which case | any of the fields in the fixed part of the message, in which case | |||
this TLV MUST be present. If none of the fields in the fixed part of | this TLV MUST be present. If none of the fields in the fixed part of | |||
the message have vendor private extensions, this TLV is OPTIONAL. | the message have vendor private extensions, this TLV is OPTIONAL. | |||
3.7. Interface and Label Stack Object | 3.7. Interface and Label Stack Object | |||
The Interface and Label Stack Object is an optional TLV. It is used | The Interface and Label Stack Object is an optional TLV. It is used | |||
in a Reply message to report the interface on which the Request | in a Reply message to report the interface on which the Request Mes- | |||
Message was received and the label stack which was on the packet when | sage was received and the label stack which was on the packet when it | |||
it was received. Only one such object may appear. The purpose of | was received. Only one such object may appear. The purpose of the | |||
the object is to allow the upstream router to obtain the exact | object is to allow the upstream router to obtain the exact interface | |||
interface and label stack information as it appears at the replying | and label stack information as it appears at the replying LSR. It | |||
LSR. It has two formats, type 7 for IPv4 and type 8 for IPv6 (to be | has two formats, type 7 for IPv4 and type 8 for IPv6 (to be assigned | |||
assigned by IANA). | by IANA). | |||
3.8. IPv4 Interface and Label Stack Object | 3.7.1. IPv4 Interface and Label Stack Object | |||
The Length is 8 + 4*N octets, N is the number of Downstream Labels. | The Length is 8 + 4*N octets, N is the number of Downstream Labels. | |||
The value field of a Interface and Label Stack TLV has the following | The value field of a Interface and Label Stack TLV has the following | |||
format: | 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 Address | | | Downstream IPv4 Address | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 20, line 4 | skipping to change at page 27, line 11 | |||
Downstream Interface Address | Downstream Interface Address | |||
If the address type is 'IPv4', the interface address field MUST | If the address type is 'IPv4', the interface address field MUST | |||
MUST be set to the downstream LSR's interface address. | MUST be set to the downstream LSR's interface address. | |||
If the address type is 'unnumbered', interface address field | If the address type is 'unnumbered', interface address field | |||
MUST be set to the index assigned by the downstream LSR to the | MUST be set to the index assigned by the downstream LSR to the | |||
interface. | interface. | |||
Label Stack | Label Stack | |||
The label stack of the received echo request message. If any | The label stack of the received echo request message. If any | |||
TTL values have been changed by this router, they SHOULD be | TTL values have been changed by this router, they SHOULD be | |||
restored. | restored. | |||
3.9. IPv6 Interface and Label Stack Object | 3.7.2. IPv6 Interface and Label Stack Object | |||
The Length is 32 + 4*N octets, N is the number of Downstream Labels. | The Length is 32 + 4*N octets, N is the number of Downstream Labels. | |||
The value field of a Interface and Label Stack TLV has the following | The value field of a Interface and Label Stack TLV has the following | |||
format: | 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 IPv6 Address | | | Downstream IPv6 Address | | |||
| Downstream IPv6 Address (Cont.) | | | Downstream IPv6 Address (Cont.) | | |||
skipping to change at page 21, line 16 | skipping to change at page 28, line 24 | |||
interface address field MUST be set to the index assigned by | interface address field MUST be set to the index assigned by | |||
the downstream LSR to the interface. The remaining 12 octets | the downstream LSR to the interface. The remaining 12 octets | |||
MUST be set to zero. | MUST be set to zero. | |||
Label Stack | Label Stack | |||
The label stack of the received echo request message. If any | The label stack of the received echo request message. If any | |||
TTL values have been changed by this router, they SHOULD be | TTL values have been changed by this router, they SHOULD be | |||
restored. | restored. | |||
3.10. Errored TLVs | 3.8. Errored TLVs | |||
The following TLV is an optional TLV defined to be sent back to the | The following TLV is an optional TLV defined to be sent back to the | |||
sender of an Echo Request to inform it of Mandatory TLVs either not | sender of an Echo Request to inform it of Mandatory TLVs either not | |||
supported by an implementation, or parsed and found to be in error. | supported by an implementation, or parsed and found to be in error. | |||
The Value field contains the TLVs not understood encoded as subtlvs. | The Value field contains the TLVs not understood encoded as subtlvs. | |||
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 = 32678 | Length | | | Type = 9 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Value | | | Value | | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
3.9. Reply TOS Byte TLV | ||||
This TLV is used by the originator of the echo request to request | ||||
that a echo reply be sent with the IP header TOS byte set to | ||||
the value specified in the TLV. This TLV has a length of 4 with | ||||
the following value field. | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Reply-TOS Byte| Must be zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
4. Theory of Operation | 4. Theory of Operation | |||
An MPLS echo request is used to test a particular LSP. The LSP to be | 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 | 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 | 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 | 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 | 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 | FEC stack consists of a single element that captures the RSVP Session | |||
and Sender Template which uniquely identifies the LSP. | and Sender Template which uniquely identifies the LSP. | |||
FEC stacks can be more complex. For example, one may wish to test a | 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 | 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 | 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 | first being a VPN IPv4 prefix, and the second being an LDP IPv4 pre- | |||
prefix. If the underlying (LDP) tunnel were not known, or was | fix. If the underlying (LDP) tunnel were not known, or was consid- | |||
considered irrelevant, the FEC stack could be a single element with | ered irrelevant, the FEC stack could be a single element with just | |||
just the VPN IPv4 sub-TLV. | the VPN IPv4 sub-TLV. | |||
When an MPLS echo request is received, the receiver is expected to do | 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 | 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 | are both healthy (for the FEC stack being pinged), and that the two | |||
planes are in sync. | planes are in sync. | |||
4.1. Dealing with Equal-Cost Multi-Path (ECMP) | 4.1. Dealing with Equal-Cost Multi-Path (ECMP) | |||
LSPs need not be simple point-to-point tunnels. Frequently, a single | LSPs need not be simple point-to-point tunnels. Frequently, a single | |||
LSP may originate at several ingresses, and terminate at several | LSP may originate at several ingresses, and terminate at several | |||
egresses; this is very common with LDP LSPs. LSPs for a given FEC | 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, | 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 | there may also be several different LSPs to choose from to get to the | |||
desired endpoint. Finally, LSPs may have backup paths, detour paths | desired endpoint. Finally, LSPs may have backup paths, detour paths | |||
and other alternative paths to take should the primary LSP go down. | 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 | 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, | 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 | so choosing among multiple LSPs at the ingress is not an issue. The | |||
problem of probing the various flavors of backup paths that will | problem of probing the various flavors of backup paths that will typ- | |||
typically not be used for forwarding data unless the primary LSP is | ically not be used for forwarding data unless the primary LSP is down | |||
down will not be addressed here. | will not be addressed here. | |||
Since the actual LSP and path that a given packet may take may not be | 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 | known a priori, it is useful if MPLS echo requests can exercise all | |||
possible paths. This, while desirable, may not be practical, because | possible paths. This, while desirable, may not be practical, because | |||
the algorithms that a given LSR uses to distribute packets over | the algorithms that a given LSR uses to distribute packets over | |||
alternative paths may be proprietary. | alternative paths may be proprietary. | |||
To achieve some degree of coverage of alternate paths, there is a | To achieve some degree of coverage of alternate paths, there is a | |||
certain lattitude in choosing the destination IP address and source | certain lattitude in choosing the destination IP address and source | |||
UDP port for an MPLS echo request. This is clearly not sufficient; | 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 | in the case of traceroute, more lattitude is offered by means of the | |||
"Multipath Exercise" sub-TLV of the Downstream Mapping TLV. This is | "Multipath Exercise" sub-TLV of the Downstream Mapping TLV. This is | |||
used as follows. An ingress LSR periodically sends an MPLS | used as follows. An ingress LSR periodically sends an MPLS tracer- | |||
traceroute message to determine whether there are multipaths for a | oute message to determine whether there are multipaths for a given | |||
given LSP. If so, each hop will provide some information how each of | LSP. If so, each hop will provide some information how each of its | |||
its downstreams can be exercised. The ingress can then send MPLS | downstreams can be exercised. The ingress can then send MPLS echo | |||
echo requests that exercise these paths. If several transit LSRs | requests that exercise these paths. If several transit LSRs have | |||
have ECMP, the ingress may attempt to compose these to exercise all | ECMP, the ingress may attempt to compose these to exercise all possi- | |||
possible paths. However, full coverage may not be possible. | ble paths. However, full coverage may not be possible. | |||
4.2. Sending an MPLS Echo Request | 4.2. Testing LSPs That Are Used to Carry MPLS Payloads | |||
To detect certain LSP breakages, it may be necessary to encapsulate | ||||
an MPLS echo request packet with at least one additional label when | ||||
testing LSPs that are used to carry MPLS payloads (such as LSPs used | ||||
to carry L2VPN and L3VPN traffic. For example, when testing LDP or | ||||
RSVP-TE LSPs, just sending an MPLS echo request packet may not detect | ||||
instances where the router immediately upstream of the destination of | ||||
the LSP ping may forward the MPLS echo request successfully over an | ||||
interface not configured to carry MPLS payloads because of the use of | ||||
penultimate hop popping. Since the receiving router has no means to | ||||
differentiate whether the IP packet was sent unlabeled or implicitly | ||||
labeled, the addition of labels shimmed above the MPLS echo request | ||||
(using the Nil FEC) will prevent a router from forwarding such a | ||||
packet out unlabeled interfaces. | ||||
4.3. 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). The Router Alert option | (assigned by IANA for MPLS echo requests). The Router Alert option | |||
is set in the IP header. | is set in the IP header. | |||
If the echo request is labelled, one may (depending on what is being | If the echo request is labelled, one may (depending on what is being | |||
pinged) set the TTL of the innermost label to 1, to prevent the ping | pinged) set the TTL of the innermost label to 1, to prevent the ping | |||
request going farther than it should. Examples of this include | request going farther than it should. Examples of this include ping- | |||
pinging a VPN IPv4 or IPv6 prefix, an L2 VPN end point or a | ing a VPN IPv4 or IPv6 prefix, an L2 VPN end point or a pseudowire. | |||
pseudowire. This can also be accomplished by inserting a router | This can also be accomplished by inserting a router alert label above | |||
alert label above this label; however, this may lead to the undesired | this label; however, this may lead to the undesired side effect that | |||
side effect that MPLS echo requests take a different data path than | MPLS echo requests take a different data path than actual data. | |||
actual data. | ||||
In "ping" mode (end-to-end connectivity check), the TTL in the | In "ping" mode (end-to-end connectivity check), the TTL in the outer- | |||
outermost label is set to 255. In "traceroute" mode (fault isolation | most 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. | |||
The TimeStamp Sent is set to the time-of-day (in seconds and | The TimeStamp Sent is set to the time-of-day (in seconds and | |||
microseconds) that the echo request is sent. The TimeStamp Received | microseconds) that the echo request is sent. The TimeStamp Received | |||
is set to zero. | is set to zero. | |||
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 a | |||
Downstream Mapping TLV. | ||||
In the "traceroute" mode, the echo request SHOULD contain one or more | ||||
Downstream Mapping TLVs. For TTL=1, all the downstream routers (and | ||||
corresponding labels) for the sender with respect to the FEC Stack | ||||
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 | ||||
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.3. Receiving an MPLS Echo Request | 4.4. Receiving an MPLS Echo Request | |||
An LSR X 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 that are | to ensure that it is a well-formed packet, and that the TLVs that are | |||
not marked "Ignore" are understood. If not, X SHOULD send an MPLS | not marked "Ignore" are understood. If not, X SHOULD send an MPLS | |||
echo reply with the Return Code set to "Malformed echo request | echo reply with the Return Code set to "Malformed echo request | |||
received" or "TLV not understood" (as appropriate), and the Subcode | received" or "TLV not understood" (as appropriate), and the Subcode | |||
set to zero. In the latter case, the misunderstood TLVs (only) are | set to zero. In the latter case, the misunderstood TLVs (only) are | |||
included in the reply. | included in the reply. | |||
If the echo request is good, X notes the interface I over which the | If the echo request is good, X notes the interface I over which the | |||
echo was received, and the label stack with which it came. | echo was received, and the label stack with which it came. | |||
X matches up the labels in the received label stack with the FECs | X matches up the labels in the received label stack with the FECs | |||
contained in the FEC stack. The matching is done beginning at the | contained in the FEC stack. The matching is done beginning at the | |||
bottom of both stacks, and working up. For reporting purposes the | bottom of both stacks, and working up. For reporting purposes the | |||
bottom of stack is consided to be stack-depth of 1. This is to | bottom of stack is consided to be stack-depth of 1. This is to | |||
establish an absolute reference for the case where the stack may have | establish an absolute reference for the case where the stack may have | |||
more labels than are in the FEC stack. | more labels than are in the FEC stack. | |||
If there are more FECs than labels, the extra FECs are assumed to | If there are more FECs than labels, the extra FECs are assumed to | |||
correspond to Implicit Null Labels. That is, extra Implicit Null | correspond to Implicit Null Labels. Thus for the processing below, | |||
Labels are added to the top of the received label stack and the stack | there is never the case where there is a FEC with no corresponding | |||
depth is set to the depth of the FEC stack. Thus for the processing | label. Further the label operation associated with an assumed Null | |||
below, there is never the case where there is a FEC with no | Label is 'pop and continue processing'. | |||
corresponding label. Further, the label operation associated with an | ||||
assumed Null Label is 'pop and continue processing'. | ||||
Note: in all the error codes listed in this draft a stack-depth of 0 | Note: in all the error codes listed in this draft a stack-depth of 0 | |||
means "no value specified". This allows compatibility with existing | means "no value specified". This allows compatibility with existing | |||
implementations which do not use the Return Subcode field. | implementations which do not use the Return Subcode field. | |||
X sets a variable, call it current-stack-depth, to the number of | X sets two variables, called FEC-stack-depth and Label-stack-depth, | |||
labels in the received label stack. Processing now continues with | to the number of labels in the received label stack. If the label- | |||
the following steps: | stack-depth is 0, assume there is one implicit null label and set | |||
label-stack-depth to 1. Processing now continues with the following | ||||
steps: | ||||
1. Check if there is a FEC corresponding to the current-stack- | Label_Validation: | |||
depth. If there is, go to step 2. If not, check if the label is | ||||
valid on interface I. If it is, continue with step 4. Otherwise | ||||
X MUST send an MPLS echo reply with a Return Code 11, "No label | ||||
entry at stack-depth" and a Return Subcode set to current-stack- | ||||
depth. | ||||
2. Check the FEC at the current-stack-depth to determine what | If the label at Label-stack-depth is valid, goto Label_Operation. | |||
protocol would be used to advertise it. If it can determine that | If not, set Best-return-code to 11, "No label entry at stack-depth" | |||
no protocol associated with interface I, would have advertised a | and Best-return-subcode to Label-stack-depth. Goto | |||
FEC of that FEC-Type, X MUST send an MPLS echo reply with a | Send_Reply_Packet. | |||
Return Code 12, "Protocol not associated with interface at FEC | ||||
stack-depth" and a Return Subcode set to current-stack-depth. | ||||
3. Check that the mapping for the FEC at the current-stack-depth is | Label_Operation: | |||
the corresponding label. | ||||
If no mapping for the FEC exists, X MUST send an MPLS echo reply | Switch on label operation. | |||
with a Return Code 4, "Replying router has no mapping for the FEC | ||||
at stack-depth" and a Return Subcode set to current- stack-depth. | ||||
If a mapping is found, but the mapping is not the corresponding | Case: Pop and Continue Processing (Note: this includes | |||
label, X MUST send an MPLS echo reply with a Return Code 10, | Explicit_Null and Router_Alert) | |||
"Mapping for this FEC is not the given label at stack-depth" and | ||||
a Return Subcode set to current-stack-depth. | ||||
4. X determines the label operation. If the operation is to pop and | If Label-stack-depth is greater than 1, decrement Label-stack- | |||
continue processing, X checks the current-stack-depth. If it is | depth and goto Label_Validation. Otherwise, set FEC-stack-depth | |||
one, X MUST send an MPLS echo reply with a Return Code 3, | to 1, set Best-return-code to 3 "Replying router is an egress for | |||
"Replying router is an egress for the FEC at stack depth" and a | the FEC at stack depth", set Best-return-subcode to 1 and goto | |||
Return Subcode set to one. Otherwise, X decrements current-stack- | Egress_Processing. | |||
depth and goes back to step 1. | ||||
If the label operation is pop and switch based on the popped | Case: Swap or Pop and Switch based on Popped Label | |||
label, X then checks if it is valid to forward a labelled packet. | ||||
If it is, X MUST send an MPLS echo reply with a Return Code 8, | ||||
"Label switched at stack-depth" and a Return Subcode set to | ||||
current-stack-depth. If it is not valid to forward a labelled | ||||
packet, X MUST send an MPLS echo reply with a Return Code 9, | ||||
"Label switched but no MPLS forwarding at stack-depth" and a | ||||
Return Subcode set to current-stack-depth. This return code is | ||||
sent even if current-stack-depth is one. | ||||
If the label operation is swap, X MUST send an MPLS echo reply | If the label operation is either swap or pop and switch based on | |||
with a Return Code 8, "Label switched at stack-depth" and a | the popped label, Best-return-code to 8, "Label switched at | |||
Return Subcode set to current-stack-depth. | stack-depth" and Best-return-subcode to Label-stack-depth. | |||
If the MPLS echo request contains a downstream mapping TLV, and the | If a Downstream Mapping TLV is present, a Downstream mapping TLVs | |||
MPLS echo reply has either a Return Code of 8, or a Return Code of 9 | SHOULD be created for each multipath. | |||
with a Return Subcode of 1 then Downstream mapping TLVs SHOULD be | ||||
included for each multipath. | ||||
X uses the procedure in the next subsection to send the echo reply. | Determine the output interface. If it is not valid to forward a | |||
labelled packet on this interface, set Best-return-code to Return | ||||
Code 9, "Label switched but no MPLS forwarding at stack-depth" | ||||
and set Best-return-subcode to Label-stack-depth and goto | ||||
Send_Reply_Packet. (Note: this return code is set even if Label- | ||||
stack-depth is one.) | ||||
4.4. Sending an MPLS Echo Reply | If no Downstream Mapping TLV is present, or the Downstream IP | |||
Address is set to the All-Routers multicast address goto | ||||
Send_Reply_Packet. | ||||
Verify that the IP address, interface address and label stack | ||||
match the received interface and label stack. If not, set Best- | ||||
return-code to 5, "Downstream Mapping Mis-match". A Received | ||||
Interface and Label Stack TLV SHOULD be created. Goto | ||||
Send_Reply_Packet. | ||||
If the "Validate FEC Stack" flag is not set, goto | ||||
Send_Reply_Packet. | ||||
Locate the label at Label-stack-depth in the Downstream Labels | ||||
and set FEC-stack-depth to that depth. (Note: If the Downstream | ||||
Labels contain one or more Implicit Null labels, this may be at a | ||||
depth greater than Label-stack-depth. | ||||
If the depth of the FEC stack is greater than or equal to FEC- | ||||
stack-depth, Perform FEC Checking. If FEC-status is 2, set Best- | ||||
return-code to 10, "Mapping for this FEC is not the given label | ||||
at stack-depth". | ||||
If the return code is 1 set Best-return-code to FEC-return-code | ||||
and Best-return-subcode to FEC-stack-depth. | ||||
Goto Send_Reply_Packet. | ||||
Egress_Processing: | ||||
If no Downstream Mapping TLV is present, goto | ||||
Egress_FEC_Validation. | ||||
Verify that the IP address, interface address and label stack match | ||||
the received interface and label stack. If not, set Best-return- | ||||
code to 5, "Downstream Mapping Mis-match". A Received Interface | ||||
and Label Stack TLV SHOULD be created. Goto Send_Reply_Packet. | ||||
Egress_FEC_Validation: | ||||
Perform FEC checking. If FEC-status is 1, set Best-return-code | ||||
to FEC-code and Best-return-subcode to FEC-stack-depth. Goto | ||||
Send_Reply_Packet. | ||||
Increment FEC-stack-depth. If FEC-stack-depth is greater than | ||||
the number of FECs in the FEC-stack, goto Send_Reply_Packet. If | ||||
FEC-status is 0, increment Label-stack-depth. Goto | ||||
Egress_FEC_Validation. | ||||
Send_Reply_Packet: | ||||
Send an MPLS echo reply with a Return Code of Best-return-code, | ||||
and a Return Subcode of Best-return-subcode. Include any TLVs | ||||
created during the above process. The procedures for sending the | ||||
echo reply are found in the next subsection below. | ||||
FEC_Checking: | ||||
This routine accepts a FEC, Label, and Interface. It returns two | ||||
values, FEC-status and FEC-return-code, both of which are | ||||
initialized to 0. | ||||
If the FEC is the Nil FEC, check that Label is either | ||||
Explicit_Null or Router_Alert. If so return. Else | ||||
set FEC-return-code to 10, "Mapping for this FEC is not the given | ||||
label at stack-depth". Set FEC-status to 1 and return. | ||||
Check that the label mapping for FEC. If no mapping exists, set | ||||
FEC-return-code to Return 4, "Replying router has no mapping for | ||||
the FEC at stack-depth". Set FEC-status to 1. Return. | ||||
If the label mapping for FEC is Implicit Null, set FEC-status to | ||||
2. Goto Check_Protocol. | ||||
If the label mapping for FEC is Label, goto Check_Protocol. Else | ||||
set FEC-return-code to 10, "Mapping for this FEC is not the given | ||||
label at stack-depth". Set FEC-status to 1 and return. | ||||
Check_Protocol: | ||||
Check what protocol would be used to advertise FEC. If it can be | ||||
determined that no protocol associated with interface I would | ||||
have advertised a FEC of that FEC-Type, set FEC-return-code to | ||||
12, "Protocol not associated with interface at FEC stack-depth". | ||||
Set FEC-status to 1. Return. | ||||
4.5. 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 LSP | of the replier; the source port is the well-known UDP port for LSP | |||
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. If the reply is sent over an LSP, the | 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 | topmost label MUST in this case be the Router Alert label (1) (see | |||
skipping to change at page 26, line 25 | skipping to change at page 35, line 41 | |||
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 replying router is the destination of the FEC, then Downstream | |||
SHOULD compute its downstream routers and corresponding labels for | Mapping TLVs SHOULD NOT be included in the echo reply. | |||
the incoming label, and add Downstream Mapping TLVs for each one to | ||||
the echo reply it sends back. | ||||
4.5. Receiving an MPLS Echo Reply | If the echo request contains a Downstream Mapping TLV, and the reply- | |||
ing router is not the destination of the FEC, the replier SHOULD com- | ||||
pute its downstream routers and corresponding labels for the incoming | ||||
label, and add Downstream Mapping TLVs for each one to the echo reply | ||||
it sends back. | ||||
If the Downstream Mapping TLV contains multipath information requir- | ||||
ing more processing than the receiving router is willing to perform, | ||||
the responding router MAY choose to respond with only a subset of | ||||
multipaths contained in the Echo Request Downstream Map. (Note: The | ||||
originator of the echo request MAY send another echo request with the | ||||
multipath information that was not included in the reply.) | ||||
4.6. 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; oth- | |||
otherwise, it checks the Sequence Number to see if it matches. Gaps | erwise, it checks the Sequence Number to see if it matches. Gaps in | |||
in the Sequence Number MAY be logged and SHOULD be counted. Once an | 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.6. Issue with VPN IPv4 and IPv6 Prefixes | 4.7. Issue with VPN IPv4 and IPv6 Prefixes | |||
Typically, a LSP ping for a VPN IPv4 or IPv6 prefix is sent with a | Typically, a LSP ping for a VPN IPv4 or IPv6 prefix is sent with a | |||
label stack of depth greater than 1, with the innermost label having | label stack of depth greater than 1, with the innermost label having | |||
a TTL of 1. This is to terminate the ping at the egress PE, before | a TTL of 1. This is to terminate the ping at the egress PE, before | |||
it gets sent to the customer device. However, under certain | it gets sent to the customer device. However, under certain circum- | |||
circumstances, the label stack can shrink to a single label before | stances, the label stack can shrink to a single label before the ping | |||
the ping hits the egress PE; this will result in the ping terminating | hits the egress PE; this will result in the ping terminating prema- | |||
prematurely. One such scenario is a multi-AS Carrier's Carrier VPN. | turely. One such scenario is a multi-AS Carrier's Carrier VPN. | |||
To get around this problem, one approach is for the LSR that receives | To get around this problem, one approach is for the LSR that receives | |||
such a ping to realize that the ping terminated prematurely, and send | such a ping to realize that the ping terminated prematurely, and send | |||
back error code 13. In that case, the initiating LSR can retry the | back error code 13. In that case, the initiating LSR can retry the | |||
ping after incrementing the TTL on the VPN label. In this fashion, | ping after incrementing the TTL on the VPN label. In this fashion, | |||
the ingress LSR will sequentially try TTL values until it finds one | the ingress LSR will sequentially try TTL values until it finds one | |||
that allows the VPN ping to reach the egress PE. | that allows the VPN ping to reach the egress PE. | |||
4.7. Non-compliant Routers | 4.8. 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 nega- | |||
negatives". If in "traceroute" mode, a transit LSR does not support | tives". If in "traceroute" mode, a transit LSR does not support LSP | |||
LSP ping, then no reply will be forthcoming from that LSR for some | ping, then no reply will be forthcoming from that LSR for some TTL, | |||
TTL, say n. The LSR originating the echo request SHOULD try sending | say n. The LSR originating the echo request SHOULD try sending the | |||
the echo request with TTL=n+1, n+2, ..., n+k in the hope that some | echo request with TTL=n+1, n+2, ..., n+k to probe LSRs further down | |||
transit LSR further downstream may support MPLS echo requests and | the path. In such a case, the echo request for TTL > n SHOULD be | |||
reply. In such a case, the echo request for TTL>n MUST NOT have | sent with Downstream Mapping TLV "Downstream IP Address" field set to | |||
Downstream Mapping TLVs, until a reply is received with a Downstream | the ALLROUTERs multicast address until a reply is received with a | |||
Mapping. | Downstream Mapping TLV. The Label Stack MAY be omitted from the | |||
Downstream Mapping TLV. Further the "Validate FEC Stack" flag SHOULD | ||||
NOT be set until an ECHO REQUEST packet with a Downstream Mapping TLV | ||||
is received. | ||||
5. References | ||||
Normative References | Normative References | |||
[IANA] Narten, T. and H. Alvestrand, "Guidelines for IANA | [IANA] Narten, T. and H. Alvestrand, "Guidelines for IANA | |||
Considerations", BCP 26, RFC 2434, October 1998. | Considerations", BCP 26, RFC 2434, October 1998. | |||
[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-STACK] Rosen, E., et al, "MPLS Label Stack Encoding", RFC | [LABEL-STACK] Rosen, E., et al, "MPLS Label Stack Encoding", | |||
3032, January 2001. | RFC 3032, January 2001. | |||
[RSVP] Braden, R. (Editor), et al, "Resource ReSerVation protocol | [RSVP] Braden, R. (Editor), et al, "Resource ReSerVation | |||
(RSVP) -- Version 1 Functional Specification," RFC 2205, | Protocol (RSVP) -- Version 1 Functional | |||
September 1997. | Specification," RFC 2205, 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 | |||
tunnels", RFC 3209, December 2001. | LSP tunnels", RFC 3209, December 2001. | |||
Informative References | Informative References | |||
[ICMP] Postel, J., "Internet Control Message Protocol", RFC 792. | [ICMP] Postel, J., "Internet Control Message Protocol", | |||
RFC 792. | ||||
[LDP] Andersson, L., et al, "LDP Specification", RFC 3036, January | [LDP] Andersson, L., et al, "LDP Specification", RFC 3036, | |||
2001. | January 2001. | |||
Security Considerations | 6. Security Considerations | |||
There are at least two approaches to attacking LSRs using the | There are at least two approaches to attacking LSRs using the mecha- | |||
mechanisms defined here. One is a Denial of Service attack, by | nisms defined here. One is a Denial of Service attack, by sending | |||
sending MPLS echo requests/replies to LSRs and thereby increasing | MPLS echo requests/replies to LSRs and thereby increasing their work- | |||
their workload. The other is obfuscating the state of the MPLS data | load. The other is obfuscating the state of the MPLS data plane | |||
plane liveness by spoofing, hijacking, replaying or otherwise | liveness by spoofing, hijacking, replaying or otherwise tampering | |||
tampering with MPLS echo requests and replies. | with MPLS echo requests and replies. | |||
Authentication will help reduce the number of seemingly valid MPLS | Authentication will help reduce the number of seemingly valid MPLS | |||
echo requests, and thus cut down the Denial of Service attacks; | echo requests, and thus cut down the Denial of Service attacks; | |||
beyond that, each LSR must protect itself. | beyond that, each LSR must protect itself. | |||
Authentication sufficiently addresses spoofing, replay and most | Authentication sufficiently addresses spoofing, replay and most tam- | |||
tampering attacks; one hopes to use some mechanism devised or | pering attacks; one hopes to use some mechanism devised or suggested | |||
suggested by the RPSec WG. It is not clear how to prevent hijacking | by the RPSec WG. It is not clear how to prevent hijacking (non- | |||
(non-delivery) of echo requests or replies; however, if these | delivery) of echo requests or replies; however, if these messages are | |||
messages are indeed hijacked, LSP ping will report that the data | indeed hijacked, LSP ping will report that the data plane isn't work- | |||
plane isn't working as it should. | ing as it should. | |||
It doesn't seem vital (at this point) to secure the data carried in | It doesn't seem vital (at this point) to secure the data carried in | |||
MPLS echo requests and replies, although knowledge of the state of | MPLS echo requests and replies, although knowledge of the state of | |||
the MPLS data plane may be considered confidential by some. | the MPLS data plane may be considered confidential by some. | |||
5. IANA Considerations | 7. IANA Considerations | |||
The TCP and UDP port number 3503 has been allocated by IANA for LSP | The TCP and UDP port number 3503 has been allocated by IANA for LSP | |||
echo requests and replies. | echo requests and replies. | |||
The following sections detail the new name spaces to be managed by | The following sections detail the new name spaces to be managed by | |||
IANA. For each of these name spaces, the space is divided into | IANA. For each of these name spaces, the space is divided into | |||
assignment ranges; the following terms are used in describing the | assignment ranges; the following terms are used in describing the | |||
procedures by which IANA allocates values: "Standards Action" (as | procedures by which IANA allocates values: "Standards Action" (as | |||
defined in [IANA]); "Expert Review" and "Vendor Private Use". | defined in [IANA]); "Expert Review" and "Vendor Private Use". | |||
Values from "Expert Review" ranges MUST be registered with IANA, and | Values from "Expert Review" ranges MUST be registered with IANA, and | |||
MUST be accompanied by an Experimental RFC that describes the format | MUST be accompanied by an Experimental RFC that describes the format | |||
and procedures for using the code point; the actual assignment is | and procedures for using the code point; the actual assignment is | |||
made during the IANA actions for the RFC. | made during the IANA actions for the RFC. | |||
Values from "Vendor Private" ranges MUST NOT be registered with IANA; | Values from "Vendor Private" ranges MUST NOT be registered with IANA; | |||
however, the message MUST contain an enterprise code as registered | however, the message MUST contain an enterprise code as registered | |||
with the IANA SMI Network Management Private Enterprise Codes. For | with the IANA SMI Network Management Private Enterprise Codes. For | |||
each name space that has a Vendor Private range, it must be specified | each name space that has a Vendor Private range, it must be specified | |||
where exactly the SMI Enterprise Code resides; see below for | where exactly the SMI Enterprise Code resides; see below for exam- | |||
examples. In this way, several enterprises (vendors) can use the | ples. In this way, several enterprises (vendors) can use the same | |||
same code point without fear of collision. | code point without fear of collision. | |||
5.1. Message Types, Reply Modes, Return Codes | 7.1. Message Types, Reply Modes, Return Codes | |||
It is requested that IANA maintain registries for Message Types, | It is requested that IANA maintain registries for Message Types, | |||
Reply Modes, Return Codes and Return Subcodes. Each of these can | Reply Modes, Return Codes and Return Subcodes. Each of these can | |||
take values in the range 0-255. Assignments in the range 0-191 are | take values in the range 0-255. Assignments in the range 0-191 are | |||
via Standards Action; assignments in the range 192-251 are made via | via Standards Action; assignments in the range 192-251 are made via | |||
Expert Review; values in the range 252-255 are for Vendor Private | Expert Review; values in the range 252-255 are for Vendor Private | |||
Use, and MUST NOT be allocated. | Use, and MUST NOT be allocated. | |||
If any of these fields fall in the Vendor Private range, a top-level | If any of these fields fall in the Vendor Private range, a top-level | |||
Vendor Enterprise Code TLV MUST be present in the message. | Vendor Enterprise Code TLV MUST be present in the message. | |||
5.2. TLVs | 7.2. TLVs | |||
It is requested that IANA maintain registries for the Type field of | It is requested that IANA maintain registries for the Type field of | |||
top-level TLVs as well as for sub-TLVs. The valid range for each of | top-level TLVs as well as for sub-TLVs. The valid range for each of | |||
these is 0-65535. Assignments in the range 0-16383 and 32768-49161 | these is 0-65535. Assignments in the range 0-16383 and 32768-49161 | |||
are made via Standards Action as defined in [IANA]; assignments in | are made via Standards Action as defined in [IANA]; assignments in | |||
the range 16384-31743 and 49162-64511 are made via Expert Review (see | the range 16384-31743 and 49162-64511 are made via Expert Review (see | |||
below); values in the range 31744-32746 and 64512-65535 are for | below); values in the range 31744-32746 and 64512-65535 are for Ven- | |||
Vendor Private Use, and MUST NOT be allocated. | dor Private Use, and MUST NOT be allocated. | |||
If a TLV or sub-TLV has a Type that falls in the range for Vendor | If a TLV or sub-TLV has a Type that falls in the range for Vendor | |||
Private Use, the Length MUST be at least 4, and the first four octets | Private Use, the Length MUST be at least 4, and the first four octets | |||
MUST be that vendor's SMI Enterprise Code, in network octet order. | MUST be that vendor's SMI Enterprise Code, in network octet order. | |||
The rest of the Value field is private to the vendor. | The rest of the Value field is private to the vendor. | |||
Acknowledgments | 8. 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, Ina Minei, Shivani Aggarwal and Vansom | Gan, Brook Bailey, Eric Rosen, Ina Minei, Shivani Aggarwal and Vanson | |||
Lim. | Lim. | |||
The description of the Multipath Information sub-field of the | The description of the Multipath Information sub-field of the Down- | |||
Downstream Mapping TLV was adapted from text suggested by Curtis | stream Mapping TLV was adapted from text suggested by Curtis Vil- | |||
Villamizar. | lamizar. | |||
Appendix | A. 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. | |||
5.1. CR-LDP FEC | A.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: | |||
Sub-Type # Length Value Field | Sub-Type # Length Value Field | |||
---------- ------ ------------- | ---------- ------ ------------- | |||
5 6 CR-LDP LSP ID | 5 6 CR-LDP LSP ID | |||
The value consists of the LSPID of the LSP being pinged. An LSPID is | The value consists of the LSPID of the LSP being pinged. An LSPID is | |||
a four octet IPv4 address (a local address on the ingress LSR, for | a four octet IPv4 address (a local address on the ingress LSR, for | |||
skipping to change at page 31, line 5 | skipping to change at page 40, line 32 | |||
per LSP on a given ingress LSR. | per LSP on a given ingress LSR. | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Ingress LSR Router ID | | | Ingress LSR Router ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Must Be Zero | LSP ID | | | Must Be Zero | LSP ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
5.2. Downstream Mapping for CR-LDP | A.2. Downstream Mapping for CR-LDP | |||
If a label in a Downstream Mapping was learned via CR-LDP, the | If a label in a Downstream Mapping was learned via CR-LDP, the Proto- | |||
Protocol field in the Mapping TLV can use the following entry: | col field in the Mapping TLV can use the following entry: | |||
Protocol # Signaling Protocol | Protocol # Signaling Protocol | |||
---------- ------------------ | ---------- ------------------ | |||
5 CR-LDP | 5 CR-LDP | |||
Authors' Address | Authors' Address | |||
Kireeti Kompella | Kireeti Kompella | |||
Juniper Networks | Juniper Networks | |||
1194 N.Mathilda Ave | 1194 N.Mathilda Ave | |||
Sunnyvale, CA 94089 | Sunnyvale, CA 94089 | |||
Email: kireeti@juniper.net | Email: kireeti@juniper.net | |||
George Swallow | George Swallow | |||
Cisco Systems | Cisco Systems | |||
1414 Massachusetts Ave, | 1414 Massachusetts Ave, | |||
Boxborough, MA 01719 | Boxborough, MA 01719 | |||
Phone: +1 978 936 1398 | Phone: +1 978 936 1398 | |||
Email: swallow@cisco.com | Email: swallow@cisco.com | |||
Intellectual Property Rights Notices | Full Copyright and Intellectual Property Statements | |||
The IETF takes no position regarding the validity or scope of any | ||||
intellectual property or other rights that might be claimed to | ||||
pertain to the implementation or use of the technology described in | ||||
this document or the extent to which any license under such rights | ||||
might or might not be available; neither does it represent that it | ||||
has made any effort to identify any such rights. Information on the | ||||
IETF's procedures with respect to rights in standards-track and | ||||
standards-related documentation can be found in BCP-11. Copies of | ||||
claims of rights made available for publication and any assurances of | ||||
licenses to be made available, or the result of an attempt made to | ||||
obtain a general license or permission for the use of such | ||||
proprietary rights by implementors or users of this specification can | ||||
be obtained from the IETF Secretariat. | ||||
The IETF invites any interested party to bring to its attention any | Copyright (C) The Internet Society (2005). This document is subject | |||
copyrights, patents or patent applications, or other proprietary | to the rights, licenses and restrictions contained in BCP 78, and | |||
rights which may cover technology that may be required to practice | except as set forth therein, the authors retain all their rights. | |||
this standard. Please address the information to the IETF Executive | ||||
Director. | ||||
Disclaimer of Validity | Disclaimer of Validity | |||
This document and the information contained herein are provided on an | This document and the information contained herein are provided on an | |||
"AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS | |||
OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET | |||
ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, | |||
INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE | INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFOR- | |||
INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED | MATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES | |||
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. | |||
Copyright Statement | Intellectual Property | |||
Copyright (C) The Internet Society (2004). This document is subject | The IETF takes no position regarding the validity or scope of any | |||
to the rights, licenses and restrictions contained in BCP 78, and | Intellectual Property Rights or other rights that might be claimed to | |||
except as set forth therein, the authors retain all their rights. | pertain to the implementation or use of the technology described in | |||
this document or the extent to which any license under such rights | ||||
might or might not be available; nor does it represent that it has | ||||
made any independent effort to identify any such rights. Information | ||||
on the procedures with respect to rights in RFC documents can be | ||||
found in BCP 78 and BCP 79. | ||||
Copies of IPR disclosures made to the IETF Secretariat and any assur- | ||||
ances of licenses to be made available, or the result of an attempt | ||||
made to obtain a general license or permission for the use of such | ||||
proprietary rights by implementers or users of this specification can | ||||
be obtained from the IETF on-line IPR repository at | ||||
http://www.ietf.org/ipr. | ||||
The IETF invites any interested party to bring to its attention any | ||||
copyrights, patents or patent applications, or other proprietary | ||||
rights that may cover technology that may be required to implement | ||||
this standard. Please address the information to the IETF at ietf- | ||||
ipr@ietf.org. | ||||
Acknowledgement | ||||
Funding for the RFC Editor function is currently provided by the | ||||
Internet Society. | ||||
End of changes. | ||||
This html diff was produced by rfcdiff 1.23, available from http://www.levkowetz.com/ietf/tools/rfcdiff/ |