<?xml version="1.0" encoding="UTF-8"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude"
     version="3"
     category="info"
     docName="draft-cheng-spring-traffic-steering-to-sr-00"
     ipr="trust200902"
     submissionType="IETF"
     consensus="false">
 
  <front>
    <title abbrev="Traffic Steering for SR-MPLS and SRv6">Traffic Steering Considerations for SR-MPLS and SRv6</title>
  	
    <author initials="W." surname="Cheng" fullname="Weiqiang Cheng">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>chengweiqiang@chinamobile.com</email>
      </address>
    </author>
     
    <author initials="C." surname="Lin" fullname="Changwang Lin">
      <organization>New H3C Technologies</organization>
      <address>
        <postal>
          <city>Beijing</city>
          <code>102209</code>
          <country>China</country>
        </postal>
        <email>linchangwang.04414@h3c.com</email>
      </address>
    </author>
  
    <author initials="C." surname="Xie" fullname="Chongfeng Xie">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <street>Beiqijia Town, Changping District</street>
          <city>Beijing</city>
          <code>102209</code>
          <country>China</country>
        </postal>
        <email>xiechf@chinatelecom.cn</email>
      </address>
    </author>
	
    <author initials="Y." surname="Liu" fullname="Yisong Liu">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>

    <date month="November" year="2026"/>
    
    <area>Routing</area>
    <workgroup>Spring</workgroup>
    
    <keyword>Segment Routing</keyword>
    <keyword>SRv6</keyword>
    <keyword>SR-MPLS</keyword>
    <keyword>Traffic Steering</keyword>
    <keyword>TE Policy</keyword>
    <abstract>
      <t>
        This document describes traffic steering mechanisms for both Segment Routing over IPv6 (SRv6) and Segment Routing over MPLS (SR-MPLS). It provides an overview of the main traffic steering methods applicable to both architectures, including steering based on destination addresses (BSID/Binding Label, Color/Endpoint, IGP Shortcut) and flow characteristics (DSCP, 802.1p, Service-class, TE-class, BGP-FlowSpec). Furthermore, it discusses the recommended traffic steering methods for various typical scenarios, highlighting the interoperability and specific handling differences between SR-MPLS and SRv6 where necessary.
      </t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction" numbered="true" toc="default">
      <name>Introduction</name>
      <t>
        The general purpose of traffic steering is to optimize the allocation and transmission of network resources, ensure a balanced distribution of network traffic, improve network performance, reduce congestion, and increase available bandwidth to provide users with a better network experience.
      </t>
      <t>
        Segment Routing (SR) has emerged as a key technology for traffic engineering in modern networks. SR can be instantiated over the MPLS data plane (SR-MPLS) or the IPv6 data plane (SRv6). While the underlying data planes differ, the control plane mechanisms for traffic steering exhibit significant convergence.
      </t>
      <t>
        This document outlines the main traffic steering methods for both SRv6 and SR-MPLS. It describes how traffic can be steered into SR Policies (SRv6 TE Policy or SR-MPLS TE Policy) <xref target="RFC9256"/> using destination address matching and flow characteristic matching.
      </t>
      
      <section anchor="conventions" numbered="true" toc="default">
        <name>Conventions and Terminology</name>
        <t>
          The key words <bcp14>MUST</bcp14>, <bcp14>MUST NOT</bcp14>, <bcp14>REQUIRED</bcp14>, <bcp14>SHALL</bcp14>, <bcp14>SHALL NOT</bcp14>, <bcp14>SHOULD</bcp14>, <bcp14>SHOULD NOT</bcp14>, <bcp14>RECOMMENDED</bcp14>, <bcp14>NOT RECOMMENDED</bcp14>, <bcp14>MAY</bcp14>, and <bcp14>OPTIONAL</bcp14> in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here.
        </t>
          <dl>
            <dt>SR Policy:</dt>
            <dd>A unidirectional path from a head-end to a tail-end, instantiated either as an SRv6 TE Policy or an SR-MPLS TE Policy.</dd>
            <dt>SRv6 SID / MPLS Label:</dt>
            <dd>The identifier used in the data plane. In SRv6, it is a 128-bit IPv6 address (SID); in SR-MPLS, it is a 20-bit label.</dd>
            <dt>BSID / Binding Label:</dt>
            <dd>An advertisement that allows an SR Policy to be referenced as a single segment (or label) by other nodes. In SRv6, this is the BSID; in SR-MPLS, this is the Binding Label.</dd>
            <dt>Color / Endpoint:</dt>
            <dd>Attributes used to identify a specific SR Policy. In SRv6, a Policy is identified by (Color, Endpoint). In SR-MPLS, the Color extended community is similarly used for policy selection.</dd>
          </dl>
        </section>
    </section>
    <section anchor="steering-general" numbered="true" toc="default">
      <name>General Traffic Steering Architecture</name>
      <t>
        Traffic steering towards an SR Policy can be categorized into two primary types:
      </t>
      <ol>
        <li>Steering based on Destination Address: Matching the packet's destination IP address (for IPv6) or the destination prefix (associated with a label) to a specific route.</li>
        <li>Steering based on Flow Characteristics: Identifying traffic based on Layer 2 attributes (802.1p), Layer 3 attributes (DSCP), or local service identifiers (Service-class/TE-class) before mapping them to an SR Policy.</li>
      </ol>
      <t>
        The means of traffic steering include using static routing, employing Policy-Based Routing (PBR) policies, distributing routes through BGP, utilizing BGP-FlowSpec, and utilizing IGP-Shortcut.
      </t>
    </section>
    <section anchor="destination-steering" numbered="true" toc="default">
      <name>Traffic Steering Based on Destination Address</name>
      <t>
        Traffic can typically be steered based on the destination address by matching traffic destination via static routing, PBR, or BGP route import.
      </t>
      <section anchor="bsid-steering" numbered="true" toc="default">
        <name>BSID / Binding Label Based Steering</name>
        <t>
          When a device receives a packet whose top label (in SR-MPLS) or top SID (in SRv6) matches the Binding Identifier of an SR Policy, the packet is forwarded according to that Policy.
        </t>
          <dl>
            <dt>SRv6 Implementation:</dt>
            <dd>The packet's destination IPv6 address is set to the BSID. Upon receipt, the head-end decapsulates the packet and processes it through the SRv6 TE Policy associated with that BSID.</dd>
            <dt>SR-MPLS Implementation:</dt>
            <dd>The packet's top MPLS label is set to the Binding Label. Upon receipt, the head-end swaps the top label and processes the packet through the SR-MPLS TE Policy associated with that label.</dd>
          </dl>
        <t>
          BSID/Binding Label based steering is commonly used in stitching scenarios to reduce header overhead. For example, an SR Policy's BSID/Binding Label can be pushed into the Segment List/Label Stack of another SR Policy.
        </t>
