6man R. Bonica
Internet-Draft Juniper Networks
Intended status: Standards Track Y. Kamite
Expires: March 5, 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
September 2, 2019

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

Abstract

This document defines two new IPv6 Routing header types. Generically, they are called the Compressed Routing Header (CRH). More specifically, the 16-bit version of the CRH is called the CRH-16, while the 32-bit version of the CRH is called the CRH-32. SRv6+ nodes use the CRH to steer packets from segment to segment along SRv6+ paths.

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 March 5, 2020.

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

This document defines two new IPv6 Routing header types. Generically, they are called the Compressed Routing Header (CRH). More specifically, the 16-bit version of the CRH is called the CRH-16, while the 32-bit version of the CRH is called the CRH-32. 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].

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)

Both CRH versions (i.e., CRH-16 and CRH-32) contain the following fields:

In the CRH-16, each SID list entry is encoded in 16-bits. In the CRH-32, each SID list entry is encoded in 32-bits. In networks where the smallest feasible Maximum SID Value (MSV) is greater than 65,635, CRH-32 is required. Otherwise, CRH-16 is preferred.

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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |             SID[0]            |          SID[1]               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-|
    |                          .........
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-        
   

Figure 1: CRH-16

     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 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[0]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[1]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    //                                                              //
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    +                             SID[n]                            +
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+   

Figure 2: CRH-32

4. The Segment Forwarding Information Base (SFIB)

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 adjacency segments:

Node segments are associated with a single topological instruction parameter. This parameter is an IPv6 address that identifies an interface on the segment egress node.

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>

switch(Routing Type) {
    case CRH-16:
        sidsBeyondFirstWord = Segments Left - 2;
        sidPerWord = 4;
    case CRH-32:
        sidsBeyondFirstWord = Segments Left - 1;
        sdsPerWord = 2;
    case default:
        return(0xFF);
    }

if (sidsBeyondFirstWord <= 0)
    return(0)

words = sidsBeyondFirstWord div sidsPerWord;
if (sidsBeyondFirstWord mod sidsPerWord)
    words++;

return(words)


<CODE ENDS>

5.2.2. Topological Instructions That Control Adjacency Segments

A topological instruction that controls an adjacency segment accepts the following parameters:

The instruction behaves as follows:

5.2.3. Topological Instructions That Control Node Segments

A topological instruction that controls a node segment accepts a single parameter. This parameter is an IPv6 address that identifies an interface on the segment egress node.

The instruction behaves as follows:

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 SRv6+ implementation MUST:

8. Management Considerations

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

9. Security Considerations

SRv6+ domains MUST NOT span security domains. In order to enforce this requirement, security domain edge routers MUST do one of the following:

10. IANA Considerations

IANA is requested to make the following entries in the Internet Protocol Version 6 (IPv6) Parameters "Routing Type" registry:

     Suggested    
     Value            Description                           Reference
   -----------------------------------------------------------------------
       5      Compressed Routing Header (16-bit) (CRH-16)   This document
       6      Compressed Routing Header (32-bit) (CRH-32)   This document

11. Acknowledgements

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

12. References

12.1. Normative References

[I-D.bonica-spring-srv6-plus] Bonica, R., Hegde, S., Kamite, Y., Alston, A., Henriques, D., Halpern, J., Linkova, J. and G. Chen, "IPv6 Support for Segment Routing: SRv6+", Internet-Draft draft-bonica-spring-srv6-plus-05, August 2019.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997.
[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.

12.2. Informative References

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

Appendix A. CRH Processing Examples

This appendix demonstrates CRH processing in the following scenarios:

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

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

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

Table 1 describes SFIB entries that are instantiated on all nodes. All of these SFIB entries represent node segments.

Adjacency 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 describes SFIB entries that are instantiated on specific nodes. All of these SFIB entries represent adjacency segments.

A.1. SR Path Contains Node Segments Only

In this example, Node S sends a packet to Node D, though a node segment that terminates on I3. In this example, 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 Left = 1
Destination Address = 2001:db8::3 SID[0] = 11

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

A.2. SR Path Contains Node Segments Only And Preserves The First SID

In this example, Node S sends a packet to Node D, through a node segment that terminates on I3. In this example, 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 Left = 1
Destination Address = 2001:db8::3 SID[0] = 11
SID[1] = 3
As the packet travels from I3 to D:
Source Address = 2001:db8::a Segments Left = 0
Destination Address = 2001:db8::b SID[0] = 11
SID[1] = 3

A.3. SR Path Contains Adjacency Segments Only

In this example, Node S sends a packet to Node D, via two adjacency segments..

As the packet travels from S to I1:
Source Address = 2001:db8::a Segments Left = 2
Destination Address = 2001:db8:0:1::2 SID[0] = 129
SID[1] = 129

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

Authors' Addresses

Ron Bonica Juniper Networks 2251 Corporate Park Drive Herndon, Virginia 20171 USA EMail: rbonica@juniper.net
Yuji Kamite NTT Communications Corporation 3-4-1 Shibaura, Minato-ku Tokyo, 108-8118 Japan EMail: : y.kamite@ntt.com
Tomonobu Niwa KDDI 3-22-7, Yoyogi, Shibuya-ku Tokyo, 151-0053 Japan EMail: to-niwa@kddi.com
Andrew Alston Liquid Telecom Nairobi, Kenya EMail: Andrew.Alston@liquidtelecom.com
Daniam Henriques Liquid Telecom Johannesburg, South Africa EMail: daniam.henriques@liquidtelecom.com
Ning So Reliance Jio 3010 Gaylord PKWY, Suite 150 Frisco, Texas 75034 USA EMail: Ning.So@ril.com
Fengman Xu Reliance Jio 3010 Gaylord PKWY, Suite 150 Frisco, Texas 75034 USA EMail: Fengman.Xu@ril.com
Gang Chen Baidu No.10 Xibeiwang East Road Haidian District Beijing, 100193 P.R. China EMail: phdgang@gmail.com
Yongqing Zhu China Telecom 109 West Zhongshan Ave, Tianhe District Guangzhou, P.R. China EMail: zhuyq.gd@chinatelecom.cn
Guangming Yang China Telecom 109 West Zhongshan Ave, Tianhe District Guangzhou, P.R. China EMail: yanggm.gd@chinatelecom.cn
Yifeng Zhou ByteDance Building 1, AVIC Plaza, 43 N 3rd Ring W Rd Haidian District Beijing, 100000 P.R. China EMail: yifeng.zhou@bytedance.com