<?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-ietf-spring-resource-aware-segments-10"
     ipr="trust200902">
  <front>
    <title abbrev="Resource-Aware SR Segments">Introducing Resource Awareness
    to SR Segments</title>

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

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

    <author fullname="Takuya Miyasaka" initials="T." surname="Miyasaka">
      <organization>KDDI Corporation</organization>

      <address>
        <email>ta-miyasaka@kddi.com</email>
      </address>
    </author>

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

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

    <author fullname="Fengwei Qin" initials="F." surname="Qin">
      <organization>China Mobile</organization>

      <address>
        <email>qinfengwei@chinamobile.com</email>
      </address>
    </author>

    <author fullname="Zhenqiang Li" initials="Z." surname="Li">
      <organization>China Mobile</organization>

      <address>
        <email>li_zhenqiang@hotmail.com</email>
      </address>
    </author>

    <date day="12" month="October" year="2024"/>

    <workgroup>SPRING Working Group</workgroup>

    <abstract>
      <t>This document describes the mechanism to associate network resources
      to Segment Routing Identifiers (SIDs). Such SIDs are referred to as
      resource-aware SIDs in this document. The resource-aware SIDs retain
      their original forwarding semantics, but with the additional semantics
      to identify the set of network resources available for the packet
      processing and forwarding action. The resource-aware SIDs can therefore
      be used to build SR paths or virtual networks with a set of reserved
      network resources. The proposed mechanism is applicable to both segment
      routing with MPLS data plane (SR-MPLS) and segment routing with IPv6
      data plane (SRv6).</t>
    </abstract>
  </front>

  <middle>
    <section title="Introduction">
      <t>Segment Routing (SR) <xref target="RFC8402"/> specifies a mechanism
      to steer packets through an ordered list of segments. A segment is
      referred to by its Segment Identifier (SID). With SR, explicit source
      routing can be achieved without introducing per-path state into the
      network. Compared with RSVP-TE <xref target="RFC3209"/>, the base SR
      specifications do not have the capability of reserving network resources
      or identifying a set of network resources reserved for an individual or
      a group of services or customers. Although a centralized controller can
      have a global view of network state and can provision different services
      using different SR paths, in data packet forwarding it still relies on
      the DiffServ QoS mechanism <xref target="RFC2474"/> <xref
      target="RFC2475"/> to provide coarse-grained traffic differentiation in
      the network. While such a mechanism may be sufficient for some types of
      services, some customers or services may require to have a set of
      dedicated network resources allocated in the network to achieve resource
      isolation from other customers/services in the same network. Also note
      the number of such customers or services could be larger than the number
      of traffic classes available with DiffServ QoS.</t>

      <t>Without needing to define new SID types, this document extends the SR
      paradigm by associating SIDs with network resource attributes. These
      resource-aware SIDs retain their original functionality, with the
      additional semantics of identifying the set of network resources
      available for the packet processing action. Typical types of network
      resources include link bandwidth, buffers, and queues that are
      associated with class of service, scheduling weights or time cycles, and
      it is also possible to associate SR SIDs with other types of resources
      (e.g., the processing and storage resources). On a particular segment,
      multiple resource-aware SIDs can be allocated, each of which represents
      a subset of network resources allocated in the network to meet the
      requirements of one or a group of customers or services. Each subset of
      network resources may be associated with one or multiple resource-aware
      SIDs. The allocation of network resources on segments can be done either
      via local configuration or via a centralized controller. Other
      approaches are possible such as use of a control plane signaling
      protocol, but they are out of the scope of this document.</t>

      <t>The resource-aware SIDs can be used to build SR paths with a set of
      reserved network resources, which can be used to carry service traffic
      which requires dedicated network resources along the path. In addition,
      the resource-aware SIDs can also be used to build SR-based virtual
      networks (which can be Multi-Point-to-Point or
      Multi-Point-to-Multi-Point) with the required network topology and
      resource attributes. The resources associated with each segment of the
      virtual network can be the same or different. The mechanism is
      applicable to SR with both MPLS data plane (SR-MPLS) and IPv6 data plane
      (SRv6).</t>

      <section title="Requirements Language">
        <t>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
        BCP14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only
        when, they appear in all capitals, as shown here.</t>
      </section>
    </section>

    <section title="Segments with Resource Awareness">
      <t>In Segment Routing architecture <xref target="RFC8402"/>, several
      types of segments are defined to represent either topological or service
      instructions. A topological segment can be a node segment or an
      adjacency segment. A service segment may be associated with specific
      service functions for service chaining purpose. This document introduces
      additional resource semantics to these existing types of SIDs, so that
      the resource-aware SIDs can be used to identify not only the topology or
      service functions, but also the set of network resources allocated on
      the segments for packet processing.</t>

      <t>This section describes the mechanisms of using SR SIDs to identify
      the additional resource information associated with the SR paths or
      virtual networks based on the two SR data plane instantiations: SR-MPLS
      and SRv6. The mechanisms to identify the forwarding path or network
      topology with SIDs as defined in <xref target="RFC8402"/> can be reused,
      and the control plane can be based on <xref target="RFC4915"/>, <xref
      target="RFC5120"/> and <xref target="RFC9350"/>.</t>

      <section title="SR-MPLS">
        <t>The MPLS instantiation of Segment Routing is specified in <xref
        target="RFC8660"/>. As specified in <xref target="RFC8402"/>, an IGP
        Adjacency Segment (Adj-SID) is an SR segment attached to a
        unidirectional adjacency or a set of unidirectional adjacencies. An
        IGP Prefix Segment (Prefix-SID) is an SR segment attached to an IGP
        prefix, which identifies an instruction to forward the packet along
        the path computed using the routing algorithm in the associated
        topology. An IGP node segment is an IGP-Prefix segment that identifies
        a specific router (e.g., a loopback). As described in <xref
        target="RFC9086"/> and <xref target="RFC9087"/>, a BGP PeerAdj SID is
        used as an instruction to steer over a local interface towards a
        specific peer node in a peering Autonomous System (AS). These types of
        SID can be extended to represent both the topological instructions and
        the set of network resources allocated for packet processing following
        the instruction.</t>

        <t>A resource-aware Adj-SID represents a subset of the resources
        (e.g., bandwidth, buffer and queuing resources) of a given link, thus
        each resource-aware Adj-SID is associated with a subset of the link's
        traffic engineering (TE) capabilities and resources (known as TE
        attributes <xref target="RFC2702"/>).</t>

        <t>For one IGP link, multiple resource-aware Adj-SIDs can be
        allocated, each of which is associated with a subset of the link
        resources allocated on the link. For one inter-domain link, multiple
        BGP PeerAdj SIDs may be allocated, each of which is associated with a
        subset of the link resources allocated on the inter-domain link. The
        resource-aware Adj-SIDs may be associated with a specific network
        topology and/or algorithm, so that it is used only for resource-aware
        SR paths computed within the topology and/or algorithm.</t>

        <t>Note this per-segment resource allocation complies with the SR
        paradigm, which avoids introducing per-path state into the network.
        Several approaches can be used to partition and reserve the link
        resources, such as <xref target="FLEXE"/>, logical sub-interfaces,
        dedicated queues, etc. The detailed mechanism of link resource
        partitioning is out of scope of this document.</t>

        <t>A resource-aware prefix-SID is associated with a network topology
        and/or algorithm in which the attached node participates, and in
        addition, a resource-aware prefix-SID is associated with a set of
        network resources (e.g., bandwidth, buffer and queuing resources)
        allocated on each node and link participating in the same topology
        and/or algorithm. Such set of network resources can be used for
        forwarding packets which are encapsulated with this resource-aware
        prefix-SID along the paths computed in the associated topology and/or
        algorithm.</t>

        <t>Although it is possible that each resource-aware prefix-SID is
        associated with a set of dedicated resources in the network, this
        implies the overhead with per-prefix resource reservation in both
        control plane signaling and data plane states, and if network
        resources are allocated for one prefix on all the possible paths, it
        is likely some resources will be wasted. A practical approach is that
        a common set of network resources are allocated by each network node
        and link participating in a topology and/or algorithm, and are
        associated with a group of resource-aware prefix-SIDs of the same
        topology and/or algorithm. Such common set of network resources
        constitutes a network resource group. For a given &lt;topology,
        algorithm&gt; tuple, there can be one or multiple network resource
        groups, the resource-aware prefix-SIDs which are associated with the
        same &lt;topology, algorithm&gt; tuple share the path computation
        result.</t>

        <t>This helps to reduce the dynamics in per-prefix resource allocation
        and adjustment, so that the network resource can be allocated based on
        planning and does not have to rely on dynamic signaling. When the set
        of nodes and links participate in a &lt;topology, algorithm&gt; tuple
        changes, the set of network resources allocated on specific nodes and
        links may need to be adjusted. This means that the resources allocated
        to resource-aware Adj-SIDs on those links may have to be adjusted and
        new TE attributes for the associated adj-SIDs re-advertised.</t>

        <t>For one IGP prefix, multiple resource-aware prefix-SIDs can be
        allocated. Each resource-aware prefix-SID may be associated with a
        unique &lt;topology, algorithm&gt; tuple, in this case different
        &lt;topology, algorithm&gt; tuples can be used to distinguish the
        resource-aware prefix-SIDs of the same prefix. In another case, for
        one IGP prefix, multiple resource-aware prefix-SIDs may be associated
        with the same &lt;topology, algorithm&gt; tuple, then an additional
        control plane distinguisher needs to be introduced to distinguish
        different resource-aware prefix-SIDs associated with the same
        &lt;topology, algorithm&gt; but different groups of network
        resources.</t>

        <t>A group of resource-aware Adj-SID and resource-aware Prefix-SIDs
        can be used to construct the SID lists, which are used to steer the
        traffic to be forwarded along the explicit paths (either strict or
        loose) and processed using the set of network resources identified by
        the resource-aware SIDs.</t>

        <t>In data packet forwarding, each resource-aware adj-SID identifies
        both the next-hop of the node and the set of resources used for packet
        processing on the outgoing interface. Each resource-aware Prefix-SID
        identifies the path to the node which the prefix is attached to, and
        the common set of network resources used for packet forwarding on the
        transit nodes along the path. The transit nodes use the resource-aware
        prefix-SIDs to determine the next-hop of the packet and the set of
        associated local resources, then forward the packet to the next-hop
        using the set of local resources.</t>

        <t>When the set of network resources allocated on the egress node also
        needs to be determined, it is RECOMMENDED that Penultimate Hop Popping
        (PHP) <xref target="RFC3031"/> be disabled, otherwise the inner
        service label needs to be used to infer the set of resources to be
        used for packet processing on the egress node of the SR path.</t>

        <t>This mechanism requires the allocation of additional prefix-SIDs or
        adj-SIDs for network segments to identify different sets of network
        resources. As the number of resource groups increases, the number of
        SIDs would increase accordingly, while it should be noted that there
        is still no per-path state introduced into the network.</t>
      </section>

      <section title="SRv6">
        <t>As specified in <xref target="RFC8986"/>, an SRv6 Segment
        Identifier (SID) is a 128-bit value which consists of a locator (LOC)
        and a function (FUNCT), optionally it may also contain additional
        arguments (ARG) immediately after the FUNCT. The Locator part of the
        SID is routable and leads to the node which instantiates that SID,
        which means the Locator can be parsed by all nodes in the network. The
        FUNCT part of the SID is an opaque identification of a local function
        bound to the SID, and the ARG part of the SID can be used to encode
        additional information for the processing of the behavior bound to the
        SID. Thus the FUNCT and ARG parts can only be parsed by the node which
        instantiates the SRv6 SID.</t>

        <t>For one SRv6 node, multiple resource-aware SRv6 Locators can be
        allocated. A resource-aware Locator is associated with a network
        topology and/or algorithm in which the node participates, and in
        addition, a resource-aware Locator is associated with a set of local
        resources (e.g., bandwidth, buffer, and queueing resources) on each
        node participating in the same topology and/or algorithm. Such a set
        of network resources are used to forward the packets with SIDs which
        have the resource-aware Locator as its prefix, along the path computed
        with the associated topology and/or algorithm. These SIDs are called
        resource-aware SRv6 SIDs. Similar to the resource-aware prefix-SIDs in
        SR-MPLS, a practical approach is that a common set of network
        resources are allocated by each network node and link participating in
        a topology and/or algorithm, and are associated with a group of
        resource-aware Locators of the same topology and/or algorithm.</t>

        <t>For one IGP link, multiple resource-aware SRv6 End.X SIDs can be
        allocated to identify different set of link resources. Each
        resource-aware End.X SID SHOULD use a resource-aware locator as its
        prefix. SRv6 SIDs for other types of functions MAY also be assigned as
        resource-aware SIDs, which can identify the set of network resources
        allocated by the node for executing the behavior.</t>

        <t>A group of resource-aware SRv6 SIDs can be used to construct the
        SID lists, which are used to steer the traffic to be forwarded along
        the explicit paths (either strict or loose) and processed using the
        set of network resources identified by the resource-aware SIDs and
        Locators.</t>

        <t>In data packet forwarding, each resource-aware End.X SID identifies
        both the next-hop and the set of resources used for packet processing
        on the outgoing interface of the node which instantiates the SID. Each
        resource-aware Locator identifies the path to the node which the
        Locator is assigned to, and the set of network resources used for
        packet forwarding on the transit nodes along the path. The transit
        nodes use the resource-aware Locators to determine the next-hop of the
        packet and the set of associated local resources, then forward the
        packet to the next-hop using the set of local resources.</t>

        <t>This mechanism requires the allocation of additional SRv6 Locators
        and SIDs for network segments to identify different set of network
        resources. As the number of resource groups increases, the number of
        SRv6 Locators and SIDs would increase accordingly, while it should be
        noted that there is still no per-path state introduced into the
        network.</t>
      </section>
    </section>

    <section title="Control Plane Considerations">
      <t>The mechanism described in this document makes use of a centralized
      controller to collect the information about the network (configuration,
      state, routing databases, etc.) as well as the service information
      (traffic matrix, performance statistics, etc.) for the planning of
      network resources based on the service requirement. Then the centralized
      controller instructs the network nodes to allocate the network resources
      and associate the resources with resource-aware SIDs. The resource-aware
      SIDs can be either explicitly provisioned by the controller, or
      dynamically allocated by network nodes then reported to the controller.
      The controller is also responsible for the centralized computation and
      optimization of the SR paths taking the topology, algorithm and network
      resource constraints into consideration. The interaction between the
      controller and the network nodes can be based on Netconf/YANG <xref
      target="RFC6241"/> <xref target="RFC7950"/>, BGP-LS <xref
      target="RFC9552"/>, BGP SR Policy <xref
      target="I-D.ietf-idr-sr-policy-safi"/> or PCEP <xref target="RFC5440"/>.
      In some scenarios, extensions to some of these protocols are needed,
      which are out of the scope of this document. In some cases, a
      centralized controller may not be used, but this would complicate the
      operations and planning therefore is not suggested.</t>

      <t>On network nodes, the support for a resource group and the
      information to associate packets with that resource group needs to be
      advertised in the control plane, so that all the nodes have a consistent
      view of the resource group. Given that resource management is a central
      function, the knowledge of the exact resources provided to a resource
      group needs to be known accurately by the relevant central control
      components (e.g., PCE) and the network nodes. This may be done by
      configuration, alternative protocols, or by advertisements in the IGP
      for collection by BGP-LS. If there are related link advertisements, then
      consistency MUST be assured across that set of advertisements.</t>

      <t>The distributed control plane is complementary to the centralized
      controller. A distributed control plane can be used for the collection
      and distribution of the network topology and resource information
      associated with the resource-aware SIDs among network nodes, then some
      of the nodes can distribute the collected information to the centralized
      controller. To advertise the support for a given resource group, a node
      needs to advertise the identifier of the resource group, the associated
      topology and algorithm, the resource-aware SIDs and potentially a set of
      TE attributes representing the resources allocated to it. Distributed
      route computation with topology, algorithm and/or resource constraints
      may also be performed by network nodes. The distributed control plane
      may be based on <xref target="RFC4915"/>, <xref target="RFC5120"/>,
      <xref target="RFC9350"/> with necessary extensions.</t>

      <t>When a network node is instructed to associate a SID with specific
      resources, its actions will depend on the operational configuration of
      the network. In some cases the association between SIDs and resources is
      configured on the individual network nodes, and the control plane (e.g.
      IGP) is used to distribute the SID information and resource availability
      to the controller and the ingress nodes for TE constraint-based path
      computation. In hybrid cases with SR and other TE mechanisms co-existing
      in the network, the IGP advertisements of available resources may need
      to be updated to indicate that there has been a change to the available
      resources resulting from the instantiation of a new resource-aware SID:
      such updates would be rate-limited in the normal way. In still other
      cases the association between SIDs and network resources is known by the
      central controller which is responsible for all TE management, the
      distributed control plane does not need to take any additional
      action.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>This document makes no request of IANA.</t>

      <t>Note to RFC Editor: this section may be removed on publication as an
      RFC.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The security considerations of segment routing in <xref
      target="RFC8402"/> <xref target="RFC8754"/> are applicable to this
      document.</t>

      <t>The resource-aware SIDs may be used for provisioning of SR paths or
      virtual networks to carry traffic with specific SLA requirement (such as
      latency). By disrupting the SLA of such traffic an attack can be
      directly targeted at the customer application, or can be targeted at the
      network operator by causing them to violate their SLA, triggering
      commercial consequences. Dynamic attacks of this sort are not something
      that networks have traditionally guarded against, and networking
      techniques need to be developed to defend against this type of attack.
      By rigorously policing ingress traffic and carefully provisioning
      network resources provided to such services, this type of attack can be
      prevented. However care needs to be taken when providing shared
      resources, and when the network needs to be reconfigured as part of
      ongoing maintenance or in response to a failure.</t>

      <t>The details of the underlay network MUST NOT be exposed to third
      parties, to prevent attacks aimed at exploiting shared network
      resources.</t>
    </section>

    <section title="Contributors">
      <t><figure>
          <artwork><![CDATA[Stwart Bryant
Email: stewart.bryant@gmail.com

Francois Clad
Email: fclad@cisco.com

Zhenbin Li
Email: lizhenbin@huawei.com

Zhibo Hu
Email: huzhibo@huawei.com

Joel Halpern
Email: jmh@joelhalpern.com
]]></artwork>
        </figure></t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to thank Mach Chen, Stefano Previdi, Charlie
      Perkins, Bruno Decraene, Loa Andersson, Alexander Vainshtein and John
      Drake for the valuable discussion and suggestions to this document.</t>
    </section>
  </middle>

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

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

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

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

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

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

    <references title="Informative References">
      <?rfc include='reference.RFC.3209'?>

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

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

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

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

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

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

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

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

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

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

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

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

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

      <?rfc include='reference.I-D.ietf-idr-sr-policy-safi'?>

      <reference anchor="FLEXE"
                 target="http://www.oiforum.com/wp-content/uploads/OIF-FLEXE-01.0.pdf">
        <front>
          <title>Flex Ethernet Implementation Agreement</title>

          <author>
            <organization/>
          </author>

          <date month="March" year="2016"/>
        </front>
      </reference>
    </references>
  </back>
</rfc>
