<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-li-spring-sr-e2e-ietf-network-slicing-03"
     ipr="trust200902">
  <front>
    <title abbrev="SR for E2E IETF Network Slicing">Segment Routing for
    End-to-End IETF Network Slicing</title>

    <author fullname="Zhenbin Li" initials="Z." surname="Li">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Road</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>lizhenbin@huawei.com</email>
      </address>
    </author>

    <author fullname="Jie Dong" initials="J." surname="Dong">
      <organization>Huawei Technologies</organization>

      <address>
        <postal>
          <street>Huawei Campus, No. 156 Beiqing Road</street>

          <city>Beijing</city>

          <code>100095</code>

          <country>China</country>
        </postal>

        <email>jie.dong@huawei.com</email>
      </address>
    </author>

    <author fullname="Ran Pang" initials="R." surname="Pang">
      <organization>China Unicom</organization>

      <address>
        <email>pangran@chinaunicom.cn</email>
      </address>
    </author>

    <author fullname="Yongqing Zhu" initials="Y." surname="Zhu">
      <organization>China Telecom</organization>

      <address>
        <email>zhuyq8@chinatelecom.cn</email>
      </address>
    </author>

    <date day="24" month="March" year="2022"/>

    <abstract>
      <t>Network slicing can be used to meet the connectivity and performance
      requirement of different services or customers in a shared network. An
      IETF network slice can be realized as enhanced VPNs (VPN+), which is
      delivered by integrating the overlay VPN service with a Virtual
      Transport Network (VTN) as the underlay. An end-to-end IETF network
      slice may span multiple network domains. Within each domain, traffic of
      the end-to-end network slice service is mapped to a domain VTN. In the
      context of IETF network slicing, a VTN can be instantiated as a Network
      Resource Partition (NRP).</t>

      <t>When segment routing (SR) is used to build a multi-domain IETF
      network slices, information of the local network slices in each domain
      can be specified using special SR binding segments called NRP binding
      segments (NRP BSID). The multi-domain IETF network slice can be
      specified using a list of NRP BSIDs in the packet, each of which can be
      used by the corresponding domain edge nodes to steer the traffic of
      end-to-end IETF network slice into the specific NRP in the local
      domain.</t>

      <t>This document describes the functionality of NRP binding segment and
      its instantiation in SR-MPLS and SRv6.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119">RFC 2119</xref>.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t><xref target="I-D.ietf-teas-ietf-network-slices"/> introduces the
      concept and the characteristics of IETF network slice, and describes a
      general framework for IETF network slice management and operation.It
      also introduces the concept Network Resource Partition (NRP), which is a
      collection of resources identified in the underlay network.</t>

      <t><xref target="I-D.ietf-teas-enhanced-vpn"/> describes the framework
      and the candidate component technologies for providing enhanced VPN
      (VPN+) services based on existing VPN and Traffic Engineering (TE)
      technologies with enhanced characteristics that specific services
      require above traditional VPNs. It also introduces the concept of
      Virtual Transport Network (VTN). A Virtual Transport Network (VTN) is a
      virtual underlay network which consists of a set of dedicated or shared
      network resources allocated from the physical underlay network, and is
      associated with a customized logical network topology. VPN+ services can
      be delivered by mapping one or a group of overlay VPNs to the
      appropriate VTNs as the underlay, so as to provide the network
      characteristics required by the customers. Enhanced VPN (VPN+) and VTN
      can be used for the realization of IETF network slices. In the context
      of IETF network slicing, a VTN can be instantiated as an NRP. VTN and
      NRP are considered interchangable terms in this document.</t>

      <t><xref target="I-D.dong-teas-nrp-scalability"/> describes the
      scalability considerations in the control plane and data plane to enable
      NRPs and provide the suggestions to improve the scalability of NRP. In
      the control plane, It proposes the approach of decoupling the topology
      and resource attributes of NRP, so that multiple NRPs may share the same
      topology and the result of topology based path computation. In the data
      plane, it proposes to carry a dedicated NRP-ID of a network domain in
      the data packet to determine the set of resources reserved for the
      corresponding NRP.</t>

      <t>An IETF network slice may span multiple network domains. Within each
      domain, traffic of the end-to-end network slice is mapped to a local
      network slice. The NRP ID which identifies the NRP in the local domain
      for the end-to-end network slice needs to be determined on the domain
      edge node.</t>

      <t>When segment routing (SR) is used to build a multi-domain IETF
      network slice, information of the local network slices in each domain
      can be specified using special SR binding segments called NRP binding
      segments (NRP BSID). The multi-domain IETF network slice can be
      specified using a list of NRP BSIDs in the packet, each of which can be
      used by the corresponding domain edge nodes to steer the traffic of
      end-to-end IETF network slice using the specific resource-aware segments
      or NRP-ID of the local domain.</t>

      <t>This document describes the functionality of the network slice
      binding segment and its instantiation in SR-MPLS and SRv6.</t>
    </section>

    <section title="Segment Routing for IETF E2E Network Slicing">
      <t><xref target="I-D.dong-teas-nrp-scalability"/> describes the
      scalability considerations in the control plane and data plane to create
      NRPs. In data plane, it proposes to carry a dedicated NRP-ID in data
      packet to determine the set of resources reserved for the corresponding
      NRP in a network domain.</t>

      <t><xref target="I-D.li-teas-e2e-ietf-network-slicing"/> describes the
      framework of carrying network slice related identifiers in the data
      plane, each of the network slice IDs may have a different network scope.
      It provides an approach of mapping the global NRP-ID to domain NRP-IDs
      at the network domain border nodes.</t>

      <t>With Segment Routing, there are several optional approaches to
      realize the mapping between the end-to-end network slice and the network
      slice constructs in the local domain.</t>

      <t>The first type of approaches are to use one type of NRP BSID to steer
      traffic to an SR Policy associated with a local NRP. This is called the
      NRP-TE BSID. There are some variants in terms of the detailed
      behavior:<list style="symbols">
          <t>The first variant is to use one type of NRP BSID to specify the
          mapping of traffic to a SR policy which consists of list of
          resource-aware segments <xref
          target="I-D.ietf-spring-resource-aware-segments"/> associated with a
          local NRP.</t>

          <t>The second variant is to use one type of NRP BSID to specify the
          mapping of traffic to a SR policy which is bound to a local
          NRP-ID.</t>
        </list></t>

      <t>The second type of approaches is to use one type of NRP BSID to steer
      traffic to follow the shortest path within a local domain NRP. This is
      called the NRP-BE BSID. There are some variants in terms of the detailed
      behavior:</t>

      <t><list style="symbols">
          <t>The first variant is to use one type of NRP BSID to determine a
          local NRP-ID, and instruct the encapsulation of the local NRP-ID
          into the packet at the domain edge node.</t>

          <t>The second variant is to use one type of NRP BSID to specify the
          mapping of traffic to a local NRP, the local NRP-ID is specified in
          the associated fields by the ingress node, and is encapsulated into
          the packet at the domain edge node.</t>
        </list></t>

      <t>The behavior of the first type of NRP BSID is similar to the function
      of the existing SR BSID, the difference is it is associated with a
      particular NRP. The second type of the NRP BSID is different from the
      existing binding segment. The instantiation of the NRP BSIDs in SR-MPLS
      and SRv6 are described in the following sections.</t>
    </section>

    <section title="SRv6 NRP Binding Functions">
      <t><xref target="RFC8986"/> defines the SRv6 Network Programming concept
      and specifies the base set of SRv6 behaviors. The SRv6 End.B6.Encaps
      function is defined to instantiate the Binding SID in SRv6, which can be
      reused as one type of NRP-TE BSID to specify the mapping of traffic to a
      list of resource-aware SRv6 segments of a domain NRP.</t>

      <t><xref target="I-D.ietf-6man-enhanced-vpn-vtn-id"/> describes the
      mechanism of carrying the VTN-ID of a network domain in the IPv6
      Hop-by-Hop (HBH) extension header. For the type 2, 3, 4 of NRP binding
      segments described in section 2, three new SRv6 Binding functions are
      defined in the following sections.</t>

      <section title="End.B6NRP.Encaps">
        <t>A new SRv6 function called End.B6NRP.Encaps: Endpoint bound to a
        SRv6 Policy in a NRP with IPv6 encapsulation is defined in this
        section. This is a variation of the End behavior. It instructs the
        endpoint node to determine an SRv6 Policy in a specific NRP of the
        local domain, and encapsulate the SID list of the SR Policy and the
        NRP-ID in a new IPv6 header.</t>

        <t>Any SID instance of this behavior is associated with an SR Policy
        B, a NRP-ID V and a source address A.</t>

        <t>When node N receives a packet whose IPv6 DA is S, and S is a local
        End.B6NRP.Encaps SID, N does the following:</t>

        <t><figure>
            <artwork><![CDATA[   S01. When an SRH is processed {
   S02.   If (Segments Left == 0) {
   S03.      Stop processing the SRH, and proceed to process the next
                header in the packet, whose type is identified by
                the Next Header field in the routing header.
   S04.   }
   S05.   If (IPv6 Hop Limit <= 1) {
   S06.      Send an ICMP Time Exceeded message to the Source Address
                with Code 0 (Hop limit exceeded in transit),
                interrupt packet processing, and discard the packet.
   S07.   }
   S08.   max_LE = (Hdr Ext Len / 2) - 1
   S09.   If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
   S10.      Send an ICMP Parameter Problem to the Source Address
                with Code 0 (Erroneous header field encountered)
                and Pointer set to the Segments Left field,
                interrupt packet processing, and discard the packet.
   S11.   }
   S12.   Decrement IPv6 Hop Limit by 1
   S13.   Decrement Segments Left by 1
   S14.   Update IPv6 DA with Segment List [Segments Left]
   S15.   Push a new IPv6 header with its own SRH containing B, and 
           the VTN-ID in VTN option set to V in the HBH Ext header
   S16.   Set the outer IPv6 SA to A
   S17.   Set the outer IPv6 DA to the first SID of B
   S18.   Set the outer Payload Length, Traffic Class, Flow Label,
             Hop Limit, and Next Header fields
   S19.   Submit the packet to the egress IPv6 FIB lookup for
             transmission to the new destination
   S20. }]]></artwork>
          </figure></t>
      </section>

      <section title="End.NRP.Encaps">
        <t>A new SRv6 function called End.NRP.Encaps is defined. This is a
        variation of the End behavior. It instructs the endpoint node to
        determine the corresponding NRP-ID of the local domain based on the
        mapping relationship between the End.NRP.Encaps SID and the NRPs
        maintained on the endpoint. The NRP-ID is encapsulated in the VTN
        option in the IPv6 HBH extension header.</t>

        <t>Any SID instance of this behavior is associated with one NRP-ID V
        and a source address A.</t>

        <t>When node N receives a packet whose IPv6 DA is S, and S is a local
        End.NRP.Encaps SID, N does the following:</t>

        <t><figure>
            <artwork><![CDATA[   S01. When an SRH is processed {
   S02.   If (Segments Left == 0) {
   S03.      Stop processing the SRH, and proceed to process the next
                header in the packet, whose type is identified by
                the Next Header field in the routing header.
   S04.   }
   S05.   If (IPv6 Hop Limit <= 1) {
   S06.      Send an ICMP Time Exceeded message to the Source Address
                with Code 0 (Hop limit exceeded in transit),
                interrupt packet processing, and discard the packet.
   S07.   }
   S08.   max_LE = (Hdr Ext Len / 2) - 1
   S09.   If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
   S10.      Send an ICMP Parameter Problem to the Source Address
                with Code 0 (Erroneous header field encountered)
                and Pointer set to the Segments Left field,
                interrupt packet processing, and discard the packet.
   S11.   }
   S12.   Decrement IPv6 Hop Limit by 1
   S13.   Decrement Segments Left by 1
   S14.   Update IPv6 DA with Segment List [Segments Left]
   S15.   Set the VTN-ID in VTN option to V in the HBH Ext header
   S16.   Submit the packet to the egress IPv6 FIB lookup for
             transmission to the new destination
   S17. }]]></artwork>
          </figure></t>
      </section>

      <section title="End.BNRP.Encaps">
        <t>A new SRv6 function called End.BNRP.Encaps: Endpoint bound to a NRP
        with IPv6 encapsulation is defined. This is a variation of the End
        behavior. For the End.BNRP SID, its corresponding NRP-ID should be
        specified and encapsulated by the ingress node of SRv6 Path. It
        instructs the endpoint node to obtain the corresponding NRP-ID from
        the SRH, and encapsulate it in the VTN option in the IPv6 HBH
        extension header. Through the End.BNRP.Encaps, the ingress node can
        flexibly specify the local NRP the packet traverses in the
        network.</t>

        <t>Any SID instance of this behavior is associated with one NRP-ID V
        and a source address A.</t>

        <t>There can be several options to carry the local NRP-ID
        corresponding to the End.BNRP.Encaps function:</t>

        <t><list style="numbers">
            <t>The NRP-ID is carried in the argument field of the
            End.BNRP.Encaps SID.</t>

            <t>The NRP-ID is carried in the SRH TLV field.</t>

            <t>The NRP-ID is carried in the next SID following the
            End.BNRP.Encaps SID in the SID list.</t>
          </list>Editor's note: In the current version of this document,
        option 1 is preferred, in which the local NRP-ID is carried in the
        argument field of the SRv6 SID.</t>

        <t>When an ingress node of an SR path encapsulates the End.BNRP.Encaps
        SID into the packet, it SHOULD put the NRP-ID which the packet is
        expected to be mapped to into the argument part of the SID.</t>

        <t>When node N receives a packet whose IPv6 DA is S, and S is a local
        End.BNRP.Encaps SID, N does the following:</t>

        <t><figure>
            <artwork><![CDATA[   S01. When an SRH is processed {
   S02.   If (Segments Left == 0) {
   S03.      Stop processing the SRH, and proceed to process the next
                header in the packet, whose type is identified by
                the Next Header field in the routing header.
   S04.   }
   S05.   If (IPv6 Hop Limit <= 1) {
   S06.      Send an ICMP Time Exceeded message to the Source Address
                with Code 0 (Hop limit exceeded in transit),
                interrupt packet processing, and discard the packet.
   S07.   }
   S08.   max_LE = (Hdr Ext Len / 2) - 1
   S09.   If ((Last Entry > max_LE) or (Segments Left > Last Entry+1)) {
   S10.      Send an ICMP Parameter Problem to the Source Address
                with Code 0 (Erroneous header field encountered)
                and Pointer set to the Segments Left field,
                interrupt packet processing, and discard the packet.
   S11.   }
   S12.   Obtain the NRP-ID V from the argument part of the IPv6 DA  
   S13.   Decrement IPv6 Hop Limit by 1
   S14.   Decrement Segments Left by 1
   S15.   Update IPv6 DA with Segment List [Segments Left]
   S16.   Set the VTN-ID in VTN option to V in the HBH Ext header
   S17.   Submit the packet to the egress IPv6 FIB lookup for
             transmission to the new destination
   S18. }]]></artwork>
          </figure></t>
      </section>
    </section>

    <section title="SR-MPLS NRP BSIDs">
      <t><xref target="I-D.li-mpls-enhanced-vpn-vtn-id"/> describes the
      mechanism of carrying the VTN-ID of a network domain in the MPLS
      extension header.</t>

      <t>With SR-MPLS data plane, NRP BSIDs can be allocated by a domain edge
      node for the three types of NRP binding behaviors described in section
      2.</t>

      <t>For the first type of NRP BSID, a BSID can be bound to a list of
      resource-aware segments of a local NRP. When a node receives a packet
      with a locally assigned NRP BSID, it determines the corresponding SID
      list which consists of the resource-aware segments of a local NRP, and
      encapsulates the SID list to the MPLS label stack.</t>

      <t>For another variant of the first type NRP BSID, a NRP BSID is bound
      to a SR Policy and a local NRP-ID. When a node receives a packet with a
      locally assigned NRP BSID, it determines the corresponding SID list and
      the local NRP-ID, and encaps the packet with the SID list and an MPLS
      VTN extension header which carries the local NRP-ID. Note this requires
      to assign a NRP BSID for each SR policy in each NRP the node
      participates in.</t>

      <t>For the second type of NRP BSID, a NRP BSID is bound to the shortest
      path in an NRP of the local network domain. When a node receives a
      packet with a locally assigned NRP BSID, it determines the corresponding
      local NRP-ID based on the mapping relationship between the NRP BSID and
      the NRP-ID, and encapsulates the packet with an MPLS VTN extension
      header which carries the local NRP-ID. Note this requires to assign a
      NRP BSID for each local NRP.</t>

      <t>For a variant of the second type NRP BSID, a NRP BSID is bound to the
      shortest path in an NRP of the local network domain, the NRP-ID is
      specified and encapsulated by the ingress node in the MPLS VTN extension
      header. When a node receives a packet with a locally assigned NRP BSID,
      it obtains the corresponding local NRP-ID from the NRP-ID list in the
      VTN extension header, and update the local NRP-ID in the VTN extension
      header with the obtained NRP-ID.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>TBD</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>TBD</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Zhibo Hu for his review and valuable
      comments.</t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>

      <?rfc include='reference.RFC.8986'?>

      <?rfc include='reference.I-D.ietf-teas-ietf-network-slices'?>

      <?rfc include='reference.I-D.ietf-teas-enhanced-vpn'?>

      <?rfc include='reference.I-D.li-teas-e2e-ietf-network-slicing'?>
    </references>

    <references title="Informative References">
      <?rfc include='reference.I-D.ietf-spring-sr-for-enhanced-vpn'?>

      <?rfc include='reference.I-D.ietf-spring-resource-aware-segments'?>

      <?rfc include='reference.I-D.dong-teas-nrp-scalability'?>

      <?rfc include='reference.I-D.ietf-6man-enhanced-vpn-vtn-id'?>

      <?rfc include='reference.I-D.li-mpls-enhanced-vpn-vtn-id'?>
    </references>
  </back>
</rfc>
