draft-smack-mpls-rfc4379bis-08.txt | draft-smack-mpls-rfc4379bis-09.txt | |||
---|---|---|---|---|
Network Working Group K. Kompella | Network Working Group K. Kompella | |||
Internet-Draft Juniper Networks, Inc. | Internet-Draft Juniper Networks | |||
Obsoletes: 4379, 6829 (if approved) C. Pignataro | Obsoletes: 4379, 6829 (if approved) C. Pignataro | |||
Intended status: Standards Track N. Kumar | Intended status: Standards Track N. Kumar | |||
Expires: May 22, 2016 Cisco | Expires: June 20, 2016 Cisco | |||
S. Aldrin | S. Aldrin | |||
M. Chen | M. Chen | |||
Huawei | Huawei | |||
November 19, 2015 | December 18, 2015 | |||
Detecting Multi-Protocol Label Switched (MPLS) Data Plane Failures | Detecting Multi-Protocol Label Switched (MPLS) Data Plane Failures | |||
draft-smack-mpls-rfc4379bis-08 | draft-smack-mpls-rfc4379bis-09 | |||
Abstract | Abstract | |||
This document describes a simple and efficient mechanism that can be | This document describes a simple and efficient mechanism that can be | |||
used to detect data plane failures in Multi-Protocol Label Switching | used to detect data plane failures in Multi-Protocol Label Switching | |||
(MPLS) Label Switched Paths (LSPs). There are two parts to this | (MPLS) Label Switched Paths (LSPs). There are two parts to this | |||
document: information carried in an MPLS "echo request" and "echo | document: information carried in an MPLS "echo request" and "echo | |||
reply" for the purposes of fault detection and isolation, and | reply" for the purposes of fault detection and isolation, and | |||
mechanisms for reliably sending the echo reply. | mechanisms for reliably sending the echo reply. | |||
skipping to change at page 1, line 43 | skipping to change at page 1, line 43 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
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." | |||
This Internet-Draft will expire on May 22, 2016. | This Internet-Draft will expire on June 20, 2016. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2015 IETF Trust and the persons identified as the | Copyright (c) 2015 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 37 | skipping to change at page 2, line 37 | |||
3.1. Return Codes . . . . . . . . . . . . . . . . . . . . . . 13 | 3.1. Return Codes . . . . . . . . . . . . . . . . . . . . . . 13 | |||
3.2. Target FEC Stack . . . . . . . . . . . . . . . . . . . . 13 | 3.2. Target FEC Stack . . . . . . . . . . . . . . . . . . . . 13 | |||
3.2.1. LDP IPv4 Prefix . . . . . . . . . . . . . . . . . . . 15 | 3.2.1. LDP IPv4 Prefix . . . . . . . . . . . . . . . . . . . 15 | |||
3.2.2. LDP IPv6 Prefix . . . . . . . . . . . . . . . . . . . 15 | 3.2.2. LDP IPv6 Prefix . . . . . . . . . . . . . . . . . . . 15 | |||
3.2.3. RSVP IPv4 LSP . . . . . . . . . . . . . . . . . . . . 15 | 3.2.3. RSVP IPv4 LSP . . . . . . . . . . . . . . . . . . . . 15 | |||
3.2.4. RSVP IPv6 LSP . . . . . . . . . . . . . . . . . . . . 16 | 3.2.4. RSVP IPv6 LSP . . . . . . . . . . . . . . . . . . . . 16 | |||
3.2.5. VPN IPv4 Prefix . . . . . . . . . . . . . . . . . . . 16 | 3.2.5. VPN IPv4 Prefix . . . . . . . . . . . . . . . . . . . 16 | |||
3.2.6. VPN IPv6 Prefix . . . . . . . . . . . . . . . . . . . 17 | 3.2.6. VPN IPv6 Prefix . . . . . . . . . . . . . . . . . . . 17 | |||
3.2.7. L2 VPN Endpoint . . . . . . . . . . . . . . . . . . . 18 | 3.2.7. L2 VPN Endpoint . . . . . . . . . . . . . . . . . . . 18 | |||
3.2.8. FEC 128 Pseudowire - IPv4 (Deprecated) . . . . . . . 18 | 3.2.8. FEC 128 Pseudowire - IPv4 (Deprecated) . . . . . . . 18 | |||
3.2.9. FEC 128 Pseudowire - IPv4 (Current) . . . . . . . . . 19 | 3.2.9. FEC 128 Pseudowire - IPv4 (Current) . . . . . . . . . 18 | |||
3.2.10. FEC 129 Pseudowire - IPv4 . . . . . . . . . . . . . . 20 | 3.2.10. FEC 129 Pseudowire - IPv4 . . . . . . . . . . . . . . 19 | |||
3.2.11. BGP Labeled IPv4 Prefix . . . . . . . . . . . . . . . 21 | 3.2.11. BGP Labeled IPv4 Prefix . . . . . . . . . . . . . . . 20 | |||
3.2.12. BGP Labeled IPv6 Prefix . . . . . . . . . . . . . . . 21 | 3.2.12. BGP Labeled IPv6 Prefix . . . . . . . . . . . . . . . 20 | |||
3.2.13. Generic IPv4 Prefix . . . . . . . . . . . . . . . . . 22 | 3.2.13. Generic IPv4 Prefix . . . . . . . . . . . . . . . . . 21 | |||
3.2.14. Generic IPv6 Prefix . . . . . . . . . . . . . . . . . 22 | 3.2.14. Generic IPv6 Prefix . . . . . . . . . . . . . . . . . 21 | |||
3.2.15. Nil FEC . . . . . . . . . . . . . . . . . . . . . . . 23 | 3.2.15. Nil FEC . . . . . . . . . . . . . . . . . . . . . . . 22 | |||
3.2.16. FEC 128 Pseudowire - IPv6 . . . . . . . . . . . . . . 23 | 3.2.16. FEC 128 Pseudowire - IPv6 . . . . . . . . . . . . . . 22 | |||
3.2.17. FEC 129 Pseudowire - IPv6 . . . . . . . . . . . . . . 24 | 3.2.17. FEC 129 Pseudowire - IPv6 . . . . . . . . . . . . . . 23 | |||
3.3. Downstream Mapping . . . . . . . . . . . . . . . . . . . 25 | 3.3. Downstream Mapping (Deprecated) . . . . . . . . . . . . . 24 | |||
3.3.1. Multipath Information Encoding . . . . . . . . . . . 28 | 3.4. Downstream Detailed Mapping . . . . . . . . . . . . . . . 24 | |||
3.3.2. Downstream Router and Interface . . . . . . . . . . . 30 | 3.4.1. Multipath Information Encoding . . . . . . . . . . . 24 | |||
3.4. Pad TLV . . . . . . . . . . . . . . . . . . . . . . . . . 31 | 3.4.2. Downstream Router and Interface . . . . . . . . . . . 26 | |||
3.5. Vendor Enterprise Number . . . . . . . . . . . . . . . . 31 | 3.5. Pad TLV . . . . . . . . . . . . . . . . . . . . . . . . . 27 | |||
3.6. Interface and Label Stack . . . . . . . . . . . . . . . . 32 | 3.6. Vendor Enterprise Number . . . . . . . . . . . . . . . . 27 | |||
3.7. Errored TLVs . . . . . . . . . . . . . . . . . . . . . . 33 | 3.7. Interface and Label Stack . . . . . . . . . . . . . . . . 27 | |||
3.8. Reply TOS Byte TLV . . . . . . . . . . . . . . . . . . . 33 | 3.8. Errored TLVs . . . . . . . . . . . . . . . . . . . . . . 29 | |||
4. Theory of Operation . . . . . . . . . . . . . . . . . . . . . 34 | 3.9. Reply TOS Byte TLV . . . . . . . . . . . . . . . . . . . 29 | |||
4.1. Dealing with Equal-Cost Multi-Path (ECMP) . . . . . . . . 34 | 4. Theory of Operation . . . . . . . . . . . . . . . . . . . . . 29 | |||
4.2. Testing LSPs That Are Used to Carry MPLS Payloads . . . . 35 | 4.1. Dealing with Equal-Cost Multi-Path (ECMP) . . . . . . . . 30 | |||
4.3. Sending an MPLS Echo Request . . . . . . . . . . . . . . 35 | 4.2. Testing LSPs That Are Used to Carry MPLS Payloads . . . . 31 | |||
4.4. Receiving an MPLS Echo Request . . . . . . . . . . . . . 36 | 4.3. Sending an MPLS Echo Request . . . . . . . . . . . . . . 31 | |||
4.4.1. FEC Validation . . . . . . . . . . . . . . . . . . . 42 | 4.4. Receiving an MPLS Echo Request . . . . . . . . . . . . . 32 | |||
4.5. Sending an MPLS Echo Reply . . . . . . . . . . . . . . . 43 | 4.4.1. FEC Validation . . . . . . . . . . . . . . . . . . . 38 | |||
4.6. Receiving an MPLS Echo Reply . . . . . . . . . . . . . . 44 | 4.5. Sending an MPLS Echo Reply . . . . . . . . . . . . . . . 39 | |||
4.7. Issue with VPN IPv4 and IPv6 Prefixes . . . . . . . . . . 44 | 4.6. Receiving an MPLS Echo Reply . . . . . . . . . . . . . . 40 | |||
4.8. Non-compliant Routers . . . . . . . . . . . . . . . . . . 45 | 4.7. Issue with VPN IPv4 and IPv6 Prefixes . . . . . . . . . . 40 | |||
5. Security Considerations . . . . . . . . . . . . . . . . . . . 45 | 4.8. Non-compliant Routers . . . . . . . . . . . . . . . . . . 41 | |||
6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 46 | 5. Security Considerations . . . . . . . . . . . . . . . . . . . 41 | |||
6.1. Message Types, Reply Modes, Return Codes . . . . . . . . 47 | 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 42 | |||
6.2. TLVs . . . . . . . . . . . . . . . . . . . . . . . . . . 47 | 6.1. Message Types, Reply Modes, Return Codes . . . . . . . . 43 | |||
7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 48 | 6.2. TLVs . . . . . . . . . . . . . . . . . . . . . . . . . . 43 | |||
8. References . . . . . . . . . . . . . . . . . . . . . . . . . 49 | 7. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 44 | |||
8.1. Normative References . . . . . . . . . . . . . . . . . . 49 | 8. References . . . . . . . . . . . . . . . . . . . . . . . . . 45 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 50 | 8.1. Normative References . . . . . . . . . . . . . . . . . . 45 | |||
8.2. Informative References . . . . . . . . . . . . . . . . . 46 | ||||
Appendix A. Deprecated TLVs . . . . . . . . . . . . . . . . . . 47 | ||||
A.1. FEC 128 Pseudowire . . . . . . . . . . . . . . . . . . . 47 | ||||
A.2. Downstream Mapping(DSMAP) . . . . . . . . . . . . . . . . 48 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 51 | |||
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 Label Switched Paths | used to detect data plane failures in MPLS Label Switched Paths | |||
(LSPs). There are two parts to this document: information carried in | (LSPs). There are two parts to this document: information carried in | |||
an MPLS "echo request" and "echo reply", and mechanisms for | an MPLS "echo request" and "echo reply", and mechanisms for | |||
transporting the echo reply. The first part aims at providing enough | transporting the echo reply. The first part aims at providing enough | |||
information to check correct operation of the data plane, as well as | information to check correct operation of the data plane, as well as | |||
skipping to change at page 11, line 34 | skipping to change at page 11, line 34 | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
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 4-octet boundary. TLVs may be nested within other TLVs, | align to a 4-octet boundary. TLVs may be nested within other TLVs, | |||
in which case the nested TLVs are called sub-TLVs. Sub-TLVs have | in which case the nested TLVs are called sub-TLVs. Sub-TLVs have | |||
independent types and MUST also be 4-octet aligned. | independent types and MUST also be 4-octet aligned. | |||
Two examples follow. The Label Distribution Protocol (LDP) IPv4 FEC | Two examples of how TLV and sub-TLV length are computed, and of how | |||
sub-TLV has the following format: | sub-TLVs are padded to be 4-octet aligned as follows: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 1 (LDP IPv4 FEC) | Length = 5 | | | Type = 1 (LDP IPv4 FEC) | Length = 5 | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IPv4 prefix | | | IPv4 prefix | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Prefix Length | Must Be Zero | | | Prefix Length | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 14, line 5 | skipping to change at page 14, line 5 | |||
The Return Subcode contains the point in the label stack where | The Return Subcode contains the point in the label stack where | |||
processing was terminated. If the RSC is 0, no labels were | processing was terminated. If the RSC is 0, no labels were | |||
processed. Otherwise the packet would have been label switched at | processed. Otherwise the packet would have been label switched at | |||
depth RSC. | 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 looking at the sub-TLV length fields. | determined by 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 LSP | 3 20 RSVP IPv4 LSP | |||
4 56 RSVP IPv6 LSP | 4 56 RSVP IPv6 LSP | |||
5 Not Assigned | 5 Not Assigned | |||
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 - IPv4 (deprecated) | 9 10 "FEC 128" Pseudowire - IPv4 (deprecated) | |||
10 14 "FEC 128" Pseudowire - IPv4 | 10 14 "FEC 128" Pseudowire - IPv4 | |||
11 16+ "FEC 129" Pseudowire - IPv4 | 11 16+ "FEC 129" Pseudowire - IPv4 | |||
12 5 BGP labeled IPv4 prefix | 12 5 BGP labeled IPv4 prefix | |||
13 17 BGP labeled IPv6 prefix | 13 17 BGP labeled IPv6 prefix | |||
14 5 Generic IPv4 prefix | 14 5 Generic IPv4 prefix | |||
15 17 Generic IPv6 prefix | 15 17 Generic IPv6 prefix | |||
16 4 Nil FEC | 16 4 Nil FEC | |||
24 38 "FEC 128" Pseudowire - IPv6 | 24 38 "FEC 128" Pseudowire - IPv6 | |||
25 40+ "FEC 129" Pseudowire - IPv6 | 25 40+ "FEC 129" Pseudowire - IPv6 | |||
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 | |||
[RFC5036] for 192.168.1.1 (say, label 1001), then to verify that | [RFC5036] for 192.168.1.1 (say, label 1001), then to verify that | |||
label 1001 does indeed reach an egress LSR that announced this prefix | label 1001 does indeed reach an egress LSR that announced this prefix | |||
via LDP, X can send an MPLS echo request with an FEC Stack TLV with | via LDP, X can send an MPLS echo request with an FEC Stack TLV with | |||
one FEC in it, namely, of type LDP IPv4 prefix, with prefix | one FEC in it, namely, of type LDP IPv4 prefix, with prefix | |||
192.168.1.1/32, and send the echo request with a label of 1001. | 192.168.1.1/32, and send the echo request with a label of 1001. | |||
Say LSR X wanted to verify that a label stack of <1001, 23456> is the | Say LSR X wanted to verify that a label stack of <1001, 23456> is the | |||
right label stack to use to reach a VPN IPv4 prefix [see section | right label stack to use to reach a VPN IPv4 prefix [see | |||
3.2.5] of 10/8 in VPN foo. Say further that LSR Y with loopback | Section 3.2.5] of 10/8 in VPN foo. Say further that LSR Y with | |||
address 192.168.1.1 announced prefix 10/8 with Route Distinguisher | loopback address 192.168.1.1 announced prefix 10/8 with Route | |||
RD-foo-Y (which may in general be different from the Route | Distinguisher RD-foo-Y (which may in general be different from the | |||
Distinguisher that LSR X uses in its own advertisements for VPN foo), | Route Distinguisher that LSR X uses in its own advertisements for VPN | |||
label 23456 and BGP next hop 192.168.1.1 [RFC4271]. Finally, suppose | foo), label 23456 and BGP next hop 192.168.1.1 [RFC4271]. Finally, | |||
that LSR X receives a label binding of 1001 for 192.168.1.1 via LDP. | suppose that LSR X receives a label binding of 1001 for 192.168.1.1 | |||
X has two choices in sending an MPLS echo request: X can send an MPLS | via LDP. X has two choices in sending an MPLS echo request: X can | |||
echo request with an FEC Stack TLV with a single FEC of type VPN IPv4 | send an MPLS echo request with an FEC Stack TLV with a single FEC of | |||
prefix with a prefix of 10/8 and a Route Distinguisher of RD-foo-Y. | type VPN IPv4 prefix with a prefix of 10/8 and a Route Distinguisher | |||
Alternatively, X can send an FEC Stack TLV with two FECs, the first | of RD-foo-Y. Alternatively, X can send an FEC Stack TLV with two | |||
of type LDP IPv4 with a prefix of 192.168.1.1/32 and the second of | FECs, the first of type LDP IPv4 with a prefix of 192.168.1.1/32 and | |||
type of IP VPN with a prefix 10/8 with Route Distinguisher of RD-foo- | the second of type of IP VPN with a prefix 10/8 with Route | |||
Y. In either case, the MPLS echo request would have a label stack of | Distinguisher of RD-foo-Y. In either case, the MPLS echo request | |||
<1001, 23456>. (Note: in this example, 1001 is the "outer" label and | would have a label stack of <1001, 23456>. (Note: in this example, | |||
23456 is the "inner" label.) | 1001 is the "outer" label and 23456 is the "inner" label.) | |||
3.2.1. LDP IPv4 Prefix | 3.2.1. LDP IPv4 Prefix | |||
The IPv4 Prefix FEC is defined in [RFC5036]. When an LDP IPv4 prefix | The IPv4 Prefix FEC is defined in [RFC5036]. When an LDP IPv4 prefix | |||
is encoded in a label stack, the following format is used. The value | is encoded in a label stack, the following format is used. The value | |||
consists of 4 octets of an IPv4 prefix followed by 1 octet of prefix | consists of 4 octets of an IPv4 prefix followed by 1 octet of prefix | |||
length in bits; the format is given below. The IPv4 prefix is in | 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 | network byte order; if the prefix is shorter than 32 bits, trailing | |||
bits SHOULD be set to zero. See [RFC5036] for an example of a | bits SHOULD be set to zero. See [RFC5036] for an example of a | |||
Mapping for an IPv4 FEC. | Mapping for an IPv4 FEC. | |||
skipping to change at page 18, line 7 | skipping to change at page 18, line 7 | |||
| IPv6 prefix | | | IPv6 prefix | | |||
| | | | | | |||
| | | | | | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Prefix Length | Must Be Zero | | | Prefix Length | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
The Route Distinguisher is identical to the VPN IPv4 Prefix RD, | The Route Distinguisher is identical to the VPN IPv4 Prefix RD, | |||
except that it functions here to allow the creation of distinct | except that it functions here to allow the creation of distinct | |||
routes to IPv6 prefixes. See section 3.2.5. When matching this | routes to IPv6 prefixes. See Section 3.2.5. When matching this | |||
field to local FEC information, it is treated as an opaque value. | field to local FEC information, it is treated as an opaque value. | |||
3.2.7. L2 VPN Endpoint | 3.2.7. L2 VPN Endpoint | |||
VPLS stands for Virtual Private LAN Service. The terms VPLS BGP NLRI | VPLS stands for Virtual Private LAN Service. The terms VPLS BGP NLRI | |||
and VE ID (VPLS Edge Identifier) are defined in [RFC4761]. This | and VE ID (VPLS Edge Identifier) are defined in [RFC4761]. This | |||
document uses the simpler term L2 VPN endpoint when referring to a | document uses the simpler term L2 VPN endpoint when referring to a | |||
VPLS BGP NLRI. The Route Distinguisher is an 8-octet identifier used | VPLS BGP NLRI. The Route Distinguisher is an 8-octet identifier used | |||
to distinguish information about various L2 VPNs advertised by a | to distinguish information about various L2 VPNs advertised by a | |||
node. The VE ID is a 2-octet identifier used to identify a | node. The VE ID is a 2-octet identifier used to identify a | |||
skipping to change at page 18, line 43 | skipping to change at page 18, line 43 | |||
| Route Distinguisher | | | Route Distinguisher | | |||
| (8 octets) | | | (8 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Sender's VE ID | Receiver's VE ID | | | Sender's VE ID | Receiver's VE ID | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Encapsulation Type | Must Be Zero | | | Encapsulation Type | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
3.2.8. FEC 128 Pseudowire - IPv4 (Deprecated) | 3.2.8. FEC 128 Pseudowire - IPv4 (Deprecated) | |||
FEC 128 (0x80) is defined in [RFC4447], as are the terms PW ID | See Appendix A.1 for details | |||
(Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero | ||||
32-bit connection ID. The PW Type is a 15-bit number indicating the | ||||
encapsulation type. It is carried right justified in the field below | ||||
termed encapsulation type with the high-order bit set to zero. Both | ||||
of these fields are treated in this protocol as opaque values. | ||||
When an FEC 128 is encoded in a label stack, the following format is | ||||
used. The value field consists of the remote PE IPv4 address (the | ||||
destination address of the targeted LDP session), the PW ID, and the | ||||
encapsulation type as follows: | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Remote PE IPv4 Address | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PW ID | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PW Type | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
This FEC is deprecated and is retained only for backward | ||||
compatibility. Implementations of LSP ping SHOULD accept and process | ||||
this TLV, but SHOULD send LSP ping echo requests with the new TLV | ||||
(see next section), unless explicitly configured to use the old TLV. | ||||
An LSR receiving this TLV SHOULD use the source IP address of the LSP | ||||
echo request to infer the sender's PE address. | ||||
3.2.9. FEC 128 Pseudowire - IPv4 (Current) | 3.2.9. FEC 128 Pseudowire - IPv4 (Current) | |||
FEC 128 (0x80) is defined in [RFC4447], as are the terms PW ID | FEC 128 (0x80) is defined in [RFC4447], as are the terms PW ID | |||
(Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero | (Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero | |||
32-bit connection ID. The PW Type is a 15-bit number indicating the | 32-bit connection ID. The PW Type is a 15-bit number indicating the | |||
encapsulation type. It is carried right justified in the field below | encapsulation type. It is carried right justified in the field below | |||
termed encapsulation type with the high-order bit set to zero. | termed encapsulation type with the high-order bit set to zero. | |||
Both of these fields are treated in this protocol as opaque values. | Both of these fields are treated in this protocol as opaque values. | |||
skipping to change at page 25, line 5 | skipping to change at page 24, line 5 | |||
Sender's PE IPv6 Address: The source IP address of the target IPv6 | Sender's PE IPv6 Address: The source IP address of the target IPv6 | |||
LDP session. 16 octets. | LDP session. 16 octets. | |||
Remote PE IPv6 Address: The destination IP address of the target IPv6 | Remote PE IPv6 Address: The destination IP address of the target IPv6 | |||
LDP session. 16 octets. | LDP session. 16 octets. | |||
The other fields are the same as FEC 129 Pseudowire IPv4 in | The other fields are the same as FEC 129 Pseudowire IPv4 in | |||
Section 3.2.10. | Section 3.2.10. | |||
3.3. Downstream Mapping | 3.3. Downstream Mapping (Deprecated) | |||
The Downstream Mapping object is a TLV that MAY be included in an | ||||
echo request message. Only one Downstream Mapping object may appear | ||||
in an echo request. The presence of a Downstream Mapping object is a | ||||
request that Downstream Mapping objects be included in the echo | ||||
reply. If the replying router is the destination of the FEC, then a | ||||
Downstream Mapping TLV SHOULD NOT be included in the echo reply. | ||||
Otherwise the replying router SHOULD include a Downstream Mapping | ||||
object for each interface over which this FEC could be forwarded. | ||||
For a more precise definition of the notion of "downstream", see | ||||
section 3.3.2, "Downstream Router and Interface". | ||||
The Length is K + M + 4*N octets, where M is the Multipath Length, | ||||
and N is the number of Downstream Labels. Values for K are found in | ||||
the description of Address Type below. The Value field of a | ||||
Downstream Mapping 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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| MTU | Address Type | DS Flags | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream IP Address (4 or 16 octets) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Interface Address (4 or 16 octets) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Multipath Type| Depth Limit | Multipath Length | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. (Multipath Information) . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Label | Protocol | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Label | Protocol | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
Maximum Transmission Unit (MTU) | ||||
The MTU is the size in octets of the largest MPLS frame (including | ||||
label stack) that fits on the interface to the Downstream LSR. | ||||
Address Type | ||||
The Address Type indicates if the interface is numbered or | ||||
unnumbered. It also determines the length of the Downstream IP | ||||
Address and Downstream Interface fields. The resulting total for | ||||
the initial part of the TLV is listed in the table below as "K | ||||
Octets". The Address Type is set to one of the following values: | ||||
Type # Address Type K Octets | ||||
------ ------------ -------- | ||||
1 IPv4 Numbered 16 | ||||
2 IPv4 Unnumbered 16 | ||||
3 IPv6 Numbered 40 | ||||
4 IPv6 Unnumbered 28 | ||||
DS Flags | ||||
The DS Flags field is a bit vector with the following format: | ||||
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 that alters its ECMP algorithm | ||||
based on the FEC or deep packet examination, 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 | ||||
IPv4 addresses and interface indices are encoded in 4 octets; IPv6 | ||||
addresses are encoded in 16 octets. | ||||
If the interface to the downstream LSR is numbered, then the | ||||
Address Type MUST be set to IPv4 or IPv6, the Downstream IP | ||||
Address MUST be set to either the downstream LSR's Router ID or | ||||
the interface address of the downstream LSR, and the Downstream | ||||
Interface Address MUST be set to the downstream LSR's interface | ||||
address. | ||||
If the interface to the downstream LSR is unnumbered, the Address | ||||
Type MUST be IPv4 Unnumbered or IPv6 Unnumbered, the Downstream IP | ||||
Address MUST be the downstream LSR's Router ID, and the Downstream | ||||
Interface Address MUST be set to the index assigned by the | ||||
upstream LSR to the interface. | ||||
If an LSR does not know the IP address of its neighbor, then it | ||||
MUST set the Address Type to either IPv4 Unnumbered or IPv6 | ||||
Unnumbered. For IPv4, it must set the Downstream IP Address to | ||||
127.0.0.1; for IPv6 the address is set to 0::1. In both cases, | ||||
the interface index MUST be set to 0. If an LSR receives an Echo | ||||
Request packet with either of these addresses in the Downstream IP | ||||
Address field, this indicates that it MUST bypass interface | ||||
verification but continue with label validation. | ||||
If the originator of an Echo Request packet wishes to obtain | ||||
Downstream Mapping information but does not know the expected | ||||
label stack, then it SHOULD set the Address Type to either IPv4 | ||||
Unnumbered or IPv6 Unnumbered. For IPv4, it MUST set the | ||||
Downstream IP Address to 224.0.0.2; for IPv6 the address MUST be | ||||
set to FF02::2. In both cases, the interface index MUST be set to | ||||
0. If an LSR receives an Echo Request packet with the all-routers | ||||
multicast address, then this indicates that it MUST bypass both | ||||
interface and label stack validation, but return Downstream | ||||
Mapping TLVs using the information provided. | ||||
Multipath Type | ||||
The following Multipath Types are defined: | ||||
Key Type Multipath Information | ||||
--- ---------------- --------------------- | ||||
0 no multipath Empty (Multipath Length = 0) | ||||
2 IP address IP addresses | ||||
4 IP address range low/high address pairs | ||||
8 Bit-masked IP 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 exercise this path. | ||||
Depth Limit | ||||
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 Length | ||||
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) | ||||
The set of labels in the label stack as it would have appeared if | ||||
this router were forwarding the packet through this interface. | ||||
Any Implicit Null labels are explicitly included. Labels are | ||||
treated as numbers, i.e., they are right justified in the field. | ||||
A Downstream Label is 24 bits, in the same format as an MPLS label | See Appendix A.2 for more details. | |||
minus the TTL field, i.e., the MSBit of the label is bit 0, the | ||||
LSBit is bit 19, the Traffic Class (TC) bits are bits 20-22, and | ||||
bit 23 is the S bit. The replying router SHOULD fill in the TC | ||||
and S bits; the LSR receiving the echo reply MAY choose to ignore | ||||
these bits. Protocol | ||||
The Protocol is taken from the following table: | 3.4. Downstream Detailed Mapping | |||
Protocol # Signaling Protocol | The format of this TLV is defined in section 3.3 of [RFC6424] | |||
---------- ------------------ | ||||
0 Unknown | ||||
1 Static | ||||
2 BGP | ||||
3 LDP | ||||
4 RSVP-TE | ||||
3.3.1. Multipath Information Encoding | 3.4.1. Multipath Information Encoding | |||
The Multipath Information encodes labels or addresses that will | The Multipath Information encodes labels or addresses that will | |||
exercise this path. The Multipath Information depends on the | exercise this path. The Multipath Information depends on the | |||
Multipath Type. The contents of the field are shown in the table | Multipath Type. The contents of the field are shown in the table | |||
above. IPv4 addresses are drawn from the range 127/8; IPv6 addresses | above. IPv4 addresses are drawn from the range 127/8; IPv6 addresses | |||
are drawn from the range 0:0:0:0:0:FFFF:7F00/104. Labels are treated | are drawn from the range 0:0:0:0:0:FFFF:7F00/104. Labels are treated | |||
as numbers, i.e., they are right justified in the field. For Type 4, | as numbers, i.e., they are right justified in the field. For Type 4, | |||
ranges indicated by Address pairs MUST NOT overlap and MUST be in | ranges indicated by Address pairs MUST NOT overlap and MUST be in | |||
ascending sequence. | ascending sequence. | |||
skipping to change at page 30, line 35 | skipping to change at page 26, line 8 | |||
Multipath Information is null (i.e., Multipath Length = 0, or for | Multipath Information is null (i.e., Multipath Length = 0, or for | |||
Types 8 and 9, a mask of all zeros), the type MUST be set to 0. | Types 8 and 9, a mask of all zeros), the type MUST be set to 0. | |||
For example, suppose LSR X at hop 10 has two downstream LSRs, Y and | For example, suppose LSR X at hop 10 has two downstream LSRs, Y and | |||
Z, for the FEC in question. The received X could return Multipath | Z, for the FEC in question. The received X could return Multipath | |||
Type 4, with low/high IP addresses of 127.1.1.1->127.1.1.255 for | Type 4, with low/high IP addresses of 127.1.1.1->127.1.1.255 for | |||
downstream LSR Y and 127.2.1.1->127.2.1.255 for downstream LSR Z. | downstream LSR Y and 127.2.1.1->127.2.1.255 for downstream LSR Z. | |||
The head end reflects this information to LSR Y. Y, which has three | The head end reflects this information to LSR Y. Y, which has three | |||
downstream LSRs, U, V, and W, computes that 127.1.1.1->127.1.1.127 | downstream LSRs, U, V, and W, computes that 127.1.1.1->127.1.1.127 | |||
would go to U and 127.1.1.128-> 127.1.1.255 would go to V. Y would | would go to U and 127.1.1.128-> 127.1.1.255 would go to V. Y would | |||
then respond with 3 Downstream Mappings: to U, with Multipath Type 4 | then respond with 3 "Downstream Detailed Mapping" TLVs: to U, with | |||
(127.1.1.1->127.1.1.127); to V, with Multipath Type 4 | Multipath Type 4 (127.1.1.1->127.1.1.127); to V, with Multipath Type | |||
(127.1.1.127->127.1.1.255); and to W, with Multipath Type 0. | 4 (127.1.1.127->127.1.1.255); and to W, with Multipath Type 0. | |||
Note that computing Multipath Information may impose a significant | Note that computing Multipath Information may impose a significant | |||
processing burden on the receiver. A receiver MAY thus choose to | processing burden on the receiver. A receiver MAY thus choose to | |||
process a subset of the received prefixes. The sender, on receiving | process a subset of the received prefixes. The sender, on receiving | |||
a reply to a Downstream Mapping with partial information, SHOULD | a reply to a Downstream Detailed Mapping with partial information, | |||
assume that the prefixes missing in the reply were skipped by the | SHOULD assume that the prefixes missing in the reply were skipped by | |||
receiver, and MAY re-request information about them in a new echo | the receiver, and MAY re-request information about them in a new echo | |||
request. | request. | |||
3.3.2. Downstream Router and Interface | The encoding of Multipath information in scenarios where few LSRs | |||
apply Entropy label based load balancing while other LSRs are non-EL | ||||
(IP based) load balancing will be defined in a different document. | ||||
The encoding of multipath information in scenarios where LSR have | ||||
Layer 2 ECMP over Link Aggregation Group (LAG) interfaces will be | ||||
defined in different document. | ||||
3.4.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 and TTL=1 at LSR X, X | with TTL n>1 arrived with outermost label L and TTL=1 at LSR X, X | |||
must be able to compute which LSRs could receive the packet if it was | must be able to compute which LSRs could receive the packet if it was | |||
originated with TTL=n+1, over which interface the request would | originated with TTL=n+1, over which interface the request would | |||
arrive and what label stack those LSRs would see. (It is outside the | arrive and what label stack those LSRs would see. (It is outside the | |||
scope of this document to specify how this computation is done.) The | scope of this document to specify how this computation is done.) The | |||
set of these LSRs/interfaces consists of the downstream routers/ | set of these LSRs/interfaces consists of the downstream routers/ | |||
interfaces (and their corresponding labels) for X with respect to L. | interfaces (and their corresponding labels) for X with respect to L. | |||
Each pair of downstream router and interface requires a separate | Each pair of downstream router and interface requires a separate | |||
Downstream Mapping to be added to the reply. | Downstream Detailed Mapping to be added to the reply. | |||
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 | |||
multicast). In the former case, the Multipath Information is used as | multicast). In the former case, the Multipath Information is used as | |||
a hint to the sender as to how it may influence the choice of these | a hint to the sender as to how it may influence the choice of these | |||
alternatives. | alternatives. | |||
3.4. Pad TLV | 3.5. 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. Vendor Enterprise Number | 3.6. Vendor Enterprise Number | |||
SMI Private Enterprise Numbers are maintained by IANA. The Length is | SMI Private Enterprise Numbers are maintained by IANA. The Length is | |||
always 4; the value is the SMI Private Enterprise code, in network | always 4; the value is the SMI Private Enterprise code, in network | |||
octet order, of the vendor with a Vendor Private extension to any of | 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 this TLV | 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 the | MUST be present. If none of the fields in the fixed part of the | |||
message have Vendor Private extensions, inclusion of this TLV is | message have Vendor Private extensions, inclusion of this TLV is | |||
OPTIONAL. Vendor Private ranges for Message Types, Reply Modes, and | OPTIONAL. Vendor Private ranges for Message Types, Reply Modes, and | |||
Return Codes have been defined. When any of these are used, the | Return Codes have been defined. When any of these are used, the | |||
Vendor Enterprise Number TLV MUST be included in the message. | Vendor Enterprise Number TLV MUST be included in the message. | |||
3.6. Interface and Label Stack | 3.7. Interface and Label Stack | |||
The Interface and Label Stack TLV MAY be included in a reply message | The Interface and Label Stack TLV MAY be included in a reply message | |||
to report the interface on which the request message was received and | to report the interface on which the request message was received and | |||
the label stack that was on the packet when it was received. Only | the label stack that was on the packet when it was received. Only | |||
one such object may appear. The purpose of the object is to allow | one such object may appear. The purpose of the object is to allow | |||
the upstream router to obtain the exact interface and label stack | the upstream router to obtain the exact interface and label stack | |||
information as it appears at the replying LSR. | information as it appears at the replying LSR. | |||
The Length is K + 4*N octets; N is the number of labels in the label | The Length is K + 4*N octets; N is the number of labels in the label | |||
stack. Values for K are found in the description of Address Type | stack. Values for K are found in the description of Address Type | |||
below. The Value field of a Downstream Mapping has the following | below. The Value field of this 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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Address Type | Must Be Zero | | | Address Type | Must Be Zero | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| IP Address (4 or 16 octets) | | | IP Address (4 or 16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Interface (4 or 16 octets) | | | Interface (4 or 16 octets) | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
skipping to change at page 33, line 23 | skipping to change at page 29, line 10 | |||
If the interface is unnumbered, the Address Type MUST be either | If the interface is unnumbered, the Address Type MUST be either | |||
IPv4 Unnumbered or IPv6 Unnumbered, the IP Address MUST be the | IPv4 Unnumbered or IPv6 Unnumbered, the IP Address MUST be the | |||
LSR's Router ID, and the Interface MUST be set to the index | LSR's Router ID, and the Interface MUST be set to the index | |||
assigned to the interface. | assigned to the interface. | |||
Label Stack | Label Stack | |||
The label stack of the received echo request message. If any TTL | The label stack of the received echo request message. If any TTL | |||
values have been changed by this router, they SHOULD be restored. | values have been changed by this router, they SHOULD be restored. | |||
3.7. Errored TLVs | 3.8. Errored TLVs | |||
The following TLV is a TLV that MAY be included in an echo reply to | The following TLV is a TLV that MAY be included in an echo reply to | |||
inform the sender of an echo request of mandatory TLVs either not | inform the sender of an echo request 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 that were not understood, encoded | The Value field contains the TLVs that were not understood, encoded | |||
as sub-TLVs. | as sub-TLVs. | |||
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 = 9 | Length | | | Type = 9 | Length | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Value | | | Value | | |||
. . | . . | |||
. . | . . | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
3.8. Reply TOS Byte TLV | 3.9. Reply TOS Byte TLV | |||
This TLV MAY be used by the originator of the echo request to request | This TLV MAY be used by the originator of the echo request to request | |||
that an echo reply be sent with the IP header TOS byte set to the | that an 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 | value specified in the TLV. This TLV has a length of 4 with the | |||
following value field. | following value field. | |||
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 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Reply-TOS Byte| Must Be Zero | | | Reply-TOS Byte| Must Be Zero | | |||
skipping to change at page 35, line 12 | skipping to change at page 30, line 45 | |||
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, although desirable, may not be practical, | possible paths. This, although desirable, may not be practical, | |||
because the algorithms that a given LSR uses to distribute packets | because the algorithms that a given LSR uses to distribute packets | |||
over alternative paths may be proprietary. | over 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 latitude in choosing the destination IP address and source | certain latitude 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 latitude is offered by means of the | in the case of traceroute, more latitude is offered by means of the | |||
Multipath Information of the Downstream Mapping TLV. This is used as | Multipath Information of the Downstream Detailed Mapping TLV. This | |||
follows. An ingress LSR periodically sends an MPLS traceroute | is used as follows. An ingress LSR periodically sends an MPLS | |||
message to determine whether there are multipaths for a given LSP. | traceroute message to determine whether there are multipaths for a | |||
If so, each hop will provide some information how each of its | given LSP. If so, each hop will provide some information how each of | |||
downstream paths can be exercised. The ingress can then send MPLS | its downstream paths can be exercised. The ingress can then send | |||
echo requests that exercise these paths. If several transit LSRs | MPLS echo requests that exercise these paths. If several transit | |||
have ECMP, the ingress may attempt to compose these to exercise all | LSRs have ECMP, the ingress may attempt to compose these to exercise | |||
possible paths. However, full coverage may not be possible. | all possible paths. However, full coverage may not be possible. | |||
4.2. Testing LSPs That Are Used to Carry MPLS Payloads | 4.2. Testing LSPs That Are Used to Carry MPLS Payloads | |||
To detect certain LSP breakages, it may be necessary to encapsulate | To detect certain LSP breakages, it may be necessary to encapsulate | |||
an MPLS echo request packet with at least one additional label when | 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 | 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 | 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 | RSVP-TE LSPs, just sending an MPLS echo request packet may not detect | |||
instances where the router immediately upstream of the destination of | instances where the router immediately upstream of the destination of | |||
the LSP ping may forward the MPLS echo request successfully over an | the LSP ping may forward the MPLS echo request successfully over an | |||
skipping to change at page 36, line 36 | skipping to change at page 32, line 21 | |||
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 NTP format that the | The TimeStamp Sent is set to the time-of-day in NTP format that the | |||
echo request is sent. The TimeStamp Received is set to zero. | echo request is sent. The TimeStamp Received is set to zero. | |||
An MPLS echo request MUST have an FEC Stack TLV. Also, the Reply | An MPLS echo request MUST have an FEC Stack TLV. Also, the Reply | |||
Mode must be set to the desired reply mode; the Return Code and | Mode must be set to the desired reply mode; the Return Code and | |||
Subcode are set to zero. In the "traceroute" mode, the echo request | Subcode are set to zero. In the "traceroute" mode, the echo request | |||
SHOULD include a Downstream Mapping TLV. | SHOULD include a Downstream Detailed Mapping TLV. | |||
4.4. Receiving an MPLS Echo Request | 4.4. Receiving an MPLS Echo Request | |||
Sending an MPLS echo request to the control plane is triggered by one | Sending an MPLS echo request to the control plane is triggered by one | |||
of the following packet processing exceptions: Router Alert option, | of the following packet processing exceptions: Router Alert option, | |||
IP TTL expiration, MPLS TTL expiration, MPLS Router Alert label, or | IP TTL expiration, MPLS TTL expiration, MPLS Router Alert label, or | |||
the destination address in the 127/8 address range. The control | the destination address in the 127/8 address range. The control | |||
plane further identifies it by UDP destination port 3503. | plane further identifies it by UDP destination port 3503. | |||
For reporting purposes the bottom of stack is considered to be stack- | For reporting purposes the bottom of stack is considered to be stack- | |||
skipping to change at page 37, line 31 | skipping to change at page 33, line 14 | |||
Handle, Sequence Number, and Timestamp Sent are not examined, but | Handle, Sequence Number, and Timestamp Sent are not examined, but | |||
are included in the MPLS echo reply message. | are included in the MPLS echo reply message. | |||
The algorithm uses the following variables and identifiers: | The algorithm uses the following variables and identifiers: | |||
Interface-I: the interface on which the MPLS echo request was | Interface-I: the interface on which the MPLS echo request was | |||
received. | received. | |||
Stack-R: the label stack on the packet as it was received. | Stack-R: the label stack on the packet as it was received. | |||
Stack-D: the label stack carried in the Downstream Mapping | Stack-D: the label stack carried in the "Label Stack sub- | |||
TLV (not always present) | TLV" in Downstream Detailed Mapping TLV (not | |||
always present) | ||||
Label-L: the label from the actual stack currently being | Label-L: the label from the actual stack currently being | |||
examined. Requires no initialization. | examined. Requires no initialization. | |||
Label-stack-depth: the depth of label being verified. Initialized | Label-stack-depth: the depth of label being verified. Initialized | |||
to the number of labels in the received label | to the number of labels in the received label | |||
stack S. | stack S. | |||
FEC-stack-depth: depth of the FEC in the Target FEC Stack that | FEC-stack-depth: depth of the FEC in the Target FEC Stack that | |||
should be used to verify the current actual | should be used to verify the current actual | |||
skipping to change at page 39, line 29 | skipping to change at page 35, line 16 | |||
} | } | |||
If the label operation is "Swap or Pop and Switch based on Popped | If the label operation is "Swap or Pop and Switch based on Popped | |||
Label" { | Label" { | |||
Set Best-return-code to 8 ("Label switched at stack-depth") and | Set Best-return-code to 8 ("Label switched at stack-depth") and | |||
Best-rtn-subcode to Label-stack-depth to report transit | Best-rtn-subcode to Label-stack-depth to report transit | |||
switching. | switching. | |||
If a Downstream Mapping TLV is present in the received echo | If a Downstream Detailed Mapping TLV is present in the received | |||
request { | echo request { | |||
If the IP address in the TLV is 127.0.0.1 or 0::1 { | If the IP address in the TLV is 127.0.0.1 or 0::1 { | |||
Set Best-return-code to 6 ("Upstream Interface Index | Set Best-return-code to 6 ("Upstream Interface Index | |||
Unknown"). An Interface and Label Stack TLV SHOULD be | Unknown"). An Interface and Label Stack TLV SHOULD be | |||
included in the reply and filled with Interface-I and | included in the reply and filled with Interface-I and | |||
Stack-R. | Stack-R. | |||
} | } | |||
Else { | Else { | |||
Verify that the IP address, interface address, and label | Verify that the IP address, interface address, and label | |||
stack in the Downstream Mapping TLV match Interface-I and | stack in the Downstream Detailed Mapping TLV match | |||
Stack-R. If there is a mismatch, set Best-return-code to | Interface-I and Stack-R. If there is a mismatch, set | |||
5, "Downstream Mapping Mismatch". An Interface and Label | Best-return-code to 5, "Downstream Mapping Mismatch". An | |||
Stack TLV SHOULD be included in the reply and filled in | Interface and Label Stack TLV SHOULD be included in the | |||
based on Interface-I and Stack-R. Go to step 7 (Send | reply and filled in based on Interface-I and Stack-R. Go | |||
Reply Packet). | to step 7 (Send Reply Packet). | |||
} | } | |||
} | } | |||
For each available downstream ECMP path { | For each available downstream ECMP path { | |||
Retrieve output interface from the NHLFE entry. | Retrieve output interface from the NHLFE entry. | |||
/* Note: this return code is set even if Label-stack-depth | /* Note: this return code is set even if Label-stack-depth | |||
skipping to change at page 40, line 15 | skipping to change at page 36, line 4 | |||
} | } | |||
For each available downstream ECMP path { | For each available downstream ECMP path { | |||
Retrieve output interface from the NHLFE entry. | Retrieve output interface from the NHLFE entry. | |||
/* Note: this return code is set even if Label-stack-depth | /* Note: this return code is set even if Label-stack-depth | |||
is one */ | is one */ | |||
If the output interface is not MPLS enabled { | If the output interface is not MPLS enabled { | |||
Set Best-return-code to Return Code 9, "Label switched | Set Best-return-code to Return Code 9, "Label switched | |||
but no MPLS forwarding at stack-depth" and set Best-rtn- | but no MPLS forwarding at stack-depth" and set Best-rtn- | |||
subcode to Label-stack-depth and goto Send_Reply_Packet. | subcode to Label-stack-depth and goto Send_Reply_Packet. | |||
} | } | |||
If a Downstream Mapping TLV is present { | If a Downstream Detailed Mapping TLV is present { | |||
A Downstream Mapping TLV SHOULD be included in the echo | A Downstream Detailed Mapping TLV SHOULD be included in | |||
reply (see section 3.3) filled in with information about | the echo reply (see Section 3.4) filled in with | |||
the current ECMP path. | information about the current ECMP path. | |||
} | } | |||
} | } | |||
If no Downstream Mapping TLV is present, or the Downstream IP | If no Downstream Detailed Mapping TLV is present, or the | |||
Address is set to the ALLROUTERS multicast address, go to step | Downstream IP Address is set to the ALLROUTERS multicast | |||
7 (Send Reply Packet). | address, go to step 7 (Send Reply Packet). | |||
If the "Validate FEC Stack" flag is not set and the LSR is not | If the "Validate FEC Stack" flag is not set and the LSR is not | |||
configured to perform FEC checking by default, go to step 7 | configured to perform FEC checking by default, go to step 7 | |||
(Send Reply Packet). | (Send Reply Packet). | |||
/* Validate the Target FEC Stack in the received echo request. | /* Validate the Target FEC Stack in the received echo request. | |||
First determine FEC-stack-depth from the Downstream Mapping | First determine FEC-stack-depth from the Downstream Detailed | |||
TLV. This is done by walking through Stack-D (the Downstream | Mapping TLV. This is done by walking through Stack-D (the | |||
labels) from the bottom, decrementing the number of labels for | Downstream labels) from the bottom, decrementing the number of | |||
each non-Implicit Null label, while incrementing FEC-stack- | labels for each non-Implicit Null label, while incrementing | |||
depth for each label. If the Downstream Mapping TLV contains | FEC-stack-depth for each label. If the Downstream Detailed | |||
one or more Implicit Null labels, FEC-stack-depth may be | Mapping TLV contains one or more Implicit Null labels, FEC- | |||
greater than Label-stack-depth. To be consistent with the | stack-depth may be greater than Label-stack-depth. To be | |||
above stack-depths, the bottom is considered to be entry 1. | consistent with the above stack-depths, the bottom is | |||
considered to be entry 1. | ||||
*/ | */ | |||
Set FEC-stack-depth to 0. Set i to Label-stack-depth. | Set FEC-stack-depth to 0. Set i to Label-stack-depth. | |||
While (i > 0 ) do { | While (i > 0 ) do { | |||
++FEC-stack-depth. | ++FEC-stack-depth. | |||
if Stack-D[FEC-stack-depth] != 3 (Implicit Null) | if Stack-D[FEC-stack-depth] != 3 (Implicit Null) | |||
--i. | --i. | |||
} | } | |||
skipping to change at page 41, line 32 | skipping to change at page 37, line 22 | |||
} | } | |||
Go to step 7 (Send Reply Packet). | Go to step 7 (Send Reply Packet). | |||
} | } | |||
5. Egress Processing: | 5. Egress Processing: | |||
/* These steps are performed by the LSR that identified itself as | /* These steps are performed by the LSR that identified itself as | |||
the tail-end LSR for an LSP. */ | the tail-end LSR for an LSP. */ | |||
If received echo request contains no Downstream Mapping TLV, or | If received echo request contains no Downstream Detailed Mapping | |||
the Downstream IP Address is set to 127.0.0.1 or 0::1 go to step 6 | TLV, or the Downstream IP Address is set to 127.0.0.1 or 0::1 go | |||
(Egress FEC Validation). | to step 6 (Egress FEC Validation). | |||
Verify that the IP address, interface address, and label stack in | Verify that the IP address, interface address, and label stack in | |||
the Downstream Mapping TLV match Interface-I and Stack-R. If not, | the Downstream Detailed Mapping TLV match Interface-I and Stack-R. | |||
set Best-return-code to 5, "Downstream Mapping Mis-match". A | If not, set Best-return-code to 5, "Downstream Mapping Mis-match". | |||
Received Interface and Label Stack TLV SHOULD be created for the | A Received Interface and Label Stack TLV SHOULD be created for the | |||
echo response packet. Go to step 7 (Send Reply Packet). | echo response packet. Go to step 7 (Send Reply Packet). | |||
6. Egress FEC Validation: | 6. Egress FEC Validation: | |||
/* This is a loop for all entries in the Target FEC Stack starting | /* This is a loop for all entries in the Target FEC Stack starting | |||
with FEC-stack-depth. */ | with FEC-stack-depth. */ | |||
Perform FEC checking by following the algorithm described in | Perform FEC checking by following the algorithm described in | |||
subsection 4.4.1 for Label-L and the FEC at FEC-stack-depth. | subsection 4.4.1 for Label-L and the FEC at FEC-stack-depth. | |||
skipping to change at page 44, line 9 | skipping to change at page 39, line 48 | |||
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 replying router is the destination of the FEC, then Downstream | If the replying router is the destination of the FEC, then Downstream | |||
Mapping TLVs SHOULD NOT be included in the echo reply. | Detailed Mapping TLVs SHOULD NOT be included in the echo reply. | |||
If the echo request contains a Downstream Mapping TLV, and the | If the echo request contains a Downstream Detailed Mapping TLV, and | |||
replying router is not the destination of the FEC, the replier SHOULD | the replying router is not the destination of the FEC, the replier | |||
compute its downstream routers and corresponding labels for the | SHOULD compute its downstream routers and corresponding labels for | |||
incoming label, and add Downstream Mapping TLVs for each one to the | the incoming label, and add Downstream Detailed Mapping TLVs for each | |||
echo reply it sends back. | one to the echo reply it sends back. | |||
If the Downstream Mapping TLV contains Multipath Information | If the Downstream Detailed Mapping TLV contains Multipath Information | |||
requiring more processing than the receiving router is willing to | requiring more processing than the receiving router is willing to | |||
perform, the responding router MAY choose to respond with only a | perform, the responding router MAY choose to respond with only a | |||
subset of multipaths contained in the echo request Downstream | subset of multipaths contained in the echo request Downstream | |||
Mapping. (Note: The originator of the echo request MAY send another | Detailed Mapping. (Note: The originator of the echo request MAY send | |||
echo request with the Multipath Information that was not included in | another echo request with the Multipath Information that was not | |||
the reply.) | included in the reply.) | |||
Except in the case of Reply Mode 4, "Reply via application level | Except in the case of Reply Mode 4, "Reply via application level | |||
control channel", echo replies are always sent in the context of the | control channel", echo replies are always sent in the context of the | |||
IP/MPLS network. | IP/MPLS network. | |||
4.6. Receiving an MPLS Echo 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 ensure that it is well-formed, | reply, X should parse the packet to ensure that it is well-formed, | |||
then attempt to match up the echo reply with an echo request that it | then attempt to match up the echo reply with an echo request that it | |||
had previously sent, using the destination UDP port and the Sender's | had previously sent, using the destination UDP port and the Sender's | |||
Handle. If no match is found, then X jettisons the echo reply; | Handle. If no match is found, then X jettisons the echo reply; | |||
otherwise, it checks the Sequence Number to see if it matches. | otherwise, it checks the Sequence Number to see if it matches. | |||
If the echo reply contains Downstream Mappings, and X wishes to | If the echo reply contains Downstream Detailed Mappings, and X wishes | |||
traceroute further, it SHOULD copy the Downstream Mapping(s) into its | to traceroute further, it SHOULD copy the Downstream Detailed | |||
next echo request(s) (with TTL incremented by one). | Mapping(s) into its next echo request(s) (with TTL incremented by | |||
one). | ||||
4.7. Issue with VPN IPv4 and IPv6 Prefixes | 4.7. Issue with VPN IPv4 and IPv6 Prefixes | |||
Typically, an LSP ping for a VPN IPv4 prefix or VPN IPv6 prefix is | Typically, an LSP ping for a VPN IPv4 prefix or VPN IPv6 prefix is | |||
sent with a label stack of depth greater than 1, with the innermost | sent with a 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 | label having a TTL of 1. This is to terminate the ping at the egress | |||
PE, before it gets sent to the customer device. However, under | PE, before it gets sent to the customer device. However, under | |||
certain circumstances, the label stack can shrink to a single label | certain circumstances, the label stack can shrink to a single label | |||
before the ping hits the egress PE; this will result in the ping | before the ping hits the egress PE; this will result in the ping | |||
terminating prematurely. One such scenario is a multi-AS Carrier's | terminating prematurely. One such scenario is a multi-AS Carrier's | |||
skipping to change at page 45, line 21 | skipping to change at page 41, line 14 | |||
4.8. 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 | |||
negatives". If in "traceroute" mode, a transit LSR does not support | negatives". If in "traceroute" mode, a transit LSR does not support | |||
LSP ping, then no reply will be forthcoming from that LSR for some | LSP ping, then no reply will be forthcoming from that LSR for some | |||
TTL, say, n. The LSR originating the echo request SHOULD try sending | TTL, say, n. The LSR originating the echo request SHOULD try sending | |||
the echo request with TTL=n+1, n+2, ..., n+k to probe LSRs further | the echo request with TTL=n+1, n+2, ..., n+k to probe LSRs further | |||
down the path. In such a case, the echo request for TTL > n SHOULD | down the path. In such a case, the echo request for TTL > n SHOULD | |||
be sent with Downstream Mapping TLV "Downstream IP Address" field set | be sent with Downstream Detailed Mapping TLV "Downstream IP Address" | |||
to the ALLROUTERs multicast address until a reply is received with a | field set to the ALLROUTERs multicast address until a reply is | |||
Downstream Mapping TLV. The label stack MAY be omitted from the | received with a Downstream Detailed Mapping TLV. The label stack TLV | |||
Downstream Mapping TLV. Furthermore, the "Validate FEC Stack" flag | MAY be omitted from the Downstream Detailed Mapping TLV. | |||
SHOULD NOT be set until an echo reply packet with a Downstream | Furthermore, the "Validate FEC Stack" flag SHOULD NOT be set until an | |||
Mapping TLV is received. | echo reply packet with a Downstream Detailed Mapping TLV is received. | |||
5. Security Considerations | 5. Security Considerations | |||
Overall, the security needs for LSP ping are similar to those of ICMP | Overall, the security needs for LSP ping are similar to those of ICMP | |||
ping. | ping. | |||
There are at least three approaches to attacking LSRs using the | There are at least three approaches to attacking LSRs using the | |||
mechanisms defined here. One is a Denial-of-Service attack, by | mechanisms defined here. One is a Denial-of-Service attack, by | |||
sending MPLS echo requests/replies to LSRs and thereby increasing | sending MPLS echo requests/replies to LSRs and thereby increasing | |||
their workload. The second is obfuscating the state of the MPLS data | their workload. The second is obfuscating the state of the MPLS data | |||
skipping to change at page 48, line 14 | skipping to change at page 44, line 7 | |||
values in the range 31744-32767 and 64512-65535 are for Vendor | values in the range 31744-32767 and 64512-65535 are for Vendor | |||
Private Use, and MUST NOT be allocated. | 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 Private Enterprise Number, in network octet | MUST be that vendor's SMI Private Enterprise Number, in network octet | |||
order. The rest of the Value field is private to the vendor. | order. The rest of the Value field is private to the vendor. | |||
TLVs and sub-TLVs defined in this document are the following: | TLVs and sub-TLVs defined in this document are the following: | |||
Type Sub-Type Value Field | Type Sub-Type Value Field | |||
---- -------- ----------- | ---- -------- ----------- | |||
1 Target FEC Stack | 1 Target FEC Stack | |||
1 LDP IPv4 prefix | 1 LDP IPv4 prefix | |||
2 LDP IPv6 prefix | 2 LDP IPv6 prefix | |||
3 RSVP IPv4 LSP | 3 RSVP IPv4 LSP | |||
4 RSVP IPv6 LSP | 4 RSVP IPv6 LSP | |||
5 Not Assigned | 5 Not Assigned | |||
6 VPN IPv4 prefix | 6 VPN IPv4 prefix | |||
7 VPN IPv6 prefix | 7 VPN IPv6 prefix | |||
8 L2 VPN endpoint | 8 L2 VPN endpoint | |||
9 "FEC 128" Pseudowire - IPv4 (Deprecated) | 9 "FEC 128" Pseudowire - IPv4 (Deprecated) | |||
10 "FEC 128" Pseudowire - IPv4 | 10 "FEC 128" Pseudowire - IPv4 | |||
11 "FEC 129" Pseudowire - IPv4 | 11 "FEC 129" Pseudowire - IPv4 | |||
12 BGP labeled IPv4 prefix | 12 BGP labeled IPv4 prefix | |||
13 BGP labeled IPv6 prefix | 13 BGP labeled IPv6 prefix | |||
14 Generic IPv4 prefix | 14 Generic IPv4 prefix | |||
15 Generic IPv6 prefix | 15 Generic IPv6 prefix | |||
16 Nil FEC | 16 Nil FEC | |||
24 "FEC 128" Pseudowire - IPv6 | 24 "FEC 128" Pseudowire - IPv6 | |||
25 "FEC 129" Pseudowire - IPv6 | 25 "FEC 129" Pseudowire - IPv6 | |||
2 Downstream Mapping | 2 Downstream Mapping | |||
3 Pad | 3 Pad | |||
4 Not Assigned | 4 Not Assigned | |||
5 Vendor Enterprise Number | 5 Vendor Enterprise Number | |||
6 Not Assigned | 6 Not Assigned | |||
7 Interface and Label Stack | 7 Interface and Label Stack | |||
8 Not Assigned | 8 Not Assigned | |||
9 Errored TLVs | 9 Errored TLVs | |||
Any value The TLV not understood | Any value The TLV not understood | |||
10 Reply TOS Byte | 10 Reply TOS Byte | |||
7. Acknowledgements | 7. Acknowledgements | |||
The original acknowledgements from RFC 4379 state the following: | The original acknowledgements from RFC 4379 state the following: | |||
This document is the outcome of many discussions among many | This document is the outcome of many discussions among many | |||
people, including Manoj Leelanivas, Paul Traina, Yakov Rekhter, | people, including Manoj Leelanivas, Paul Traina, Yakov Rekhter, | |||
Der-Hwa Gan, Brook Bailey, Eric Rosen, Ina Minei, Shivani | Der-Hwa Gan, Brook Bailey, Eric Rosen, Ina Minei, Shivani | |||
Aggarwal, and Vanson Lim. | Aggarwal, and Vanson Lim. | |||
The description of the Multipath Information sub-field of the | The description of the Multipath Information sub-field of the | |||
Downstream Mapping TLV was adapted from text suggested by Curtis | Downstream Mapping TLV was adapted from text suggested by Curtis | |||
Villamizar. | Villamizar. | |||
We would like to thank Loa Andersson for motivating the advancement | We would like to thank Loa Andersson for motivating the advancement | |||
of this bis specification. We also would like to thank Alexander | of this bis specification. | |||
Vainshtein for his review and comments. | ||||
We also would like to thank Alexander Vainshtein, Yimin Shen, Curtis | ||||
Villamizar, David Allan for their review and comments. | ||||
8. References | 8. References | |||
8.1. Normative References | 8.1. Normative References | |||
[RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | [RFC1122] Braden, R., Ed., "Requirements for Internet Hosts - | |||
Communication Layers", STD 3, RFC 1122, | Communication Layers", STD 3, RFC 1122, | |||
DOI 10.17487/RFC1122, October 1989, | DOI 10.17487/RFC1122, October 1989, | |||
<http://www.rfc-editor.org/info/rfc1122>. | <http://www.rfc-editor.org/info/rfc1122>. | |||
skipping to change at page 50, line 20 | skipping to change at page 46, line 15 | |||
[RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | [RFC5226] Narten, T. and H. Alvestrand, "Guidelines for Writing an | |||
IANA Considerations Section in RFCs", BCP 26, RFC 5226, | IANA Considerations Section in RFCs", BCP 26, RFC 5226, | |||
DOI 10.17487/RFC5226, May 2008, | DOI 10.17487/RFC5226, May 2008, | |||
<http://www.rfc-editor.org/info/rfc5226>. | <http://www.rfc-editor.org/info/rfc5226>. | |||
[RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | [RFC5905] Mills, D., Martin, J., Ed., Burbank, J., and W. Kasch, | |||
"Network Time Protocol Version 4: Protocol and Algorithms | "Network Time Protocol Version 4: Protocol and Algorithms | |||
Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | Specification", RFC 5905, DOI 10.17487/RFC5905, June 2010, | |||
<http://www.rfc-editor.org/info/rfc5905>. | <http://www.rfc-editor.org/info/rfc5905>. | |||
[RFC6424] Bahadur, N., Kompella, K., and G. Swallow, "Mechanism for | ||||
Performing Label Switched Path Ping (LSP Ping) over MPLS | ||||
Tunnels", RFC 6424, DOI 10.17487/RFC6424, November 2011, | ||||
<http://www.rfc-editor.org/info/rfc6424>. | ||||
[RFC7506] Raza, K., Akiya, N., and C. Pignataro, "IPv6 Router Alert | [RFC7506] Raza, K., Akiya, N., and C. Pignataro, "IPv6 Router Alert | |||
Option for MPLS Operations, Administration, and | Option for MPLS Operations, Administration, and | |||
Maintenance (OAM)", RFC 7506, DOI 10.17487/RFC7506, April | Maintenance (OAM)", RFC 7506, DOI 10.17487/RFC7506, April | |||
2015, <http://www.rfc-editor.org/info/rfc7506>. | 2015, <http://www.rfc-editor.org/info/rfc7506>. | |||
8.2. Informative References | 8.2. Informative References | |||
[RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | [RFC0792] Postel, J., "Internet Control Message Protocol", STD 5, | |||
RFC 792, DOI 10.17487/RFC0792, September 1981, | RFC 792, DOI 10.17487/RFC0792, September 1981, | |||
<http://www.rfc-editor.org/info/rfc792>. | <http://www.rfc-editor.org/info/rfc792>. | |||
skipping to change at page 51, line 19 | skipping to change at page 47, line 19 | |||
[RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., | [RFC5036] Andersson, L., Ed., Minei, I., Ed., and B. Thomas, Ed., | |||
"LDP Specification", RFC 5036, DOI 10.17487/RFC5036, | "LDP Specification", RFC 5036, DOI 10.17487/RFC5036, | |||
October 2007, <http://www.rfc-editor.org/info/rfc5036>. | October 2007, <http://www.rfc-editor.org/info/rfc5036>. | |||
[RFC5085] Nadeau, T., Ed. and C. Pignataro, Ed., "Pseudowire Virtual | [RFC5085] Nadeau, T., Ed. and C. Pignataro, Ed., "Pseudowire Virtual | |||
Circuit Connectivity Verification (VCCV): A Control | Circuit Connectivity Verification (VCCV): A Control | |||
Channel for Pseudowires", RFC 5085, DOI 10.17487/RFC5085, | Channel for Pseudowires", RFC 5085, DOI 10.17487/RFC5085, | |||
December 2007, <http://www.rfc-editor.org/info/rfc5085>. | December 2007, <http://www.rfc-editor.org/info/rfc5085>. | |||
Appendix A. Deprecated TLVs | ||||
A.1. FEC 128 Pseudowire | ||||
FEC 128 (0x80) is defined in [RFC4447], as are the terms PW ID | ||||
(Pseudowire ID) and PW Type (Pseudowire Type). A PW ID is a non-zero | ||||
32-bit connection ID. The PW Type is a 15-bit number indicating the | ||||
encapsulation type. It is carried right justified in the field below | ||||
termed encapsulation type with the high-order bit set to zero. Both | ||||
of these fields are treated in this protocol as opaque values. | ||||
When an FEC 128 is encoded in a label stack, the following format is | ||||
used. The value field consists of the remote PE IPv4 address (the | ||||
destination address of the targeted LDP session), the PW ID, and the | ||||
encapsulation type as follows: | ||||
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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Remote PE IPv4 Address | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PW ID | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| PW Type | Must Be Zero | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
This FEC is deprecated and is retained only for backward | ||||
compatibility. Implementations of LSP ping SHOULD accept and process | ||||
this TLV, but SHOULD send LSP ping echo requests with the new TLV | ||||
(see next section), unless explicitly configured to use the old TLV. | ||||
An LSR receiving this TLV SHOULD use the source IP address of the LSP | ||||
echo request to infer the sender's PE address. | ||||
A.2. Downstream Mapping(DSMAP) | ||||
The Downstream Mapping object is a TLV that MAY be included in an | ||||
echo request message. Only one Downstream Mapping object may appear | ||||
in an echo request. The presence of a Downstream Mapping object is a | ||||
request that Downstream Mapping objects be included in the echo | ||||
reply. If the replying router is the destination of the FEC, then a | ||||
Downstream Mapping TLV SHOULD NOT be included in the echo reply. | ||||
Otherwise the replying router SHOULD include a Downstream Mapping | ||||
object for each interface over which this FEC could be forwarded. | ||||
For a more precise definition of the notion of "downstream", see | ||||
section 3.3.2, "Downstream Router and Interface". | ||||
The Length is K + M + 4*N octets, where M is the Multipath Length, | ||||
and N is the number of Downstream Labels. Values for K are found in | ||||
the description of Address Type below. The Value field of a | ||||
Downstream Mapping 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 | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| MTU | Address Type | DS Flags | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream IP Address (4 or 16 octets) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Interface Address (4 or 16 octets) | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Multipath Type| Depth Limit | Multipath Length | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. (Multipath Information) . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Label | Protocol | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
. . | ||||
. . | ||||
. . | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
| Downstream Label | Protocol | | ||||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | ||||
Maximum Transmission Unit (MTU) | ||||
The MTU is the size in octets of the largest MPLS frame (including | ||||
label stack) that fits on the interface to the Downstream LSR. | ||||
Address Type | ||||
The Address Type indicates if the interface is numbered or | ||||
unnumbered. It also determines the length of the Downstream IP | ||||
Address and Downstream Interface fields. The resulting total for | ||||
the initial part of the TLV is listed in the table below as "K | ||||
Octets". The Address Type is set to one of the following values: | ||||
Type # Address Type K Octets | ||||
------ ------------ -------- | ||||
1 IPv4 Numbered 16 | ||||
2 IPv4 Unnumbered 16 | ||||
3 IPv6 Numbered 40 | ||||
4 IPv6 Unnumbered 28 | ||||
DS Flags | ||||
The DS Flags field is a bit vector with the following format: | ||||
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 that alters its ECMP algorithm | ||||
based on the FEC or deep packet examination, 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 | ||||
IPv4 addresses and interface indices are encoded in 4 octets; IPv6 | ||||
addresses are encoded in 16 octets. | ||||
If the interface to the downstream LSR is numbered, then the | ||||
Address Type MUST be set to IPv4 or IPv6, the Downstream IP | ||||
Address MUST be set to either the downstream LSR's Router ID or | ||||
the interface address of the downstream LSR, and the Downstream | ||||
Interface Address MUST be set to the downstream LSR's interface | ||||
address. | ||||
If the interface to the downstream LSR is unnumbered, the Address | ||||
Type MUST be IPv4 Unnumbered or IPv6 Unnumbered, the Downstream IP | ||||
Address MUST be the downstream LSR's Router ID, and the Downstream | ||||
Interface Address MUST be set to the index assigned by the | ||||
upstream LSR to the interface. | ||||
If an LSR does not know the IP address of its neighbor, then it | ||||
MUST set the Address Type to either IPv4 Unnumbered or IPv6 | ||||
Unnumbered. For IPv4, it must set the Downstream IP Address to | ||||
127.0.0.1; for IPv6 the address is set to 0::1. In both cases, | ||||
the interface index MUST be set to 0. If an LSR receives an Echo | ||||
Request packet with either of these addresses in the Downstream IP | ||||
Address field, this indicates that it MUST bypass interface | ||||
verification but continue with label validation. | ||||
If the originator of an Echo Request packet wishes to obtain | ||||
Downstream Mapping information but does not know the expected | ||||
label stack, then it SHOULD set the Address Type to either IPv4 | ||||
Unnumbered or IPv6 Unnumbered. For IPv4, it MUST set the | ||||
Downstream IP Address to 224.0.0.2; for IPv6 the address MUST be | ||||
set to FF02::2. In both cases, the interface index MUST be set to | ||||
0. If an LSR receives an Echo Request packet with the all-routers | ||||
multicast address, then this indicates that it MUST bypass both | ||||
interface and label stack validation, but return Downstream | ||||
Mapping TLVs using the information provided. | ||||
Multipath Type | ||||
The following Multipath Types are defined: | ||||
Key Type Multipath Information | ||||
--- ---------------- --------------------- | ||||
0 no multipath Empty (Multipath Length = 0) | ||||
2 IP address IP addresses | ||||
4 IP address range low/high address pairs | ||||
8 Bit-masked IP 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 exercise this path. | ||||
Depth Limit | ||||
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 Length | ||||
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) | ||||
The set of labels in the label stack as it would have appeared if | ||||
this router were forwarding the packet through this interface. | ||||
Any Implicit Null labels are explicitly included. Labels are | ||||
treated as numbers, i.e., they are right justified in the field. | ||||
A Downstream Label is 24 bits, in the same format as an MPLS label | ||||
minus the TTL field, i.e., the MSBit of the label is bit 0, the | ||||
LSBit is bit 19, the Traffic Class (TC) bits are bits 20-22, and | ||||
bit 23 is the S bit. The replying router SHOULD fill in the TC | ||||
and S bits; the LSR receiving the echo reply MAY choose to ignore | ||||
these bits. Protocol | ||||
The Protocol is taken from the following table: | ||||
Protocol # Signaling Protocol | ||||
---------- ------------------ | ||||
0 Unknown | ||||
1 Static | ||||
2 BGP | ||||
3 LDP | ||||
4 RSVP-TE | ||||
Authors' Addresses | Authors' Addresses | |||
Kireeti Kompella | Kireeti Kompella | |||
Juniper Networks, Inc. | Juniper Networks, Inc. | |||
Email: kireeti.kompella@gmail.com | Email: kireeti.kompella@gmail.com | |||
Carlos Pignataro | Carlos Pignataro | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
Email: cpignata@cisco.com | Email: cpignata@cisco.com | |||
Nagendra Kumar | Nagendra Kumar | |||
Cisco Systems, Inc. | Cisco Systems, Inc. | |||
Email: naikumar@cisco.com | Email: naikumar@cisco.com | |||
End of changes. 49 change blocks. | ||||
400 lines changed or deleted | 433 lines changed or added | |||
This html diff was produced by rfcdiff 1.42. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |