Network Working Group                                        B. Decraene
Internet-Draft                                                    Orange
Intended status: Standards Track                               R. Raszuk
Expires: August 8, 2020                                        Bloomberg
                                                        February 5, 2020


   SRv6 vSID: Network Programming extension for variable length SIDs
                  draft-decraene-spring-srv6-vlsid-02

Abstract

   This document proposes an extension to Segment Routing IPv6 (SRv6)
   Network Programming to allow for SRv6 Segment Identifier (SID) of
   smaller variable length.  The use of smaller SRv6 SID reduces the
   size the SRv6 Header (SRH).  This reduces the overhead for both the
   traffic volume and the network processor.  It is a straightforward
   extension to the SRv6 Network Programming model and its SRH
   encapsulation.

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 8, 2020.

Copyright Notice

   Copyright (c) 2020 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



Decraene & Raszuk        Expires August 8, 2020                 [Page 1]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   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  . . . . . . . . . . . . . . . . . . . . . . . .   2
     1.1.  Requirements Language . . . . . . . . . . . . . . . . . .   3
   2.  Overview  . . . . . . . . . . . . . . . . . . . . . . . . . .   3
   3.  SRv6 Variable Length SIDs . . . . . . . . . . . . . . . . . .   4
     3.1.  Encoding vSIDs in the SRH . . . . . . . . . . . . . . . .   5
     3.2.  SRv6 vSIDs Network Programming  . . . . . . . . . . . . .   7
   4.  Benefits  . . . . . . . . . . . . . . . . . . . . . . . . . .   8
   5.  Illustrations . . . . . . . . . . . . . . . . . . . . . . . .   9
     5.1.  Global vSIDs  . . . . . . . . . . . . . . . . . . . . . .   9
     5.2.  Local vSIDs . . . . . . . . . . . . . . . . . . . . . . .  10
   6.  Signaling vSIDs length  . . . . . . . . . . . . . . . . . . .  11
     6.1.  Signaling vSIDs length in IS-IS . . . . . . . . . . . . .  11
   7.  A node requiring a larger vSIDs length. . . . . . . . . . . .  12
     7.1.  Allocating a larger locator to a node.  . . . . . . . . .  12
     7.2.  Combining k vSIDs to identify a behavior. . . . . . . . .  12
   8.  Inter Routing Domains . . . . . . . . . . . . . . . . . . . .  13
   9.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  15
   10. Security Considerations . . . . . . . . . . . . . . . . . . .  15
   11. Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  15
   12. Changes / Authors Notes . . . . . . . . . . . . . . . . . . .  15
   13. References  . . . . . . . . . . . . . . . . . . . . . . . . .  16
     13.1.  Normative References . . . . . . . . . . . . . . . . . .  16
     13.2.  Informative References . . . . . . . . . . . . . . . . .  16
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  17

1.  Introduction

   The Segment Routing (SR) architecture is defined RFC 8402 [RFC8402].

   IPv6 Segment Routing Header (SRH) is defined
   [I-D.ietf-6man-segment-routing-header].

   SRv6 Network Programming is defined
   [I-D.ietf-spring-srv6-network-programming].

   The reader is expected to be familiar with the three above documents
   which define Segment Routing over the IPv6 data-plane (SRv6).

   SRv6 is flexible and powerful, but in some uses cases, when a large
   number of SIDs are required, the size of the SRH/SID may be seen as
   too large both for some dataplane processors and traffic overhead.




Decraene & Raszuk        Expires August 8, 2020                 [Page 2]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   The goal of this document is to propose a solution which reduces the
   size of the SRv6 header when a high number of SIDs is required with
   minimal changes to the SRv6 architecture, signaling, SRH and data
   plane processing.

   This document extends SRH and SRv6 Network Programming to allow for
   SIDs of variable length, from 1 up to 128 bits.  In a way, this is a
   generalization of SRv6 for any (v)SID length, where 128-bits SIDs is
   a special case.

1.1.  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 RFC 2119 [RFC2119] RFC 8174 [RFC8174] when, and only when, they
   appear in all capitals, as shown here.

2.  Overview

   In a nutshell, SRv6 variable length SIDs (SRv6 vSIDs) proposes to:

   o  define one SRv6 SIDs prefix dedicated to SRv6 vSIDs and called
      SRv6 vSIDs prefix;

   o  define the vSID as the SRv6 SID minus the vSIDs prefix: SRv6 SID:=
      SRv6 vSIDs prefix + SRv6 vSID;

   o  encode, in the Segment List of the SRH, only the vSIDs.


   In other words, 128-bits SRv6 SIDs are kept unchanged for signaling,
   configuration and SR policies.  In the data plane, this proposal
   compresses the encoding of SRv6 SIDs in the SRH by not encoding the
   SRv6 vSIDs prefixes which are redundant across vSIDs.

   The use of the destination address in the IPv6 header is unchanged.
   The IPv6 destination address still contains the current/next 128-bits
   SRv6 SID.  As a consequence, the IPv6 destination address already
   indicates the SRv6 vSID prefix and there is no extend the SRH to
   carry it.

   In a way, this is similar to SR-MPLS RFC 8660 [RFC8660]:

   o  For SR-MPLS: SR-MPLS Label:= SRGB + Index

   o  For SRv6 vSID: SRv6 SID := SRv6 vSID prefix + SRv6 vSID




Decraene & Raszuk        Expires August 8, 2020                 [Page 3]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   One difference compared to SR-MPLS is that lowest bits of the SRv6
   vSID prefix are zero which allows for an easier operation in the data
   plane.  Indeed,the addition of the vSID may be replaced by a copy of
   the vSID bits.  Another difference is that the motivation to offset
   to a zero base index/vSID is different.

   Except for the Segment List using (shorter) vSIDs, the format of the
   SRH is unchanged.  The length of the vSIDs is defined to be 128 bits
   minus the length of the vSIDs prefix.  It is variable but its length
   does not need to be encoded in the SRH header.  Indeed the vSIDs
   length only needs to be known by the SR Segment Endpoint Node
   processing it.  As per section 4.3 of
   [I-D.ietf-6man-segment-routing-header], the SR node identifies its
   local SID by performing a longest-prefix-match lookup on the packet
   IPv6 destination address.  This identifies the SID and its
   properties, such as the SR endpoint behavior but also the length of
   the vSIDs.

3.  SRv6 Variable Length SIDs

   An SRv6 vSID deployment choose one length 'L' of vSIDs and an
   associated SRv6 vSIDs prefix.

     0 (bits)                                vSIDs                128
                                            Length

     +--------------------------------------------------------------+
     |                      SRv6 SID                                |
     +--------------------------------------------------------------+

     +--------------------------------------------------------------+
     |       SRv6 vSIDs prefix                 |      vSID          |
     +--------------------------------------------------------------+

            Figure 1: SRv6 SID:= SRv6 vSIDs prefix + SRv6 vSID

   An SRv6 vSID deployment may use multiple SRv6 vSIDs prefixes.  Each
   prefix may have its own vSIDs length.

   As per section 3.1 of [I-D.ietf-spring-srv6-network-programming], an
   SRv6 SID can be represented as 'B:N:FUNCT:ARG'.  Where 'B' is the
   SRv6 SID prefix, N is the identifier of the parent node N, FUNCT is
   the function of the SID of length 128-S.

   If SRv6 vSIDs are to identify global segments, the SRv6 vSIDs prefix
   would typically be 'B' while the vSID would be 'N:FUNCT:ARG'.





Decraene & Raszuk        Expires August 8, 2020                 [Page 4]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   If SRv6 vSIDs are to only identify local segments, there is no need
   to globally route toward a node hence the 'N' may have a size of
   zero.  This may be interesting for a deployment using both 128-bits
   SRv6 SIDs and very short SRv6 vSIDs.  Such SRv6 vSIDs could be used
   when a strictly routed path is needed and encoded as a list of
   adjacency SIDs.  Given that the number of local adjacency SIDs is
   independent of the size of the SR domain, and typically below 255,
   one could use 8-bits vSIDs which would allow encoding 16 vSIDs within
   a single 128-bits SRv6 SID hence provides a very effective SRH
   compression.

   This documents mandates that the length of the vSIDs be a multiple of
   8-bits, up to 128 bits included, in order to provide octet alignment
   in the SRH Segment List.  However this specifications is written to
   work for any bit granularity from 1 to 128 bits.  This allows for a
   future document to define a new profile with a higher granularity
   (e.g. 1 bit, 4 bits, 16 bits, or an integer fraction 128-bits)
   depending on hardware capabilities and flexibility requirements.

