6man R. Bonica
Internet-Draft Juniper Networks
Intended status: Standards Track February 27, 2019
Expires: August 31, 2019

The IPv6 Compressed Routing Header (CRH)
draft-bonica-6man-comp-rtg-hdr-00

Abstract

This document defines the Compressed Routing Header (CRH). The CRH, like any other Routing header, contains a list of segment identifiers (SID). The CRH differs from other Routing headers in that its segment identifiers can be 8, 16 or 32 bits long.

Status of This Memo

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 August 31, 2019.

Copyright Notice

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.


Table of Contents

1. Introduction

An IPv6 source node can steer a packet through a specific path to its destination. The source node defines the path as an ordered list of segments and encodes the path in an IPv6 Routing header. As per [RFC8200], all Routing headers includes the following fields:

The following Routing types are currently defined:

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:

This document defines the Compressed Routing Header (CRH). The CRH, like any other Routing header, contains a list of SIDs. The CRH differs from other Routing headers in that its SIDs can be 8, 16, or 32 bits long.

2. Requirements Language

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.

3. The Compressed Routing Header (CRH)

Figure 1 depicts the CRH.

     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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Segments |Com|                  Reserved                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                           SID List   ........
    +-+-+-+-+-+-+-+-+-+-+-   

Figure 1: Compressed Routing Header (CRH)

The CRH contains the following fields:

Figure 2 through Figure 4 illustrate CRH encodings with Com equal to 0, 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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Segments |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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Segments |Com|                  Reserved                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |             SID[0]            |          SID[1]               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
    |                          .........
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-        
   

Figure 3: 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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Segments |Com|                  Reserved                     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[0]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[1]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    //                                                              //
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[n]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   

Figure 4: Thirty-two bit Encoding (Com equals 2)

4. Segment Identifiers (SID)

This document defines the following SID types:

All SIDs, regardless of type, map to exactly one IPv6 address. The 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:

A strictly routed SID also maps to a link interface. Nodes send packets through that interface in order to access the segment endpoint.

SIDs are instantiated on nodes and their significance is limited to the node upon which they are instantiated. For example, assume that a SID is instantiated on multiple nodes. It can be loosely routed on one node and strictly routed on another. Likewise, it can map to a different globally scoped address on each node. See Appendix A for an example.

Forwarding nodes can learn the above-mentioned mappings from a central controller, from a distributed routing protocol or using any other means. The mechanisms that forwarding nodes use to learn the above-mentioned mappings are beyond the scope of this document.

5. Processing Rules

5.1. General

[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:

5.2. CRH Specific

When a node recognizes and processes a CRH, it executes the following procedure:

Appendix A.

The above stated rules are demonstrated in

5.2.1. Computing Minimum CRH Length

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 == 0 ) {         /* Eight bit encoding */
    L = ( Segments / 8 );
    if ( Segments % 8 )
        L++;
    }
elsif (Com == 1 ) {    /* Sixteen bit encoding */
    L = ( Segments / 4 );
    if ( Segments % 4 )
        L++;
    }
elsif (Com == 2 ) {    /* Thirty-two bit encoding */
    L = ( Segments / 2 );
    if ( Segments % 2 )
        L++;
    }
else {                  /* Invalid Com */
    L = 0xFF

    }

return(L)

<CODE ENDS>

6. Mutability

The Segments Left field is mutable and MAY be decremented by processing nodes. All remaining fields are immutable.

7. Management Considerationsinclude

PING and TRACEROUTE both operate correctly in the presence of the CRH.

8. Security Considerations

The CRH can be used within trusted domains only. In order to enforce this requirement, domain edge routers MUST do one of the following:

9. IANA Considerations

This document makes the following registration in the Internet Protocol Version 6 (IPv6) Parameters "Routing Type" registry maintained by IANA:

     Value            Description                 Reference
   ------------------------------------------------------------
     TBD      Compressed Routing Header (CRH)     This document

10. Acknowledgements

Thanks to Joel Halpern, Gerald Schmidt, Nancy Shaw and Chandra Venkatraman for their comments.

11. References

11.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[RFC4291] Hinden, R. and S. Deering, "IP Version 6 Addressing Architecture", RFC 4291, DOI 10.17487/RFC4291, February 2006.
[RFC4302] Kent, S., "IP Authentication Header", RFC 4302, DOI 10.17487/RFC4302, December 2005.
[RFC4303] Kent, S., "IP Encapsulating Security Payload (ESP)", RFC 4303, DOI 10.17487/RFC4303, December 2005.
[RFC4443] Conta, A., Deering, S. and M. Gupta, "Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification", STD 89, RFC 4443, DOI 10.17487/RFC4443, March 2006.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017.
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 (IPv6) Specification", STD 86, RFC 8200, DOI 10.17487/RFC8200, July 2017.
[RFC8201] McCann, J., Deering, S., Mogul, J. and R. Hinden, "Path MTU Discovery for IP version 6", STD 87, RFC 8201, DOI 10.17487/RFC8201, July 2017.

11.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)", Internet-Draft draft-ietf-6man-segment-routing-header-16, February 2019.
[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.
[RFC4193] Hinden, R. and B. Haberman, "Unique Local IPv6 Unicast Addresses", RFC 4193, DOI 10.17487/RFC4193, October 2005.
[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.
[RFC6275] Perkins, C., Johnson, D. and J. Arkko, "Mobility Support in IPv6", RFC 6275, DOI 10.17487/RFC6275, July 2011.
[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.

Appendix A. CRH Processing Examples

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 5: Reference Topology

Figure 5 provides a reference topology that is used in all examples.

Loosely Routed SIDs
Instantiating Node SID IPv6 Address
All 1 2001:db8::1
All 2 2001:db8::2
All 3 2001:db8::3
All 10 2001:db8::a
All 11 2001:db8::b

Table 1 provides mappings for loosely routed SIDs. These mappings are instantiated on all nodes in the reference topology.

Strictly Routed SIDs
Instantiating Node SID IPv6 Address Interface
S 129 2001:db8:0:1::2 S -> I1
S 130 2001:db8:0:2::2 S -> I2
I1 129 2001:db8:0:3::2 I1 -> I3
I2 129 2001:db8:0:4::2 I2 -> I3
I3 129 2001:db8:0:b::2 I3 -> D

Table 2 provides mappings for strictly routed SIDs. These mappings are available on the instantiating node only.

A.1. Loose Source Routing

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 Segments = 1
Destination Address = 2001:db8::3 Segments Left = 1
SID[0] = 11

As the packet travels from I3 to D:
Source Address = 2001:db8::a Segments = 1
Destination Address = 2001:db8::b Segments Left = 0
SID[0] = 11

A.2. Loose Source Routing Preserving The First SID

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 Segments = 2
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 Segments = 2
Destination Address = 2001:db8::b Segments Left = 0
SID[0] = 11
SID[1] = 3

A.3. Strict Source Routing

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 Segments = 2
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 Segments = 2
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 Segments = 2
Destination Address = 2001:db8:0:b::2 Segments Left = 0
SID[0] = 129
SID[1] = 129

Author's Address

Ron Bonica Juniper Networks 2251 Corporate Park Drive Herndon, Virginia 20171 USA EMail: rbonica@juniper.net