< draft-bonica-6man-comp-rtg-hdr-04.txt   draft-bonica-6man-comp-rtg-hdr-05.txt >
6man R. Bonica 6man R. Bonica
Internet-Draft Juniper Networks Internet-Draft Juniper Networks
Intended status: Standards Track Y. Kamite Intended status: Standards Track Y. Kamite
Expires: November 7, 2019 NTT Communications Corporation Expires: January 6, 2020 NTT Communications Corporation
T. Niwa T. Niwa
KDDI KDDI
A. Alston A. Alston
D. Henriques D. Henriques
Liquid Telecom Liquid Telecom
N. So N. So
F. Xu F. Xu
Reliance Jio Reliance Jio
G. Chen G. Chen
Baidu Baidu
Y. Zhu Y. Zhu
G. Yang G. Yang
China Telecom China Telecom
Y. Zhou Y. Zhou
ByteDance ByteDance
May 6, 2019 July 5, 2019
The IPv6 Compressed Routing Header (CRH) The IPv6 Compressed Routing Header (CRH)
draft-bonica-6man-comp-rtg-hdr-04 draft-bonica-6man-comp-rtg-hdr-05
Abstract Abstract
This document defines the Compressed Routing Header (CRH). The CRH, This document defines a new IPv6 Routing header type, called the
like any other Routing header, contains a list of segment identifiers Compressed Routing Header (CRH). SRv6+ nodes use the CRH to steer
(SID). The CRH differs from other Routing headers in that its packets from segment to segment along SRv6+ paths.
segment identifiers can be 8, 16 or 32 bits long.
Status of This Memo Status of This Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
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 https://datatracker.ietf.org/drafts/current/. Drafts is at https://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 November 7, 2019. This Internet-Draft will expire on January 6, 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 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
(https://trustee.ietf.org/license-info) in effect on the date of (https://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
carefully, as they describe your rights and restrictions with respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Requirements Language . . . . . . . . . . . . . . . . . . . . 4 2. Requirements Language . . . . . . . . . . . . . . . . . . . . 3
3. The Compressed Routing Header (CRH) . . . . . . . . . . . . . 4 3. The Compressed Routing Header (CRH) . . . . . . . . . . . . . 3
4. The CRH Domain . . . . . . . . . . . . . . . . . . . . . . . 6 4. Segment Forwarding Information Base (SFIB) . . . . . . . . . 5
5. Segment Identifiers (SID) . . . . . . . . . . . . . . . . . . 6 5. Processing Rules . . . . . . . . . . . . . . . . . . . . . . 5
6. Processing Rules . . . . . . . . . . . . . . . . . . . . . . 7 5.1. General . . . . . . . . . . . . . . . . . . . . . . . . . 5
6.1. General . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2. CRH Specific . . . . . . . . . . . . . . . . . . . . . . 6
6.2. CRH Specific . . . . . . . . . . . . . . . . . . . . . . 8 5.2.1. Computing Minimum CRH Length . . . . . . . . . . . . 7
6.2.1. Computing Minimum CRH Length . . . . . . . . . . . . 9 5.2.2. Strictly-Routed Topological Instructions . . . . . . 8
7. Mutability . . . . . . . . . . . . . . . . . . . . . . . . . 10 5.2.3. Loosely-Routed Topological Instructions . . . . . . . 9
8. Management Considerations . . . . . . . . . . . . . . . . . . 10 6. Mutability . . . . . . . . . . . . . . . . . . . . . . . . . 9
7. Compliance . . . . . . . . . . . . . . . . . . . . . . . . . 9
8. Management Considerations . . . . . . . . . . . . . . . . . . 9
9. Security Considerations . . . . . . . . . . . . . . . . . . . 10 9. Security Considerations . . . . . . . . . . . . . . . . . . . 10
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 11 10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10
11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 11 11. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 10
12. References . . . . . . . . . . . . . . . . . . . . . . . . . 11 12. References . . . . . . . . . . . . . . . . . . . . . . . . . 10
12.1. Normative References . . . . . . . . . . . . . . . . . . 11 12.1. Normative References . . . . . . . . . . . . . . . . . . 10
12.2. Informative References . . . . . . . . . . . . . . . . . 12 12.2. Informative References . . . . . . . . . . . . . . . . . 11
Appendix A. CRH Processing Examples . . . . . . . . . . . . . . 12 Appendix A. CRH Processing Examples . . . . . . . . . . . . . . 11
A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 14 A.1. Loose Source Routing . . . . . . . . . . . . . . . . . . 13
A.2. Loose Source Routing Preserving The First SID . . . . . . 14 A.2. Loose Source Routing Preserving The First SID . . . . . . 13
A.3. Strict Source Routing . . . . . . . . . . . . . . . . . . 15 A.3. Strict Source Routing . . . . . . . . . . . . . . . . . . 14
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 16 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 15
1. Introduction 1. Introduction
An IPv6 [RFC8200] source node can steer a packet through a specific This document defines a new IPv6 [RFC8200] Routing header type,
path to its destination. The source node defines the path as an called the Compressed Routing Header (CRH). SRv6+
ordered list of segments and encodes the path in an IPv6 Routing [I-D.bonica-spring-srv6-plus] nodes use the CRH to steer packets from
header. As per [RFC8200], all Routing headers includes the following segment to segment along SRv6+ paths.
fields:
o Next Header - Identifies the header immediately following the
Routing header.
o Hdr Ext Len - Length of the Routing header.
o Routing Type - Identifies the particular Routing header variant.
o Segments Left - The number of segments still to be traversed
before reaching the destination.
o Type-specific Data - Syntax and semantics are defined by the
Routing Type.
The following Routing types are currently defined:
o Source Route (i.e., RH0) [RFC5095] (deprecated)
o Type 2 Routing Header [RFC6275]
o RPL Source Route Header [RFC6554]
o Segment Routing Header (SRH)
[I-D.ietf-6man-segment-routing-header]
In each of the above-mentioned Routing Types, Type-specific Data
contains a list of one or more segment identifiers (SID). Typically,
a SID is an IPv6 address that identifies a segment endpoint. In the
SRH, the SID may carry additional semantics.
In all cases, the SID is 128 bits long. Therefore, routing headers
can be very large. For example, an 88-byte Source Route header is
required to specify a path that contains six segments. The same can
be said of the SRH.
Large Routing headers are undesirable for the following reasons:
o Many ASIC-based forwarders copy the entire IPv6 extension header
chain from buffer memory to on-chip memory. As the size of the
IPv6 extension header chain increases, so does the cost of this
copy.
o Because Path MTU Discovery (PMTUD) [RFC8201] is not entirely
reliable, many IPv6 hosts refrain from sending packets larger than
the IPv6 minimum link MTU (i.e., 1280 bytes). When packets are
small, the overhead imposed by large Routing headers becomes
pronounced.
This document defines the Compressed Routing Header (CRH). The CRH, For details regarding SRv6+ paths, segments, Segment Identifiers
like any other Routing header, contains a list of SIDs. The CRH (SIDs) and instructions, see [I-D.bonica-spring-srv6-plus].
differs from other Routing headers in that its SIDs can be 8, 16, or
32 bits long.
2. Requirements Language 2. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP "OPTIONAL" in this document are to be interpreted as described in BCP
14 [RFC2119] [RFC8174] when, and only when, they appear in all 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here. capitals, as shown here.
3. The Compressed Routing Header (CRH) 3. The Compressed Routing Header (CRH)
Figure 1 depicts the CRH.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left | | Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Last Entry |Com| Reserved | | Last Entry |Com| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID List ........ | SID List ........
+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-
Figure 1: Compressed Routing Header (CRH) Figure 1: Compressed Routing Header (CRH)
The CRH contains the following fields: Figure 1 depicts the CRH. The CRH contains the following fields:
o Next Header - Defined in [RFC8200]. o Next Header - Defined in [RFC8200].
o Hdr Ext Len - Defined in [RFC8200]. o Hdr Ext Len - Defined in [RFC8200].
o Routing Type - Defined in [RFC8200]. Value TBD by IANA. o Routing Type - Defined in [RFC8200]. Value TBD by IANA.
(Suggested value: 5) (Suggested value: 5)
o Segments Left (SL) - Defined in [RFC8200]. o Segments Left - Defined in [RFC8200].
o Last Entry - 8 bits. Represents the index (zero based), in the o Last Entry - 8 bits. Represents the zero-based index of the last
Segment List, of the last element of the Segment List.. element of the Segment List.
o Com (Compression) - 2 bits. Represents the length of each entry o Com (Compression) - 2 bits. Represents the length of each entry
in the SID List. Values are eight bits (0), sixteen bits (1), in the SID List. Values are reserved (0), sixteen bits (1),
thirty-two bits (2), and reserved (3). thirty-two bits (2), and reserved (3). In order to maximize
header compression, this value should reflect the smallest
feasible Maximum SID Value (MSV). See Section 5.1 of
[I-D.bonica-spring-srv6-plus] for MSV details.
o Reserved - SHOULD be set to zero by the sender. MUST be ignored o Reserved - SHOULD be set to zero by the sender. MUST be ignored
by the receiver. by the receiver.
o SID List - A zero-indexed list of SIDs. SIDs are listed in o SID List - Represents the SRv6+ path as an ordered list of SIDs.
reverse order, with SID[0] representing the packet's ultimate SIDs are listed in reverse order, with SID[0] representing the
destination, SID[1] representing the segment endpoint prior to the final segment, SID[1] representing the penultimate segment, and so
ultimate destination, and so forth. SIDs are listed in reverse forth. SIDs are listed in reverse order so that Segments Left can
order so that Segments Left can be used as an index to the SID be used as an index to the SID List. The SID indexed by Segments
List. See Section 5 for SID details. Left is called the current SID.
Figure 2 through Figure 4 illustrate CRH encodings with Com equal to Figure 2 and Figure 3 illustrate CRH encodings with Com equal to 1
0, 1 and 2. In all cases, the CRH MUST end on a 64-bit boundary. and 2. In all cases, the CRH MUST end on a 64-bit boundary.
Therefore, the CRH MAY be padded with zeros. Therefore, the CRH MAY be padded with zeros.
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left | | Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Last Entry |Com| Reserved | | Last Entry |Com| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID[0] | SID[1] | .........
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Figure 2: Eight-bit Encoding (Com equals 0)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Last Entry |Com| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SID[0] | SID[1] | | SID[0] | SID[1] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
| ......... | .........
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Figure 3: Sixteen-bit Encoding (Com equals 1) Figure 2: Sixteen-bit Encoding (Com equals 1)
0 1 2 3 0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header | Hdr Ext Len | Routing Type | Segments Left | | Next Header | Hdr Ext Len | Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Last Entry |Com| Reserved | | Last Entry |Com| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ SID[0] + + SID[0] +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ SID[1] + + SID[1] +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// // // //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+ SID[n] + + SID[n] +
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 4: Thirty-two bit Encoding (Com equals 2) Figure 3: Thirty-two bit Encoding (Com equals 2)
4. The CRH Domain
A CRH domain is a collection of IPv6 devices. On the control plane, 4. Segment Forwarding Information Base (SFIB)
CRH domain members exchange SID information with one another. On the
forwarding plane, CRH domain members accept packets containing the
CRH from one another.
Section 9 of this document requires the CRH domain to be contained A segment ingress node MUST maintain one Segment Forwarding
within an operator's trust domain. Information Base (SFIB) entry for each segment that it originates.
Each SFIB entry contains the following information:
5. Segment Identifiers (SID) o A SID
This document defines the following SID types: o A segment type
o Loosely routed o Topological instruction parameters
o Strictly routed The following are valid segment types:
All SIDs, regardless of type, map to exactly one IPv6 address. The o Strictly-routed
mapped address identifies an interface or set of interfaces (in the
case of multicast) that terminate the segment. The address MUST be
one of the following:
o A globally scoped IPv6 unicast address [RFC4291]. o Loosely-routed
o A Unique Local IPv6 Unicast Address (ULA) [RFC4193]. The following parameters are associated with topological instructions
that control strictly-routed segments:
o A Multicast address [RFC4291]. o An IPv6 address that identifies an interface on the segment egress
node.
A strictly routed SID also maps to a link interface. Nodes send o A primary interface identifier.
packets through that interface in order to access the segment
endpoint.
Loosely routed SIDs have domain-wide significance. This means that o Zero or more secondary interface identifiers.
within a CRH domain, a loosely routed SID MUST map to exactly one
IPv6 address. By contrast, strictly routed SIDs have node-local
significance. This means that within a CRH domain, one node can map
a strictly routed SID to one address while another node maps the same
strictly routed SID to a different address. See Appendix A for an
example.
Forwarding nodes can learn the above-mentioned mappings from a Loosely-routed segments are associated with a single topological
central controller, from a distributed routing protocol or using any instruction parameter. This parameter is an IPv6 address that
other means. The mechanisms that forwarding nodes use to learn the identifies an interface on the segment egress node.
above-mentioned mappings are beyond the scope of this document.
6. Processing Rules 5. Processing Rules
6.1. General 5.1. General
[RFC8200] defines rules that apply to IPv6 extension headers, in [RFC8200] defines rules that apply to IPv6 extension headers, in
general, and IPv6 Routing headers, in particular. All of these rules general, and IPv6 Routing headers, in particular. All of these rules
apply to the CRH. apply to the CRH.
For example: For example:
o Extension headers (except for the Hop-by-Hop Options header) are o Extension headers (except for the Hop-by-Hop Options header) are
not processed, inserted, or deleted by any node along a packet's not processed, inserted, or deleted by any node along a packet's
delivery path, until the packet reaches the node (or each of the delivery path, until the packet reaches the node (or each of the
set of nodes, in the case of multicast) identified in the set of nodes, in the case of multicast) identified in the
Destination Address field of the IPv6 header. Destination Address field of the IPv6 header.
o If, while processing a received packet, a node encounters a o If, while processing a received packet, a node encounters a
Routing header with an unrecognized Routing Type value, the Routing header with an unrecognized Routing Type value, the
required behavior of the node depends on the value of the Segments required behavior of the node depends on the value of the Segments
Left field. If Segments Left is zero, the node must ignore the Left field. If Segments Left is zero, the node must ignore the
Routing header and proceed to process the next header in the Routing header and proceed to process the next header in the
packet, whose type is identified by the Next Header field in the packet, whose type is identified by the Next Header field in the
Routing header. If Segments Left is non-zero, the node must Routing header. If Segments Left is non-zero, the node must
discard the packet and send an ICMP [RFC4443] Parameter Problem, discard the packet and send an ICMPv6 [RFC4443] Parameter Problem,
Code 0, message to the packet's Source Address, pointing to the Code 0, message to the packet's Source Address, pointing to the
unrecognized Routing Type. unrecognized Routing Type.
o If, after processing a Routing header of a received packet, an o If, after processing a Routing header of a received packet, an
intermediate node determines that the packet is to be forwarded intermediate node determines that the packet is to be forwarded
onto a link whose link MTU is less than the size of the packet, onto a link whose link MTU is less than the size of the packet,
the node must discard the packet and send an ICMP Packet Too Big the node must discard the packet and send an ICMPv6 Packet Too Big
message to the packet's Source Address. message to the packet's Source Address.
6.2. CRH Specific 5.2. CRH Specific
When a node recognizes and processes a CRH, it executes the following When a node recognizes and processes a CRH, it executes the following
procedure: procedure:
o If the IPv6 Source Address is a link-local address, discard the o If the IPv6 Source Address is a link-local address, discard the
packet. packet.
o If the IPv6 Source Address is a multicast address, discard the o If the IPv6 Source Address is a multicast address, discard the
packet. packet.
o If Segments Left equal 0, skip over the CRH and process the next o If Segments Left equal 0, skip over the CRH and process the next
header in the packet. header in the packet.
o If Segments Left is greater than Last Entry plus one, send an ICMP o If Segments Left is greater than Last Entry plus one, discard the
Parameter Problem, Code 0, message to the Source Address, pointing packet and send an ICMPv6 Parameter Problem, Code 0, message to
to the Segments Left field, and discard the packet. the Source Address, pointing to the Segments Left field.
o If Com is equal to (3) Reserved, send an ICMP Parameter Problem,
Code 0, message to the Source Address, pointing to the Com field,
and discard the packet.
o If the IPv6 Hop Limit is less than or equal to 1, send an ICMP o If Com is equal to (0) or (3) Reserved, discard the packet and
Time Exceeded -- Hop Limit Exceeded in Transit message to the send an ICMPv6 Parameter Problem, Code 0, message to the Source
Source Address and discard the packet. Address, pointing to the Com field.
o Compute L, the minimum CRH length (See Section 6.2.1) o Compute L, the minimum CRH length (See Section 5.2.1)
o If L is greater than Hdr Ext Len, send an ICMP Parameter Problem, o If L is equal to zero or L is greater than Hdr Ext Len, discard
Code 0, message to the Source Address, pointing to the Last Entry the packet and send an ICMPv6 Parameter Problem, Code 0, message
field, and discard the packet. to the Source Address, pointing to the Last Entry field.
o Decrement Segments Left (i.e., SL). o Decrement the packet's Hop Count.
o Search for SID[SL] in the table that maps SID's to IPv6 addresses o If the Hop Count has expired, discard the packet and send an
and interfaces. If SID[SL] cannot be found in that table, send an ICMPv6 Time Expired message to the packet's source node.
ICMP Parameter Problem, Code 0, message to the Source Address,
pointing to SID[SL], and discard the packet.
o Copy the address associated with SID[SL] to the IPv6 Destination o Decrement Segments Left
Address.
o If the IPv6 Destination address is a multicast address and SL is o Search for the current SID in the SFIB.
greater than zero, send an ICMP Parameter Problem, Code 0, message
to the Source Address, pointing to Segment List [SL], and discard
the packet.
o Decrement the IPv6 Hop Limit. o If the above-mentioned search does not return an SFIB entry,
discard the packet and send an ICMPv6 Parameter Problem, Code 0,
message to the Source Address, pointing to the current SID.
o If SID[SL] is a loosely routed segment, resubmit the packet to the o If the above-mentioned search returns an SFIB entry and the
IPv6 module for transmission to the new destination. segment type is strictly-routed, execute the strictly-routed
topological instruction described in Section 5.2.2.
o If SID[SL] is a strictly routed segment, forward the packet o If the above-mentioned search returns an SFIB entry and the
through the interface that is associated with SID[SL]. segment type is loosely-routed, execute the loosely-routed
topological instruction described in Section 5.2.3.
The above stated rules are demonstrated in Appendix A. The above stated rules are demonstrated in Appendix A.
6.2.1. Computing Minimum CRH Length 5.2.1. Computing Minimum CRH Length
The algorithm described in this section accepts the following CRH The algorithm described in this section accepts the following CRH
fields as its input parameters: fields as its input parameters:
o Compression (Com). o Compression (Com).
o Last Entry. o Last Entry.
It yields L, the minimum CRH length. The minimum CRH length is It yields L, the minimum CRH length. The minimum CRH length is
measured in 8-octet units, not including the first 8 octets. measured in 8-octet units, not including the first 8 octets.
<CODE BEGINS> <CODE BEGINS>
if (Com == 0 ) { /* Eight bit encoding */ if (Com == 1 ) { /* Sixteen bit encoding */
L = ( ( Last Entry + 1 ) / 8 );
if ( ( Last Entry + 1 ) % 8 )
L++;
}
elsif (Com == 1 ) { /* Sixteen bit encoding */
L = ( ( Last Entry + 1 ) / 4 ); L = ( ( Last Entry + 1 ) / 4 );
if ( ( Last Entry + 1 ) % 4 ) if ( ( Last Entry + 1 ) % 4 )
L++; L++;
} }
elsif (Com == 2 ) { /* Thirty-two bit encoding */ elsif (Com == 2 ) { /* Thirty-two bit encoding */
L = ( ( Last Entry + 1 ) / 2 ); L = ( ( Last Entry + 1 ) / 2 );
if ( ( Last Entry + 1 ) % 2 ) if ( ( Last Entry + 1 ) % 2 )
L++; L++;
} }
else { /* Invalid Com */ else { /* Invalid Com */
L = 0xFF L = 0xFF
} }
return(L) return(0)
<CODE ENDS> <CODE ENDS>
7. Mutability 5.2.2. Strictly-Routed Topological Instructions
The Segments Left field is mutable and MAY be decremented by A strictly-routed topological instruction accepts the following
processing nodes. All remaining fields are immutable. parameters::
o An IPv6 address that identifies an interface on the segment egress
node.
o A primary interface identifier.
o Zero or more secondary interface identifiers.
A strictly-routed topological instruction behaves as follows:
o If none of the interfaces identified by the above-mentioned
parameters are operational, discard the packet and send an ICMPv6
Destination Unreachable message (Code: 5, Source Route Failed) to
the packet's source node.
o Overwrite the packet's Destination Address with the IPv6 address
that was received as a parameter.
o If the primary interface is active, forward the packet through the
primary interface.
o If the primary interface is not active and any of the secondary
interfaces are active, forward the packet through one of the
secondary interfaces. Execute procedures so that all packets
belonging to a flow are forwarded through the same secondary
interface.
5.2.3. Loosely-Routed Topological Instructions
A loosely-routed topological instruction accepts a single parameter.
This parameter is an IPv6 address that identifies an interface on the
segment egress node.
A loosely-routed topological instruction behaves as follows:
o If the segment ingress node does not have a viable route to the
IPv6 address included as a parameter, discard the packet and send
an ICMPv6 Destination Unreachable message (Code:1 Net Unreachable)
to the packet's source node.
o Overwrite the packet's Destination Address with the destination
address that was included as a parameter.
o Forward the packet to the next hop along the least cost path to
the segment egress node. If there are multiple least cost paths
to the segment egress node (i.e., Equal Cost Multipath), execute
procedures so that all packets belonging to a flow are forwarded
through the same next hop.
6. Mutability
In the CRH, the Segments Left field is mutable. All remaining fields
are immutable.
7. Compliance
In order to be compliant with this specification, an implementation
MUST support 32-bit SID encoding. It MAY also support 16-bit SID
encoding.
8. Management Considerations 8. Management Considerations
PING and TRACEROUTE [RFC2151] both operate correctly in the presence PING and TRACEROUTE [RFC2151] both operate correctly in the presence
of the CRH. of the CRH.
9. Security Considerations 9. Security Considerations
The CRH can be used within trusted domains only. In order to enforce The CRH can be used within trusted domains only. In order to enforce
this requirement, domain edge routers MUST do one of the following: this requirement, domain edge routers MUST do one of the following:
o Discard all inbound packets that contain a CRH o Discard all inbound packets that are destined for infrastructure
interfaces and contain a CRH
o Authenticate [RFC4302] [RFC4303] all inbound packets that contain o Authenticate [RFC4302] [RFC4303] all inbound packets that are
a CRH destined for infrastructure interfaces and contain a CRH
10. IANA Considerations 10. IANA Considerations
This document makes the following registration in the Internet This document makes the following registration in the Internet
Protocol Version 6 (IPv6) Parameters "Routing Type" registry Protocol Version 6 (IPv6) Parameters "Routing Type" registry
maintained by IANA: maintained by IANA:
Suggested Suggested
Value Description Reference Value Description Reference
------------------------------------------------------------ ------------------------------------------------------------
skipping to change at page 11, line 25 skipping to change at page 10, line 36
11. Acknowledgements 11. Acknowledgements
Thanks to Joel Halpern, Tony Li, Gerald Schmidt, Nancy Shaw and Thanks to Joel Halpern, Tony Li, Gerald Schmidt, Nancy Shaw and
Chandra Venkatraman for their comments. Chandra Venkatraman for their comments.
12. References 12. References
12.1. Normative References 12.1. Normative References
[I-D.bonica-spring-srv6-plus]
Bonica, R., Hegde, S., Kamite, Y., Alston, A., Henriques,
D., Halpern, J., and J. Linkova, "IPv6 Support for Segment
Routing: SRv6+", draft-bonica-spring-srv6-plus-01 (work in
progress), July 2019.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997, DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>. <https://www.rfc-editor.org/info/rfc2119>.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing
Architecture", RFC 4291, DOI 10.17487/RFC4291, February
2006, <https://www.rfc-editor.org/info/rfc4291>.
[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, [RFC4302] Kent, S., "IP Authentication Header", RFC 4302,
DOI 10.17487/RFC4302, December 2005, DOI 10.17487/RFC4302, December 2005,
<https://www.rfc-editor.org/info/rfc4302>. <https://www.rfc-editor.org/info/rfc4302>.
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", [RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)",
RFC 4303, DOI 10.17487/RFC4303, December 2005, RFC 4303, DOI 10.17487/RFC4303, December 2005,
<https://www.rfc-editor.org/info/rfc4303>. <https://www.rfc-editor.org/info/rfc4303>.
[RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet [RFC4443] Conta, A., Deering, S., and M. Gupta, Ed., "Internet
Control Message Protocol (ICMPv6) for the Internet Control Message Protocol (ICMPv6) for the Internet
skipping to change at page 12, line 10 skipping to change at page 11, line 24
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/info/rfc8174>. May 2017, <https://www.rfc-editor.org/info/rfc8174>.
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6
(IPv6) Specification", STD 86, RFC 8200, (IPv6) Specification", STD 86, RFC 8200,
DOI 10.17487/RFC8200, July 2017, DOI 10.17487/RFC8200, July 2017,
<https://www.rfc-editor.org/info/rfc8200>. <https://www.rfc-editor.org/info/rfc8200>.
[RFC8201] McCann, J., Deering, S., Mogul, J., and R. Hinden, Ed.,
"Path MTU Discovery for IP version 6", STD 87, RFC 8201,
DOI 10.17487/RFC8201, July 2017,
<https://www.rfc-editor.org/info/rfc8201>.
12.2. Informative References 12.2. Informative References
[I-D.ietf-6man-segment-routing-header]
Filsfils, C., Previdi, S., Leddy, J., Matsushima, S., and
d. daniel.voyer@bell.ca, "IPv6 Segment Routing Header
(SRH)", draft-ietf-6man-segment-routing-header-18 (work in
progress), April 2019.
[RFC2151] Kessler, G. and S. Shepard, "A Primer On Internet and TCP/ [RFC2151] Kessler, G. and S. Shepard, "A Primer On Internet and TCP/
IP Tools and Utilities", FYI 30, RFC 2151, IP Tools and Utilities", FYI 30, RFC 2151,
DOI 10.17487/RFC2151, June 1997, DOI 10.17487/RFC2151, June 1997,
<https://www.rfc-editor.org/info/rfc2151>. <https://www.rfc-editor.org/info/rfc2151>.
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast
Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005,
<https://www.rfc-editor.org/info/rfc4193>.
[RFC5095] Abley, J., Savola, P., and G. Neville-Neil, "Deprecation
of Type 0 Routing Headers in IPv6", RFC 5095,
DOI 10.17487/RFC5095, December 2007,
<https://www.rfc-editor.org/info/rfc5095>.
[RFC6275] Perkins, C., Ed., Johnson, D., and J. Arkko, "Mobility
Support in IPv6", RFC 6275, DOI 10.17487/RFC6275, July
2011, <https://www.rfc-editor.org/info/rfc6275>.
[RFC6554] Hui, J., Vasseur, JP., Culler, D., and V. Manral, "An IPv6
Routing Header for Source Routes with the Routing Protocol
for Low-Power and Lossy Networks (RPL)", RFC 6554,
DOI 10.17487/RFC6554, March 2012,
<https://www.rfc-editor.org/info/rfc6554>.
Appendix A. CRH Processing Examples Appendix A. CRH Processing Examples
This appendix provides examples of CRH processing in the following This appendix provides examples of CRH processing in the following
applications: applications:
o Loose source routing (Appendix A.1) o Loose source routing (Appendix A.1)
o Loose source routing preserving the first SID (Appendix A.2) o Loose source routing preserving the first SID (Appendix A.2)
o Strict source routing (Appendix A.3) o Strict source routing (Appendix A.3)
----------- -----------
2001:db8:0:2/64 |Node: I2 | 2001:db8:0:4/64 2001:db8:0:2/64 |Node: I2 | 2001:db8:0:4/64
----------------------|Loopback: |-------------------- ----------------------|Loopback: |--------------------
| ::2 |2001:db8::2| ::1 | | ::2 |2001:db8::2| ::1 |
| ----------- | | ----------- |
| ::1 :: 2| | ::1 :: 2|
----------- ----------- ----------- ----------- ----------- -----------
|Node: S |2001:db8:0:1/64|Node: I1 |2001:db8:0:3/64|Node: I3 | |Node: S |2001:db8:0:1/64|Node: I1 |2001:db8:0:3/64|Node: I3 |
|Loopback |---------------|Loopback: |---------------|Loopback: | |Loopback |---------------|Loopback: |---------------|Loopback: |
|2001:db8::a| ::1 ::2 |2001:db8::1| ::1 ::2 |2001:db8::3| |2001:db8::a| ::1 ::2 |2001:db8::1| ::1 ::2 |2001:db8::3|
skipping to change at page 13, line 26 skipping to change at page 12, line 22
|Loopback |---------------|Loopback: |---------------|Loopback: | |Loopback |---------------|Loopback: |---------------|Loopback: |
|2001:db8::a| ::1 ::2 |2001:db8::1| ::1 ::2 |2001:db8::3| |2001:db8::a| ::1 ::2 |2001:db8::1| ::1 ::2 |2001:db8::3|
----------- ----------- ----------- ----------- ----------- -----------
| ::1 | ::1
----------- | ----------- |
|Node: D | 2001:db8:0:b/64 | |Node: D | 2001:db8:0:b/64 |
|Loopback: |--------------------- |Loopback: |---------------------
|2001:db8::b| ::2 |2001:db8::b| ::2
----------- -----------
Figure 5: Reference Topology Figure 4: Reference Topology
Figure 5 provides a reference topology that is used in all examples. Figure 4 provides a reference topology that is used in all examples.
+--------------------+-----+--------------+ +--------------------+-----+----------------+--------------+
| Instantiating Node | SID | IPv6 Address | | Instantiating Node | SID | Segment Type | IPv6 Address |
+--------------------+-----+--------------+ +--------------------+-----+----------------+--------------+
| All | 1 | 2001:db8::1 | | All | 1 | Loosely-routed | 2001:db8::1 |
| All | 2 | 2001:db8::2 | | All | 2 | Loosely-routed | 2001:db8::2 |
| All | 3 | 2001:db8::3 | | All | 3 | Loosely-routed | 2001:db8::3 |
| All | 10 | 2001:db8::a | | All | 10 | Loosely-routed | 2001:db8::a |
| All | 11 | 2001:db8::b | | All | 11 | Loosely-routed | 2001:db8::b |
+--------------------+-----+--------------+ +--------------------+-----+----------------+--------------+
Table 1: Loosely Routed SIDs Table 1: Loosely Routed SIDs
Table 1 provides mappings for loosely routed SIDs. These mappings Table 1 describes SFIB entries that are instantiated on all nodes.
are instantiated on all nodes in the reference topology. All of these SFIB entries represent loosely-routed segments.
+--------------------+-----+-----------------+-----------+ +---------------+-----+-----------------+------------+--------------+
| Instantiating Node | SID | IPv6 Address | Interface | | Instantiating | SID | IPv6 Address | Primary | Secondary |
+--------------------+-----+-----------------+-----------+ | Node | | | Interface | Interfaces |
| S | 129 | 2001:db8:0:1::2 | S -> I1 | +---------------+-----+-----------------+------------+--------------+
| S | 130 | 2001:db8:0:2::2 | S -> I2 | | S | 129 | 2001:db8:0:1::2 | S -> I1 | none |
| I1 | 129 | 2001:db8:0:3::2 | I1 -> I3 | | S | 130 | 2001:db8:0:2::2 | S -> I2 | none |
| I2 | 129 | 2001:db8:0:4::2 | I2 -> I3 | | I1 | 129 | 2001:db8:0:3::2 | I1 -> I3 | none |
| I3 | 129 | 2001:db8:0:b::2 | I3 -> D | | I2 | 129 | 2001:db8:0:4::2 | I2 -> I3 | none |
+--------------------+-----+-----------------+-----------+ | I3 | 129 | 2001:db8:0:b::2 | I3 -> D | none |
+---------------+-----+-----------------+------------+--------------+
Table 2: Strictly Routed SIDs Table 2: Strictly Routed SIDs
Table 2 provides mappings for strictly routed SIDs. These mappings Table 2 describes SFIB entries that are instantiated on specific
are available on the instantiating node only. nodes. All of these SFIB entries represent strictly-routed segments.
A.1. Loose Source Routing A.1. Loose Source Routing
In this example, Node S sends a packet to Node D, specifying loose In this example, Node S sends a packet to Node D, specifying loose
source route through Node I3. In this example, the first node in the source route through Node I3. In this example, the first node in the
path, I3, does not appear in the CRH segment list. Therefore, the path, I3, does not appear in the CRH segment list. Therefore, the
destination node may not be able to send return traffic through the destination node may not be able to send return traffic through the
same path. same path.
+-------------------------------------+-------------------+ +-------------------------------------+-------------------+
 End of changes. 68 change blocks. 
255 lines changed or deleted 203 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/