3.1.  Encoding vSIDs in the SRH

   As per section 2 of [I-D.ietf-6man-segment-routing-header], the
   Segment Routing Header (SRH) is defined as follows:




























Decraene & Raszuk        Expires August 8, 2020                 [Page 5]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


     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   |     Flags     |              Tag              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |            Segment List[0] (128 bits IPv6 address)            |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |                                                               |
                                  ...
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                                                               |
    |            Segment List[n] (128 bits IPv6 address)            |
    |                                                               |
    |                                                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    //                                                             //
    //         Optional Type Length Value objects (variable)       //
    //                                                             //
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 2: SRH with 128-bits SRv6 SID

   When vSIDs are used, there are encoded in the Segment List of the
   Segment Routing Header (SRH).

   vSIDs are encoded back to back using their native length.  There is
   no padding between SIDs and there is no specific alignment of the
   SID.

   In a SRH, all vSIDs have the same vSIDs length 'L' and the same SRv6
   vSIDs prefix.

   If the Segment List[n] does not end on a octet boundary, then padding
   bits MUST be added up to the next octet boundary.  Those padding bits
   MUST be set to 0 when sent and ignored on receipt.

   TLVs starts on next octet boundary.

   As defined in [I-D.ietf-6man-segment-routing-header], padding TLVs
   are used to pad the SRH to a multiple of 8 octets.  As vSIDs may be



Decraene & Raszuk        Expires August 8, 2020                 [Page 6]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   of any size, not necessarily a multiple of 8 octets, the support of
   padding TLVs are REQUIRED.

   The fields 'Segments Left' and 'Last Entry" keep their meaning but
   refers to vSIDs of length L.

   The following diagram illustrates an example of SRH with vSIDs of
   sixteen bits:

     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   |     Flags     |              Tag              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Segment List[0]            |    Segment List[1]            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           .....                            .....              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Segment List[n]            |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    //                                                             //
    //         Optional Type Length Value objects (variable)       //
    //                                                             //
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

             Figure 3: SRH with SRv6 vSIDs with 16-bits vSIDs

3.2.  SRv6 vSIDs Network Programming

   This section defines the extension to SRv6 Network Programming using
   the "End" Endpoint behavior but is applicable to all SID behaviors.

   The processing takes as an argument the length L of the vSIDs.  This
   length L is a property of the vSID and is given as a result of the
   lookup on the IPv6 destination address which identifies the SRv6 SID
   and its properties.  The properties include the Endpoint behavior and
   the length L of the vSIDs.

   When N receives a packet whose IPv6 DA is S and S is a local vSID of
   length L, the lines S08 and S14 of the End processing which were, as
   per section 4.1 of [I-D.ietf-spring-srv6-network-programming]:

   S08.  max_LE = (Hdr Ext Len / 2) - 1

   [...]




Decraene & Raszuk        Expires August 8, 2020                 [Page 7]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   S14.  Update IPv6 DA with Segment List[Segments Left]

   are replaced by the following:

   S08.  max_LE = (Hdr Ext Len * 64 / L) - 1

   [...]

   S14.  Copy Segment List[Segments Left] from the SRH to the L lowest
   order bits of the destination address of the IPv6 header.

   Note: S14.  Taking into consideration that the Segment List is a list
   of vSIDs of length L bits

4.  Benefits

   SRv6 vSID is believed to have the following benefits:

   o  Aligned with SRv6: SR architecture, SRv6 Network Programming.

   o  Reduced SID hence reduced header length.

   o  Flexible SID length, to accommodate for various deployment models,
      network sizes, SRv6 usages.

      *  A typical vSIDs length could be 32 bits.  Compared to SR-MPLS
         (which has a 20 bits SID) it is larger and more scalable.
         Compared to SRv6 (which has a 128 bits SID) it's four times
         more compact.

      *  Other SID length are possible: 16 bits would be 8 times more
         compact than SRv6 SID and 2 times more compact the SR-MPLS shim
         header and large enough for most deployments; 8 bits would be
         16 (respectively 4) more compact than SRv6 SID (respectively
         SR-MPLS shim header) and could fit some specific deployments
         (e.g. local adjacency SID only).


   o  Using SRv6 header (SRH) with no additional fields.

   o  No requirement for additional IPv6 addressing space: a /64 per
      router is more than enough.  A /96 per router is the typical
      requirement.