<figure anchor="fig-bsid-example" title="BSID Steering Example">
          <artwork type="ascii-art"><![CDATA[
   SRv6 Policy 1: BSID=1000::1, Color=100, EP=4::4, Path=B-C-D
   SR-MPLS Policy 2: Bind Label=200, Color=200, EP=4.4.4.4, Path=E-F-D
   +---------+                    +---------+
   | RouterB |--------------------| RouterC |
   +---------+                    +---------+
         |                              |
         | (Path B-C-D)                 |
         v                              v
   +---------+                    +---------+
   | RouterA | <--- Traffic --->  | RouterD | (EP: 4::4 or 4.4.4.4)
   +---------+                    +---------+
         ^
         |
   Dest Addr: 1000::1 (SRv6) or Top Label: 200 (SR-MPLS)
]]></artwork>
        </figure>
      </section>
      <section anchor="color-steering" numbered="true" toc="default">
        <name>Color and Endpoint Based Steering</name>
        <t>
          This is a fundamental method for steering traffic into SR Policies using BGP. The BGP protocol advertises a prefix route carrying a Color Extended Community. The device matches this Color and the Next-Hop (Endpoint) against locally configured SR Policies.
        </t>
          <dl>
            <dt>SRv6 Scenario:</dt>
            <dd>BGP advertises prefix 1::1/128 with Next-Hop 4::4 and Color 100. Device checks for an SRv6 TE Policy with Endpoint = 4::4 and Color = 100.</dd>
            <dt>SR-MPLS Scenario:</dt>
            <dd>BGP advertises prefix 1.1.1.0/24 with Next-Hop 4.4.4.4 and Color 100. Device checks for an SR-MPLS TE Policy where the head-end resolves the Next-Hop to a tunnel endpoint and the policy carries the Color 100.</dd>
          </dl>
      </section>
      <section anchor="igp-shortcut" numbered="true" toc="default">
        <name>IGP Shortcut Based Steering</name>
        <t>
          IGP Shortcut allows the IGP (IS-IS or OSPF) to automatically steer traffic to the best matching SR Policy without explicit BGP configuration for each prefix.
        </t>
        <t>
          When an SR Policy (SRv6 or SR-MPLS) is established and Up, the head-end node generates a host route for the Policy's Endpoint and installs it in the forwarding table pointing to the SR Policy. If the policy goes Down, the route is withdrawn, and traffic falls back to SR BE (Best Effort) calculation.
        </t>
      </section>
    </section>
    <section anchor="flow-steering" numbered="true" toc="default">
      <name>Traffic Steering Based on Flow Characteristics</name>
      <t>
        This method identifies traffic based on packet attributes independent of the destination address and steers it to an SR Policy.
      </t>
      <section anchor="dscp-steering" numbered="true" toc="default">
        <name>DSCP-based Steering</name>
        <t>
          Packets are routed to an SR Policy based on the DSCP value in the IP header. This typically requires SR Policy Groups (a group of policies sharing the same Endpoint but different Colors) <xref target="I-D.ietf-spring-sr-policy-group"/>.
        </t>
          <dl>
            <dt>Configuration Logic:</dt>
            <dd>Create a Policy Group for a specific Endpoint. Define a mapping: DSCP Value X -> Color Y. Configure a Tunnel Policy that matches the destination and applies the Policy Group.</dd>
            <dt>Processing:</dt>
            <dd>The ingress router matches the incoming packet's DSCP, maps it to a Color, selects the corresponding SR Policy (SRv6 or SR-MPLS), and encapsulates the packet accordingly.</dd>
          </dl>
      </section>
      <section anchor="dot1p-steering" numbered="true" toc="default">
        <name>802.1p-based Steering</name>
        <t>
          Similar to DSCP, but uses the 802.1p priority field in the VLAN tag. The ingress node matches the incoming 802.1p value, maps it to a Color, and selects the corresponding SR Policy.
        </t>
      </section>
      <section anchor="service-class-steering" numbered="true" toc="default">
        <name>Service-class-based Steering</name>
        <t>
          To ensure that all traffic packets can be steered, even if they do not carry DSCP or Dot1p information, the device introduces a local identification called "service-class".
        </t>
        <t>
          The device maps the internal service-class to a Policy Color within an SR Policy Group. This mechanism applies to both SR-MPLS and SRv6.
        </t>
      </section>
      <section anchor="te-class-steering" numbered="true" toc="default">
        <name>TE-class-based Steering</name>
        <t>
          Due to the limited length of the local identifier "service-class", some vendors have introduced the use of "TE class ID" as another local identifier. The TE class ID can have a maximum value of 65535.
        </t>
        <t>
          The basic principle is to route packets to the corresponding SR Policy based on the TE class ID identifier. The TE-class is mapped to a specific Color within a Policy Group.
        </t>
      </section>
      <section anchor="flowspec-steering" numbered="true" toc="default">
        <name>Traffic steering via BGP-FlowSpec</name>
        <t>
          In the scenario illustrated in Figure 2, where a controller is present in the network, fine-grained traffic scheduling can be achieved by the controller distributing traffic steering rules. The controller utilizes BGP Flow-Spec (FS) to distribute rules to the head-end node. These rules can be matched based on the destination address or flow characteristics. By setting the action after matching, the controller can specify the Color attribute and next-hop address for the traffic, thereby achieving traffic steering. BGP FlowSpec enables global traffic scheduling with flexibility.
        </t>
        <figure anchor="fig-flowspec">
          <name>Steering by BGP FlowSpec</name>
          <artwork type="ascii-art"><![CDATA[
   SRv6 Policy 1: BSID <1000::1>, Color 100, Endpoint 4::4,
                  SID List <B,C,D>
   SRv6 Policy 2: BSID <2000::1>, Color 200, Endpoint 4::4,
                  SID List <E,F,D>

                          +------------------+
                          |   Controller     |
                          +------------------+ 
                                 |  FlowSpec route to Ingress:
                                 |    NLRI: Filter Rules
                                 |    Color: 100/200
                                 |    Nexthop: 4::4
                                 v
   SRv6 Policy 1:  +---------+      |             +---------+
   BSID<1000::1>   |RouterB  |------)-------------|RouterC  |
   Color 100       +-/-------+      |             +-------\-+
   Endpoint 4::4    /               |                      \  
   SID List<B,C,D> /                |                       \     
                  /                 |                        \     
   +-/------+    |                 +------\-+ 
             |RouterA | <--------+                 |RouterD | EndPoint: 4::4
   +-\\------+                            +------/-+ 
   SRv6 Policy 2:  \                                        /
   BSID<2000::1>    \                                      /
   Color 200       +-\-------+                    +-------/-+
   Endpoint 4::4   |RouterE  |--------------------|RouterF  |
   SID List<E,F,D> +---------+                    +---------+
]]></artwork>
        </figure>
      </section>
    </section>
    <section anchor="security" numbered="true" toc="default">
      <name>Security Considerations</name>
      <t>
        As with any traffic engineering mechanism, security considerations regarding the injection of routes (via BGP or FlowSpec) and the manipulation of SR Headers (SRH for IPv6 or Label Stack for MPLS) apply.
      </t>
      <dl>
        <dt>SRv6 Specific:</dt>
        <dd>Protection against unauthorized SRH manipulation and source address spoofing.</dd>
        <dt>SR-MPLS Specific:</dt>
        <dd>Protection against label spoofing and unauthorized label space access.</dd>
        <dt>FlowSpec:</dt>
        <dd>Ensure strict validation of FlowSpec updates to prevent denial-of-service attacks or misrouting.</dd>
      </dl>
    </section>
    <section anchor="iana" numbered="true" toc="default">
      <name>IANA Considerations</name>
      <t>
        This document makes no request of IANA. However, future extensions regarding specific Color mappings or new TLVs for SR-MPLS/SRv6 interworking may require IANA registry updates.
      </t>
    </section>
  </middle>
  <back>
    <references anchor="normative-references">
      <name>Normative References</name>
      <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119">
        <front>
          <title>Key words for use in RFCs to Indicate Requirement Levels</title>
          <author initials="S." surname="Bradner" fullname="Scott Bradner"/>
          <date month="March" year="1997"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174" target="https://www.rfc-editor.org/info/rfc8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author initials="B." surname="Leiba" fullname="Barry Leiba"/>
          <date month="May" year="2017"/>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC9256" target="https://www.rfc-editor.org/info/rfc9256">
        <front>
          <title>Segment Routing Policy Architecture</title>
          <author initials="C." surname="Filsfils" fullname="Clarence Filsfils"/>
          <author initials="D." surname="Talen" fullname="Dhruv Dhody"/>
          <author initials="D." surname="Voyer" fullname="Daniel Voyer"/>
          <author initials="P." surname="Mattes" fullname="Paul Mattes"/>
          <author initials="S." surname="Mahesh" fullname="Siva Sivabalan"/>
          <date month="June" year="2022"/>
        </front>
        <seriesInfo name="RFC" value="9256"/>
        <seriesInfo name="DOI" value="10.17487/RFC9256"/>
      </reference>
    </references>
    <references anchor="informative-references">
      <name>Informative References</name>
      <reference anchor="I-D.ietf-spring-sr-policy-group" target="https://datatracker.ietf.org/doc/html/draft-ietf-spring-sr-policy-group">
        <front>
          <title>SR Policy Group</title>
          <author initials="W." surname="Cheng" fullname="Weiqiang Cheng"/>
          <author initials="W." surname="Jiang" fullname="Wenying Jiang"/>
          <author initials="C." surname="Lin" fullname="Changwang Lin"/>
          <author initials="R." surname="Chen" fullname="Ran Chen"/>
          <author initials="Y." surname="Zhang" fullname="YaWei Zhang"/>
          <date month="August" year="2026"/>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-spring-sr-policy-group-01"/>
      </reference>
    </references>
  </back>
</rfc>