6man | R. Bonica |
Internet-Draft | Juniper Networks |
Intended status: Standards Track | Y. Kamite |
Expires: January 6, 2020 | NTT Communications Corporation |
T. Niwa | |
KDDI | |
A. Alston | |
D. Henriques | |
Liquid Telecom | |
N. So | |
F. Xu | |
Reliance Jio | |
G. Chen | |
Baidu | |
Y. Zhu | |
G. Yang | |
China Telecom | |
Y. Zhou | |
ByteDance | |
July 5, 2019 |
The IPv6 Compressed Routing Header (CRH)
draft-bonica-6man-comp-rtg-hdr-05
This document defines a new IPv6 Routing header type, called the Compressed Routing Header (CRH). SRv6+ nodes use the CRH to steer packets from segment to segment along SRv6+ paths.
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."
This Internet-Draft will expire on January 6, 2020.
Copyright (c) 2019 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
This document defines a new IPv6 Routing header type, called the Compressed Routing Header (CRH). SRv6+ nodes use the CRH to steer packets from segment to segment along SRv6+ paths.
For details regarding SRv6+ paths, segments, Segment Identifiers (SIDs) and instructions, see [I-D.bonica-spring-srv6-plus].
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC8174] when, and only when, they appear in all capitals, as shown here.
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 List ........ +-+-+-+-+-+-+-+-+-+-+-
Figure 1: Compressed Routing Header (CRH)
Figure 1 depicts the CRH. The CRH contains the following fields:
Figure 2 and Figure 3 illustrate CRH encodings with Com equal to 1 and 2. In all cases, the CRH MUST end on a 64-bit boundary. Therefore, the CRH MAY be padded with zeros.
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] | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-| | ......... +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Figure 2: Sixteen-bit Encoding (Com equals 1)
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[n] + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 3: Thirty-two bit Encoding (Com equals 2)
A segment ingress node MUST maintain one Segment Forwarding Information Base (SFIB) entry for each segment that it originates. Each SFIB entry contains the following information:
The following are valid segment types:
The following parameters are associated with topological instructions that control strictly-routed segments:
Loosely-routed segments are associated with a single topological instruction parameter. This parameter is an IPv6 address that identifies an interface on the segment egress node.
[RFC8200] defines rules that apply to IPv6 extension headers, in general, and IPv6 Routing headers, in particular. All of these rules apply to the CRH.
For example:
When a node recognizes and processes a CRH, it executes the following procedure:
The above stated rules are demonstrated in
The algorithm described in this section accepts the following CRH fields as its input parameters:
It yields L, the minimum CRH length. The minimum CRH length is measured in 8-octet units, not including the first 8 octets.
<CODE BEGINS> if (Com == 1 ) { /* Sixteen bit encoding */ L = ( ( Last Entry + 1 ) / 4 ); if ( ( Last Entry + 1 ) % 4 ) L++; } elsif (Com == 2 ) { /* Thirty-two bit encoding */ L = ( ( Last Entry + 1 ) / 2 ); if ( ( Last Entry + 1 ) % 2 ) L++; } else { /* Invalid Com */ L = 0xFF } return(0) <CODE ENDS>
A strictly-routed topological instruction accepts the following parameters::
A strictly-routed topological instruction behaves as follows:
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:
In the CRH, the Segments Left field is mutable. All remaining fields are immutable.
In order to be compliant with this specification, an implementation MUST support 32-bit SID encoding. It MAY also support 16-bit SID encoding.
PING and TRACEROUTE both operate correctly in the presence of the CRH.
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 document makes the following registration in the Internet Protocol Version 6 (IPv6) Parameters "Routing Type" registry maintained by IANA:
Suggested Value Description Reference ------------------------------------------------------------ 5 Compressed Routing Header (CRH) This document
Thanks to Joel Halpern, Tony Li, Gerald Schmidt, Nancy Shaw and Chandra Venkatraman for their comments.
[RFC2151] | Kessler, G. and S. Shepard, "A Primer On Internet and TCP/IP Tools and Utilities", FYI 30, RFC 2151, DOI 10.17487/RFC2151, June 1997. |
This appendix provides examples of CRH processing in the following applications:
----------- 2001:db8:0:2/64 |Node: I2 | 2001:db8:0:4/64 ----------------------|Loopback: |-------------------- | ::2 |2001:db8::2| ::1 | | ----------- | | ::1 :: 2| ----------- ----------- ----------- |Node: S |2001:db8:0:1/64|Node: I1 |2001:db8:0:3/64|Node: I3 | |Loopback |---------------|Loopback: |---------------|Loopback: | |2001:db8::a| ::1 ::2 |2001:db8::1| ::1 ::2 |2001:db8::3| ----------- ----------- ----------- | ::1 ----------- | |Node: D | 2001:db8:0:b/64 | |Loopback: |--------------------- |2001:db8::b| ::2 -----------
Figure 4: Reference Topology
Figure 4 provides a reference topology that is used in all examples.
Instantiating Node | SID | Segment Type | IPv6 Address |
---|---|---|---|
All | 1 | Loosely-routed | 2001:db8::1 |
All | 2 | Loosely-routed | 2001:db8::2 |
All | 3 | Loosely-routed | 2001:db8::3 |
All | 10 | Loosely-routed | 2001:db8::a |
All | 11 | Loosely-routed | 2001:db8::b |
Table 1 describes SFIB entries that are instantiated on all nodes. All of these SFIB entries represent loosely-routed segments.
Instantiating Node | SID | IPv6 Address | Primary Interface | Secondary Interfaces |
---|---|---|---|---|
S | 129 | 2001:db8:0:1::2 | S -> I1 | none |
S | 130 | 2001:db8:0:2::2 | S -> I2 | none |
I1 | 129 | 2001:db8:0:3::2 | I1 -> I3 | none |
I2 | 129 | 2001:db8:0:4::2 | I2 -> I3 | none |
I3 | 129 | 2001:db8:0:b::2 | I3 -> D | none |
Table 2 describes SFIB entries that are instantiated on specific nodes. All of these SFIB entries represent strictly-routed segments.
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 path, I3, does not appear in the CRH segment list. Therefore, the destination node may not be able to send return traffic through the same path.
As the packet travels from S to I3: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 0 |
Destination Address = 2001:db8::3 | Segments Left = 1 |
SID[0] = 11 |
As the packet travels from I3 to D: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 0 |
Destination Address = 2001:db8::b | Segments Left = 0 |
SID[0] = 11 |
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 path, I3, appears in the CRH segment list. Therefore, the destination node can send return traffic through the same path.
As the packet travels from S to I3: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 1 |
Destination Address = 2001:db8::3 | Segments Left = 1 |
SID[0] = 11 | |
SID[1] = 3 |
As the packet travels from I3 to D: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 1 |
Destination Address = 2001:db8::b | Segments Left = 0 |
SID[0] = 11 | |
SID[1] = 3 |
In this example, Node S sends a packet to Node D, specifying the strict source route through I1 and I3.
As the packet travels from S to I1: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 1 |
Destination Address = 2001:db8:0:1::2 | Segments Left = 2 |
SID[0] = 129 | |
SID[1] = 129 |
As the packet travels from I1 to I3: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 1 |
Destination Address = 2001:db8:0:3::2 | Segments Left = 1 |
SID[0] = 129 | |
SID[1] = 129 |
As the packet travels from I3 to D: | |
---|---|
Source Address = 2001:db8::a | Last Entry = 1 |
Destination Address = 2001:db8:0:b::2 | Segments Left = 0 |
SID[0] = 129 | |
SID[1] = 129 |