Decraene & Raszuk        Expires August 8, 2020                 [Page 8]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


5.  Illustrations

   This section illustrates the usage of SRv6 vSIDs through two
   examples.  The first example uses global segments with a vSIDs
   locator been globally routable.  The second example uses local
   segments only with a vSIDs locator commom to all SR end nodes hence
   not been able to locate a specific SR end node.  Global and local
   segments are defined as per RFC 8402 [RFC8402] section 2.

5.1.  Global vSIDs

   In this example vSIDs are used for global SIDs and are used alone
   without 128-bits SRv6 SIDs.

   The SR domain has the following caracteristics:

   o  1 000 SR endpoints nodes;

   o  network diameter is 10;

   o  vSIDs are chosen to be 32-bits long;

   o  each SRv6 node is allocated a /108 to allocate its vSIDs from.
      This allows for 4 096 (2^^12) locators 1 million (2^^20) local
      functions on each SR node;

   o  the SR domain and the SRv6 vSIDs prefix is allocated:
      2001:DB8::/96;

   o  node N is allocated 2001:DB8:0:0:0:0:N/108;

   Some metrics of this SR domain:

   o  An SR policy encoding a strictly routed path using only Adjacency
      SIDs would need ten 32-bits vSIDs resulting in a total of 40
      octets in the SRH.  In contrast the use of 128-bits SRv6 SIDs
      would require 160 octets;

   o  An SR policy using strictly routed path using four (node) SIDs
      would need four 32-bits vSIDs resulting in a total of 16 octets in
      the SRH.  In contrast the use of 128-bits SRv6 SIDs would require
      64 octets and the use of 20-bits SR-MPLS SID would require 16
      octets;

   o  The IGP advertises 1 000 SRv6 locators to be installed in the IPv6
      FIB of all IGP nodes (as per regular SRv6 and SR-MPLS);





Decraene & Raszuk        Expires August 8, 2020                 [Page 9]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   o  The IPv6 address space is one /108 per SR node for a total of one
      /96 for the whole SR domain.

5.2.  Local vSIDs

   In this example vSIDs are used only for local SIDs, such as adjacency
   SIDs. vSIDs are used in complement with 128-bits SRv6 SIDs.

   The SR domain has the following caracteristics:

   o  10 000 SR endpoints nodes;

   o  network diameter is 30;

   o  SRv6 SIDs:

      *  each SRv6 node is allocated a /64 to allocate its 128-bits SIDs
         from;

      *  SRv6 prefix: 2001:DB8::/48 (i.e., 65535 /64, allowing for
         growth or multiple SR routing algorithms);

      *  node N is allocated 2001:DB8:0:N/64;


   o  SRv6 vSIDs

      *  local vSIDs are chosen to be 8-bits in length.  They are used
         for adjacency SIDs hence allow for 255 Adjacency SIDs per node;

      *  SRv6 vSIDs prefix is allocated 2001:DB8:0:FFFF::/120;


   Some metrics of this SR domain:

   o  An SR policy encoding a strictly routed path using only adjacency
      SIDs would need thirty 8-bits vSIDs resulting in a total of 32
      octets in the SRH.  In contrast the use of 128-bits SRv6 SIDs
      would require 480 octets and the use of 20-bits SR-MPLS SID would
      require 120 octets;

   o  The IGP advertises 10 000 SRv6 locators to be installed in the
      IPv6 FIB of all IGP nodes (as per regular SRv6 or SR-MPLS);

   o  The IPv6 address space is one /64 per SR node for a total of one
      /48 for the whole SR domain.





Decraene & Raszuk        Expires August 8, 2020                [Page 10]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


6.  Signaling vSIDs length

   Control plane extensions are required to signal the length of the
   vSIDs.

6.1.  Signaling vSIDs length in IS-IS

   SRv6 SIDs are advertised in IS-IS as per
   [I-D.ietf-lsr-isis-srv6-extensions].

   This document defines a new sub-TLV called vSIDs Length' that MAY be
   advertised in the locator entries of the SRv6 Locator TLV.  The
   format is the following:


     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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |    Type       |    Length     |      Flags    |  vSIDs Length |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                   Figure 4: IS-IS vSIDs Length sub-TLV

   Type: TBD1.

   Length: 2.

   Flags: 1 octet.  No flags are currently defined.  MUST be set to zero
   when sent and ignored when received.

   vSIDs Length: length of the vSIDs in bits.  This applies for all SIDs
   of this locator.

   The SRv6 vSIDs prefix is not advertised but can be computed.  The
   SRv6 vSIDs prefix is the 'vSIDs Length' first bits of the Locator.
   It's length is 128 - 'vSIDs Length'.

   The vSIDs Length MUST be between 1 and 128.  If this restriction is
   not met, the Locator entry MUST be ignored.

   When the vSIDs Length sub-TLV is not present, the vSIDs length is
   defined to be 128 (regular SRv6 SID length).

   Note: there are multiple choices to advertise the vSIDs Length.
   E.g., as a Sub-Sub-TLV of SRv6 End SID, SRv6 End.X SID or SRv6 LAN
   End.X SID TLVs; as a property of the SR node.  Alternatively the size
   of the vSIDs prefix can be advertised in the Locator Block length 'LB
   length' of the SRv6 SID Structure Sub-Sub-TLV defined in



Decraene & Raszuk        Expires August 8, 2020                [Page 11]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   [I-D.ietf-lsr-isis-srv6-extensions] with the additional specification
   of a new SRv6 vSIDs capability/flag. ( The finale encoding choice is
   postponed to a future version of this document.

7.  A node requiring a larger vSIDs length.

   One SR Endpoint node may need a larger vSIDs space.  This may
   especially be the case when at the same time:

   o  the vSIDs Length is chosen to be small in order to optimize for
      the size of the SRH header.  Indeed, for topological/routing
      instructions, the number of SIDs in the SRH may be high in some
      use cases, up to the network diameter, calling for small vSIDs.

   o  one vSID is a service instruction and the number of service SIDs
      may be high, requiring a SID longer than a vSIDs Length.


   This section defines two solutions to increase the vSIDs length on a
   node requiring a vSIDs space larger than other nodes.

7.1.  Allocating a larger locator to a node.

   In order to increase the vSIDs length on a node, a simple option is
   to allocate multiple locators of a larger locator to this node,
   within the SRv6 vSIDs prefix.  As per
   [I-D.ietf-spring-srv6-network-programming], a locator may be
   represented as B:N where B is the SRv6 SID block (IPv6 subnet
   allocated for SRv6 SIDs by the operator) and N is the identifier of
   the parent node instantiating the SID.  Following this format,
   multiple node identifiers Ns may be allocated to a node.  Allocating
   'k' identifiers increase the vSIDs space of that node by 'k'.

7.2.  Combining k vSIDs to identify a behavior.

   When an SR Endpoint node needs more SIDs than allowed by the vSIDs
   Length, it MAY combine two (resp.  N) vSIDs of length L to
   effectively benefit from a vSID of length 2*L (resp.  N*L).  This is
   a local choice of this SR Endpoint.  Nothing specific is required in
   the SRH which only contains those 2 (resp.  N) SIDs instead of a
   single one.

   Note that when two vSIDs are combined, the first vSID may be seen as
   having the role of a "Context SID" identifying a context specific SID
   space/table, with the second SID been looked up in this context
   specific table.  This is similar to the Context-Specific Label space
   defined in the section 3 of RFC 5331 [RFC5331].




Decraene & Raszuk        Expires August 8, 2020                [Page 12]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   This section defines the extension to SRv6 Network Programming
   allowing for a SID behavior "End.DT6" to be encoded with 'k' vSID.
   This is equally applicable to others SID behaviors.

   The processing takes as an argument the vSIDs Length 'L', and the
   number of vSIDs 'k'.  'L' and 'k' are a property of the vSID and are
   given as a result of the lookup of the IPv6 destination address which
   identifies the SRv6 SID and its properties.  The properties include
   the Endpoint behavior, the length L of the vSIDs and the number 'k'
   of vSIDs used to encode this behavior in the SRH.

   When N receives a packet destined to S and S is a local End.DT6 SID
   encoded with 'k' vSIDs, N does the following processing:

   When N receives a packet whose IPv6 DA is S and S is a local End.DT6
   vSID of length L and encoded with 'k' vSIDs the line S02 of the
   End.DT6 processing which was, as per section 4.6 of
   [I-D.ietf-spring-srv6-network-programming]:

   S02.  If (Segments Left != 0) {

   is replaced by the following:

   S02.  If (Segments Left != k - 1) {

   When processing the Upper-layer header of a packet, the lines S04-S05
   which were:

   S04.  Remove the outer IPv6 Header with all its extension headers

   S05.  Set the packet's associated FIB table to T

   are replaced by the following:

   S04a.  Read the k-1 next vSIDs

   S04b.  Remove the outer IPv6 Header with all its extension headers

   S05.  Set the packet's associated FIB table to the one identified by
   the concatenation of the k-1 next vSIDs

8.  Inter Routing Domains

   Some SRv6 traffic may need to cross multiple routing domains, such as
   differents Autonomous Systems (ASes) or different routing areas.
   Different routing domains may use different size and addressing
   schema making it difficult to find an optimal vSIDs length for all
   routing domains, and/or to find a common SRv6 vSIDs prefix.



Decraene & Raszuk        Expires August 8, 2020                [Page 13]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   This section defines an optional solution and SID behavior allowing
   for a SRH to contain vSIDs of different length and different SRv6
   vSIDs prefixes.

   The solution requires a new SID behavior, called "Endpoint with
   cross-connect to an array of layer-3 adjacencies and SRv6 vSIDs
   Prefix Swap" (End.XvPS for short) allowing for this transition of
   SRv6 vSIDs prefix and vSIDs length between two routing domains.

   End.XvPS is a variant of End.X, performing both "End.X Layer-3 Cross-
   Connect" and the translation of the SRv6 vSIDs prefix between the two
   routing domains.

   The processing takes as an argument the vSIDs length L1 in the first
   domain, the vSIDs length L2 in the second domain, and the prefix P2
   of the SRv6 vSIDs prefix in the second domain.  Those three
   parameters are a property of the (received) vSID and are given as a
   result of the lookup on the IPv6 destination address which identifies
   the SRv6 SID and its properties.

   When N receives a packet whose IPv6 DA is S and S is a End.XvPS SID
   behavior, with a local vSID length L1, a remote/next vSID length L2,
   and a remote/next SRv6 vSIDs prefix P2, the line S14 of the End
   processing which was, as per section 4.1 of
   [I-D.ietf-spring-srv6-network-programming]:

   S14.  Update IPv6 DA with Segment List[Segments Left]

   is replaced by the following:

   S14.  Copy Segment List[Segments Left] from the SRH to the L2 lowest
   order bits of the destination address of the IPv6 header and copy the
   SRv6 vSIDs prefix P2 to the 128-L2 highest order bits of the
   destination address.

   Note: the way the vSID parameters (vSIDs length L2, SRv6 vSIDs prefix
   P2) of the next routing domain are known is out of scope of this
   document.  As examples, they could be learnt via configuration or
   using a signaling protocol either with the peer domain of with a
   central controler (e.g.  PCE).

   When End.XvPS SID behavior is used, the restriction on the SRH is
   relaxed and becomes: in a SRH, in each routing domain, all vSID MUST
   have the same vSID length 'L' and the same SRv6 vSID prefix.Between
   routing domaines, separated with the End.XvPS behavior, vSID lengths
   and SRv6 vSID prefixes may be different.





Decraene & Raszuk        Expires August 8, 2020                [Page 14]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


9.  IANA Considerations

   TBD.

10.  Security Considerations

   This document does not change the security considerations of SRv6.
   Please refers to RFC 8402 [RFC8402],
   [I-D.ietf-6man-segment-routing-header] and
   [I-D.ietf-spring-srv6-network-programming] for existing security
   consideration.

11.  Acknowledgements

   This document has been inspired by the work of the SPRING WG and in
   particular the work done in
   [I-D.filsfils-spring-net-pgm-extension-srv6-usid] and
   [I-D.li-spring-compressed-srv6-np].  The authors would like to
   acknowledge the authors of these two documents.

   The authors would like to thank Joel Halpern for his review and
   comments.

12.  Changes / Authors Notes

   [RFC Editor: Please remove this section before publication]

   00: Initial version.

   01: Removal of the vSID Size TLV; addition of the IS-IS extension;
   addition of the SR header length check in the pseudo code.

   Addition of the IS-IS extension;

   Addition of the SR header length check in the pseudo code.

   02: Change of terminology (VLSID changed to vSID);

   Swapping the two examples in section 'Illustrations'.;

   Addition of two solutions to provide more vSID space to some nodes in
   section 'Node requiring a larger vSID length';

   Addition of a solution for crossing routing domains using differents
   SRv6 vSID prefixes and/or different vSID length;






Decraene & Raszuk        Expires August 8, 2020                [Page 15]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


13.  References

13.1.  Normative References

   [I-D.ietf-6man-segment-routing-header]
              Filsfils, C., Dukes, D., Previdi, S., Leddy, J.,
              Matsushima, S., and D. Voyer, "IPv6 Segment Routing Header
              (SRH)", draft-ietf-6man-segment-routing-header-26 (work in
              progress), October 2019.

   [I-D.ietf-lsr-isis-srv6-extensions]
              Psenak, P., Filsfils, C., Bashandy, A., Decraene, B., and
              Z. Hu, "IS-IS Extension to Support Segment Routing over
              IPv6 Dataplane", draft-ietf-lsr-isis-srv6-extensions-04
              (work in progress), January 2020.

   [I-D.ietf-spring-srv6-network-programming]
              Filsfils, C., Camarillo, P., Leddy, J., Voyer, D.,
              Matsushima, S., and Z. Li, "SRv6 Network Programming",
              draft-ietf-spring-srv6-network-programming-08 (work in
              progress), January 2020.

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/info/rfc2119>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/info/rfc8174>.

   [RFC8402]  Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L.,
              Decraene, B., Litkowski, S., and R. Shakir, "Segment
              Routing Architecture", RFC 8402, DOI 10.17487/RFC8402,
              July 2018, <https://www.rfc-editor.org/info/rfc8402>.

13.2.  Informative References

   [I-D.filsfils-spring-net-pgm-extension-srv6-usid]
              Filsfils, C., Camarillo, P., Cai, D., Jiang, Z., Voyer,
              D., Shawky, A., Leymann, N., Steinberg, D., Zandi, S.,
              Dawra, G., Meilik, I., Uttaro, J., Jalil, L., So, N.,
              Fiumano, M., and M. Khaddam, "Network Programming
              extension: SRv6 uSID instruction", draft-filsfils-spring-
              net-pgm-extension-srv6-usid-02 (work in progress), August
              2019.





Decraene & Raszuk        Expires August 8, 2020                [Page 16]


Internet-Draft       vSID: SRv6 variable length SID        February 2020


   [I-D.li-spring-compressed-srv6-np]
              Li, Z., Li, C., Xie, C., Voyer, D., LEE, K., Tian, H.,
              Zhao, F., Guichard, J., Cong, L., and S. Peng, "Compressed
              SRv6 Network Programming", draft-li-spring-compressed-
              srv6-np-01 (work in progress), January 2020.

   [RFC5331]  Aggarwal, R., Rekhter, Y., and E. Rosen, "MPLS Upstream
              Label Assignment and Context-Specific Label Space",
              RFC 5331, DOI 10.17487/RFC5331, August 2008,
              <https://www.rfc-editor.org/info/rfc5331>.

   [RFC8660]  Bashandy, A., Ed., Filsfils, C., Ed., Previdi, S.,
              Decraene, B., Litkowski, S., and R. Shakir, "Segment
              Routing with the MPLS Data Plane", RFC 8660,
              DOI 10.17487/RFC8660, December 2019,
              <https://www.rfc-editor.org/info/rfc8660>.

Authors' Addresses

   Bruno Decraene
   Orange

   Email: bruno.decraene@orange.com


   Robert Raszuk
   Bloomberg

   Email: robert@raszuk.net






















Decraene & Raszuk        Expires August 8, 2020                [Page 17]