<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" version="3" category="std" docName="draft-ietf-pim-sr-p2mp-policy-22" number="9960" consensus="true" ipr="trust200902" updates="9524" obsoletes="" submissionType="IETF" xml:lang="en" tocInclude="true" tocDepth="3" symRefs="true" sortRefs="true" prepTime="2026-04-30T08:40:47" indexInclude="true" scripts="Common,Latin">
  <link href="https://datatracker.ietf.org/doc/draft-ietf-pim-sr-p2mp-policy-22" rel="prev"/>
  <link href="https://dx.doi.org/10.17487/rfc9960" rel="alternate"/>
  <link href="urn:issn:2070-1721" rel="alternate"/>
  <front>
    <title abbrev="SR P2MP Policy">Segment Routing Point-to-Multipoint Policy</title>
    <seriesInfo name="RFC" value="9960" stream="IETF"/>
    <author fullname="Rishabh Parekh" initials="R." surname="Parekh" role="editor">
      <organization showOnFrontPage="true">Arrcus</organization>
      <address>
        <postal>
          <city>San Jose</city>
          <country>United States of America</country>
        </postal>
        <email>rishabh@arrcus.com</email>
      </address>
    </author>
    <author fullname="Daniel Voyer" initials="D." surname="Voyer" role="editor">
      <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <city>Montreal</city>
          <country>Canada</country>
        </postal>
        <email>davoyer@cisco.com</email>
      </address>
    </author>
    <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
      <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
      <address>
        <postal>
          <city>Brussels</city>
          <country>Belgium</country>
        </postal>
        <email>cfilsfil@cisco.com</email>
      </address>
    </author>
    <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli">
      <organization showOnFrontPage="true">Nokia</organization>
      <address>
        <postal>
          <city>Ottawa</city>
          <country>Canada</country>
        </postal>
        <email>hooman.bidgoli@nokia.com</email>
      </address>
    </author>
    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization showOnFrontPage="true">Juniper Networks</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>
    <date month="04" year="2026"/>
    <area>RTG</area>
    <workgroup>pim</workgroup>
    <keyword>SR Multicast</keyword>
    <keyword>SRv6 Multicast</keyword>
    <abstract pn="section-abstract">
      <t indent="0" pn="section-abstract-1">The Point-to-Multipoint (P2MP) Policy enables creation of P2MP trees for
      efficient multipoint packet delivery in a Segment Routing (SR) domain.
      This document specifies the architecture, signaling, and procedures for
      SR P2MP Policies with Segment Routing over MPLS (SR-MPLS) and Segment
      Routing over IPv6 (SRv6). It defines the SR P2MP Policy construct,
      candidate paths (CPs) of an SR P2MP Policy, and the instantiation of the
      P2MP tree instances (PTIs) of a CP using Replication segments.
      Additionally, it describes the required extensions for a controller to
      support P2MP path computation and provisioning. This document updates
      RFC 9524.</t>
    </abstract>
    <boilerplate>
      <section anchor="status-of-memo" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.1">
        <name slugifiedName="name-status-of-this-memo">Status of This Memo</name>
        <t indent="0" pn="section-boilerplate.1-1">
            This is an Internet Standards Track document.
        </t>
        <t indent="0" pn="section-boilerplate.1-2">
            This document is a product of the Internet Engineering Task Force
            (IETF).  It represents the consensus of the IETF community.  It has
            received public review and has been approved for publication by
            the Internet Engineering Steering Group (IESG).  Further
            information on Internet Standards is available in Section 2 of 
            RFC 7841.
        </t>
        <t indent="0" pn="section-boilerplate.1-3">
            Information about the current status of this document, any
            errata, and how to provide feedback on it may be obtained at
            <eref target="https://www.rfc-editor.org/info/rfc9960" brackets="none"/>.
        </t>
      </section>
      <section anchor="copyright" numbered="false" removeInRFC="false" toc="exclude" pn="section-boilerplate.2">
        <name slugifiedName="name-copyright-notice">Copyright Notice</name>
        <t indent="0" pn="section-boilerplate.2-1">
            Copyright (c) 2026 IETF Trust and the persons identified as the
            document authors. All rights reserved.
        </t>
        <t indent="0" pn="section-boilerplate.2-2">
            This document is subject to BCP 78 and the IETF Trust's Legal
            Provisions Relating to IETF Documents
            (<eref target="https://trustee.ietf.org/license-info" brackets="none"/>) in effect on the date of
            publication of this document. Please review these documents
            carefully, as they describe your rights and restrictions with
            respect to this document. Code Components extracted from this
            document must include Revised BSD License text as described in
            Section 4.e of the Trust Legal Provisions and are provided without
            warranty as described in the Revised BSD License.
        </t>
      </section>
    </boilerplate>
    <toc>
      <section anchor="toc" numbered="false" removeInRFC="false" toc="exclude" pn="section-toc.1">
        <name slugifiedName="name-table-of-contents">Table of Contents</name>
        <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1">
          <li pn="section-toc.1-1.1">
            <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.1"><xref derivedContent="1" format="counter" sectionFormat="of" target="section-1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-introduction">Introduction</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.1.2">
              <li pn="section-toc.1-1.1.2.1">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.1.1"><xref derivedContent="1.1" format="counter" sectionFormat="of" target="section-1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-terminology">Terminology</xref></t>
              </li>
              <li pn="section-toc.1-1.1.2.2">
                <t indent="0" keepWithNext="true" pn="section-toc.1-1.1.2.2.1"><xref derivedContent="1.2" format="counter" sectionFormat="of" target="section-1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-requirements-language">Requirements Language</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.2">
            <t indent="0" pn="section-toc.1-1.2.1"><xref derivedContent="2" format="counter" sectionFormat="of" target="section-2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sr-p2mp-policy">SR P2MP Policy</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.2.2">
              <li pn="section-toc.1-1.2.2.1">
                <t indent="0" pn="section-toc.1-1.2.2.1.1"><xref derivedContent="2.1" format="counter" sectionFormat="of" target="section-2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sr-p2mp-policy-identificati">SR P2MP Policy Identification</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.2">
                <t indent="0" pn="section-toc.1-1.2.2.2.1"><xref derivedContent="2.2" format="counter" sectionFormat="of" target="section-2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-components-of-an-sr-p2mp-po">Components of an SR P2MP Policy</xref></t>
              </li>
              <li pn="section-toc.1-1.2.2.3">
                <t indent="0" pn="section-toc.1-1.2.2.3.1"><xref derivedContent="2.3" format="counter" sectionFormat="of" target="section-2.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-candidate-paths-and-p2mp-tr">Candidate Paths and P2MP Tree Instances</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.3">
            <t indent="0" pn="section-toc.1-1.3.1"><xref derivedContent="3" format="counter" sectionFormat="of" target="section-3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-steering-traffic-into-an-sr">Steering Traffic into an SR P2MP Policy</xref></t>
          </li>
          <li pn="section-toc.1-1.4">
            <t indent="0" pn="section-toc.1-1.4.1"><xref derivedContent="4" format="counter" sectionFormat="of" target="section-4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-p2mp-tree-instance">P2MP Tree Instance</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.4.2">
              <li pn="section-toc.1-1.4.2.1">
                <t indent="0" pn="section-toc.1-1.4.2.1.1"><xref derivedContent="4.1" format="counter" sectionFormat="of" target="section-4.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-replication-segments-at-lea">Replication Segments at Leaf Nodes</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.2">
                <t indent="0" pn="section-toc.1-1.4.2.2.1"><xref derivedContent="4.2" format="counter" sectionFormat="of" target="section-4.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-shared-replication-segments">Shared Replication Segments</xref></t>
              </li>
              <li pn="section-toc.1-1.4.2.3">
                <t indent="0" pn="section-toc.1-1.4.2.3.1"><xref derivedContent="4.3" format="counter" sectionFormat="of" target="section-4.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-packet-forwarding-in-a-p2mp">Packet Forwarding in a P2MP Tree Instance</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.5">
            <t indent="0" pn="section-toc.1-1.5.1"><xref derivedContent="5" format="counter" sectionFormat="of" target="section-5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-using-a-controller-to-build">Using a Controller to Build a P2MP Tree</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2">
              <li pn="section-toc.1-1.5.2.1">
                <t indent="0" pn="section-toc.1-1.5.2.1.1"><xref derivedContent="5.1" format="counter" sectionFormat="of" target="section-5.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sr-p2mp-policy-on-a-control">SR P2MP Policy on a Controller</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.2">
                <t indent="0" pn="section-toc.1-1.5.2.2.1"><xref derivedContent="5.2" format="counter" sectionFormat="of" target="section-5.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-controller-functions">Controller Functions</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.3">
                <t indent="0" pn="section-toc.1-1.5.2.3.1"><xref derivedContent="5.3" format="counter" sectionFormat="of" target="section-5.3"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-p2mp-tree-compute">P2MP Tree Compute</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.4">
                <t indent="0" pn="section-toc.1-1.5.2.4.1"><xref derivedContent="5.4" format="counter" sectionFormat="of" target="section-5.4"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sid-management">SID Management</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.5">
                <t indent="0" pn="section-toc.1-1.5.2.5.1"><xref derivedContent="5.5" format="counter" sectionFormat="of" target="section-5.5"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-instantiating-p2mp-tree-ins">Instantiating P2MP Tree Instance on Nodes</xref></t>
              </li>
              <li pn="section-toc.1-1.5.2.6">
                <t indent="0" pn="section-toc.1-1.5.2.6.1"><xref derivedContent="5.6" format="counter" sectionFormat="of" target="section-5.6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-protection">Protection</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.5.2.6.2">
                  <li pn="section-toc.1-1.5.2.6.2.1">
                    <t indent="0" pn="section-toc.1-1.5.2.6.2.1.1"><xref derivedContent="5.6.1" format="counter" sectionFormat="of" target="section-5.6.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-local-protection">Local Protection</xref></t>
                  </li>
                  <li pn="section-toc.1-1.5.2.6.2.2">
                    <t indent="0" pn="section-toc.1-1.5.2.6.2.2.1"><xref derivedContent="5.6.2" format="counter" sectionFormat="of" target="section-5.6.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-path-protection">Path Protection</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.6">
            <t indent="0" pn="section-toc.1-1.6.1"><xref derivedContent="6" format="counter" sectionFormat="of" target="section-6"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-iana-considerations">IANA Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.7">
            <t indent="0" pn="section-toc.1-1.7.1"><xref derivedContent="7" format="counter" sectionFormat="of" target="section-7"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-security-considerations">Security Considerations</xref></t>
          </li>
          <li pn="section-toc.1-1.8">
            <t indent="0" pn="section-toc.1-1.8.1"><xref derivedContent="8" format="counter" sectionFormat="of" target="section-8"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-references">References</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.8.2">
              <li pn="section-toc.1-1.8.2.1">
                <t indent="0" pn="section-toc.1-1.8.2.1.1"><xref derivedContent="8.1" format="counter" sectionFormat="of" target="section-8.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-normative-references">Normative References</xref></t>
              </li>
              <li pn="section-toc.1-1.8.2.2">
                <t indent="0" pn="section-toc.1-1.8.2.2.1"><xref derivedContent="8.2" format="counter" sectionFormat="of" target="section-8.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-informative-references">Informative References</xref></t>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.9">
            <t indent="0" pn="section-toc.1-1.9.1"><xref derivedContent="Appendix A" format="default" sectionFormat="of" target="section-appendix.a"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-illustration-of-the-sr-p2mp">Illustration of the SR P2MP Policy and P2MP Tree</xref></t>
            <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2">
              <li pn="section-toc.1-1.9.2.1">
                <t indent="0" pn="section-toc.1-1.9.2.1.1"><xref derivedContent="A.1" format="counter" sectionFormat="of" target="section-appendix.a.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-p2mp-tree-with-non-adjacent">P2MP Tree with Non-Adjacent Replication Segments</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2.1.2">
                  <li pn="section-toc.1-1.9.2.1.2.1">
                    <t indent="0" pn="section-toc.1-1.9.2.1.2.1.1"><xref derivedContent="A.1.1" format="counter" sectionFormat="of" target="section-appendix.a.1.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sr-mpls">SR-MPLS</xref></t>
                  </li>
                  <li pn="section-toc.1-1.9.2.1.2.2">
                    <t indent="0" pn="section-toc.1-1.9.2.1.2.2.1"><xref derivedContent="A.1.2" format="counter" sectionFormat="of" target="section-appendix.a.1.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-srv6">SRv6</xref></t>
                  </li>
                </ul>
              </li>
              <li pn="section-toc.1-1.9.2.2">
                <t indent="0" pn="section-toc.1-1.9.2.2.1"><xref derivedContent="A.2" format="counter" sectionFormat="of" target="section-appendix.a.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-p2mp-tree-with-adjacent-rep">P2MP Tree with Adjacent Replication Segments</xref></t>
                <ul bare="true" empty="true" indent="2" spacing="compact" pn="section-toc.1-1.9.2.2.2">
                  <li pn="section-toc.1-1.9.2.2.2.1">
                    <t indent="0" pn="section-toc.1-1.9.2.2.2.1.1"><xref derivedContent="A.2.1" format="counter" sectionFormat="of" target="section-appendix.a.2.1"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-sr-mpls-2">SR-MPLS</xref></t>
                  </li>
                  <li pn="section-toc.1-1.9.2.2.2.2">
                    <t indent="0" pn="section-toc.1-1.9.2.2.2.2.1"><xref derivedContent="A.2.2" format="counter" sectionFormat="of" target="section-appendix.a.2.2"/>.  <xref derivedContent="" format="title" sectionFormat="of" target="name-srv6-2">SRv6</xref></t>
                  </li>
                </ul>
              </li>
            </ul>
          </li>
          <li pn="section-toc.1-1.10">
            <t indent="0" pn="section-toc.1-1.10.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.b"/><xref derivedContent="" format="title" sectionFormat="of" target="name-acknowledgements">Acknowledgements</xref></t>
          </li>
          <li pn="section-toc.1-1.11">
            <t indent="0" pn="section-toc.1-1.11.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.c"/><xref derivedContent="" format="title" sectionFormat="of" target="name-contributors">Contributors</xref></t>
          </li>
          <li pn="section-toc.1-1.12">
            <t indent="0" pn="section-toc.1-1.12.1"><xref derivedContent="" format="none" sectionFormat="of" target="section-appendix.d"/><xref derivedContent="" format="title" sectionFormat="of" target="name-authors-addresses">Authors' Addresses</xref></t>
          </li>
        </ul>
      </section>
    </toc>
  </front>
  <middle>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-1">
      <name slugifiedName="name-introduction">Introduction</name>
      <t indent="0" pn="section-1-1"><xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> defines a Replication segment that enables a SR node to
      replicate traffic to multiple downstream nodes in an SR domain <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/>. A Point-to-Multipoint (P2MP) service can be realized by a single
      Replication segment spanning from the ingress node to the egress nodes
      of the service. This effectively achieves ingress replication, which is
      inefficient since the traffic of the P2MP service may traverse the same
      set of nodes and links in the SR domain on its path from the ingress
      node to the egress nodes.</t>
      <t indent="0" pn="section-1-2">A multipoint service delivery can be efficiently realized with a
      P2MP tree in a SR domain. A P2MP tree spans from a Root
      node to a set of Leaf nodes via intermediate Replication nodes. It
      consists of a Replication segment at the Root node, and that 
      Replication segment is stitched to one or more Replication segments
      between the Leaf nodes and intermediate Replication nodes.
      A Bud node <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> is a node that is both a
      Replication node and a Leaf node. Any mention of "Leaf node(s)" in this
      document should be considered as referring to "Leaf or Bud node(s)".</t>
      <t indent="0" pn="section-1-3">An SR P2MP Policy defines the Root and Leaf nodes of a P2MP tree. It
      has one or more CPs provisioned with optional
      constraints and/or optimization objectives.</t>
      <t indent="0" pn="section-1-4">A controller computes PTIs of the CPs
      using the constraints and objectives specified in the CP.
      The controller then instantiates a PTI in the SR domain
      by signaling Replication segments to the Root, Replication, and Leaf
      nodes. A Path Computation Element (PCE) <xref target="RFC4655" format="default" sectionFormat="of" derivedContent="RFC4655"/> is one
      example of such a controller. In other cases, a PTI can
      be installed using the Network Configuration Protocol (NETCONF) / YANG or the Command Line Interface (CLI) on the
      Root, Replication, and Leaf nodes.</t>
      <t indent="0" pn="section-1-5">The Replication segments of a PTI can be instantiated
      for SR-MPLS <xref target="RFC8660" format="default" sectionFormat="of" derivedContent="RFC8660"/> and SRv6 <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/>
      data planes, enabling efficient packet replication within an SR
      domain.</t>
      <t indent="0" pn="section-1-6">This document updates the Replication-ID portion of the Replication segment
      identifier (Replication-SID) specified in <xref target="RFC9524" section="2" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2" derivedContent="RFC9524"/>.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-1.1">
        <name slugifiedName="name-terminology">Terminology</name>
        <t indent="0" pn="section-1.1-1">This section defines terms used frequently in this document. Refer
        to the Terminology section of <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> for the definitions of
        Replication segment and other terms associated with it and the
        definitions of Root, Leaf, and Bud nodes.</t>
        <dl spacing="normal" newline="false" indent="3" pn="section-1.1-2">
          <dt pn="section-1.1-2.1">SR P2MP Policy:</dt>
          <dd pn="section-1.1-2.2">An SR P2MP Policy is a framework to construct P2MP
        trees in an SR domain by specifying Root and Leaf nodes.</dd>
          <dt pn="section-1.1-2.3">Tree-ID:</dt>
          <dd pn="section-1.1-2.4">An identifier of an SR P2MP Policy in context of the Root
        node.</dd>
          <dt pn="section-1.1-2.5">Candidate path (CP):</dt>
          <dd pn="section-1.1-2.6">A CP of the SR P2MP Policy defines
        topological or resource constraints and optimization objectives that
        are used to compute and construct PTIs.</dd>
          <dt pn="section-1.1-2.7">P2MP tree instance (PTI):</dt>
          <dd pn="section-1.1-2.8">A PTI of a CP
        is constructed by stitching Replication segments between the Root and Leaf
        nodes of an SR P2MP Policy. Its topology is determined by the constraints
        and optimization objective of the CP.</dd>
          <dt pn="section-1.1-2.9">Instance-ID:</dt>
          <dd pn="section-1.1-2.10">An identifier of a PTI in context of
        the SR P2MP Policy.</dd>
          <dt pn="section-1.1-2.11">Tree-SID:</dt>
          <dd pn="section-1.1-2.12">The Replication-SID of the Replication segment at the
        Root node of a PTI.</dd>
        </dl>
      </section>
      <section numbered="true" removeInRFC="false" toc="include" pn="section-1.2">
        <name slugifiedName="name-requirements-language">Requirements Language</name>
        <t indent="0" pn="section-1.2-1">
    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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
        </t>
      </section>
    </section>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-2">
      <name slugifiedName="name-sr-p2mp-policy">SR P2MP Policy</name>
      <t indent="0" pn="section-2-1">An SR P2MP Policy is used to instantiate P2MP trees between Root
      and Leaf nodes in an SR domain. Note that multiple SR P2MP Policies can have
      identical Root nodes and identical sets of Leaf nodes. An SR P2MP Policy
      has one or more CPs <xref target="RFC9256" format="default" sectionFormat="of" derivedContent="RFC9256"/>.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.1">
        <name slugifiedName="name-sr-p2mp-policy-identificati">SR P2MP Policy Identification</name>
        <t indent="0" pn="section-2.1-1">An SR P2MP Policy is uniquely identified by the tuple &lt;Root,
        Tree-ID&gt;, where:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2.1-2">
          <li pn="section-2.1-2.1">
            <t indent="0" pn="section-2.1-2.1.1">Root: The IP address of the Root node of P2MP trees
            instantiated by the SR P2MP Policy.</t>
          </li>
          <li pn="section-2.1-2.2">
            <t indent="0" pn="section-2.1-2.2.1">Tree-ID: A 32-bit unsigned integer that uniquely identifies the
            SR P2MP Policy in the context of the Root node.</t>
          </li>
        </ul>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-2.2">
        <name slugifiedName="name-components-of-an-sr-p2mp-po">Components of an SR P2MP Policy</name>
        <t indent="0" pn="section-2.2-1">An SR P2MP Policy consists of the following elements:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-2.2-2">
          <li pn="section-2.2-2.1">
            <t indent="0" pn="section-2.2-2.1.1">Leaf nodes: A set of nodes that terminate the P2MP trees of the
            SR P2MP Policy.</t>
          </li>
          <li pn="section-2.2-2.2">
            <t indent="0" pn="section-2.2-2.2.1">Candidate paths: A set of possible paths that define
            constraints and optimization objectives for PTIs of
            the SR P2MP Policy.</t>
          </li>
        </ul>
        <t indent="0" pn="section-2.2-3">An SR P2MP Policy and its CPs are provisioned on a controller (see
        <xref target="Controller" format="default" sectionFormat="of" derivedContent="Section 5"/>) or the Root node
        or both, depending upon the provisioning model. After provisioning, the
        Policy and its CPs are instantiated on the Root node or the controller
        by using a signaling protocol.</t>
      </section>
      <section anchor="Candidate_Path" numbered="true" toc="include" removeInRFC="false" pn="section-2.3">
        <name slugifiedName="name-candidate-paths-and-p2mp-tr">Candidate Paths and P2MP Tree Instances</name>
        <t indent="0" pn="section-2.3-1">An SR P2MP Policy has one or more CPs. The tuple
        &lt;Protocol-Origin, Originator, Discriminator&gt;, as specified in
        <xref target="RFC9256" section="2.6" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9256#section-2.6" derivedContent="RFC9256"/>, uniquely identifies a
        CP in the context of an SR P2MP Policy. The semantics of
        Protocol-Origin, Originator, and Discriminator fields of the identifier
        are the same as in Sections <xref target="RFC9256" sectionFormat="bare" section="2.3" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9256#section-2.3" derivedContent="RFC9256"/>, <xref target="RFC9256" sectionFormat="bare" section="2.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9256#section-2.4" derivedContent="RFC9256"/>, and <xref target="RFC9256" sectionFormat="bare" section="2.5" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9256#section-2.5" derivedContent="RFC9256"/> of <xref target="RFC9256" format="default" sectionFormat="of" derivedContent="RFC9256"/>,
        respectively.</t>
        <t indent="0" pn="section-2.3-2">The Root node of the SR P2MP Policy selects the active CP
        based on the tiebreaking rules defined in <xref target="RFC9256" section="2.9" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9256#section-2.9" derivedContent="RFC9256"/>.</t>
        <t indent="0" pn="section-2.3-3">A CP may include topological and/or resource constraints and
        optimization objectives that influence the computation of the PTIs of
        the CP.</t>
        <t indent="0" pn="section-2.3-4">A CP has zero or more PTIs. A CP does not
        have a PTI when the controller cannot compute a P2MP tree from the
        network topology based on the constraints and/or optimization
        objectives of the CP. A CP can have more than one PTI,
        e.g., during the Make-Before-Break (see <xref target="Tree_Compute" format="default" sectionFormat="of" derivedContent="Section 5.3"/>)
        procedure to handle a network state change. However, one and only one
        PTI <bcp14>MUST</bcp14> be the active instance of the CP. If more than one PTI of a
        CP is active at same time, and that CP is the active CP of the SR P2MP
        Policy, then duplicate traffic may be delivered to the Leaf nodes.</t>
        <t indent="0" pn="section-2.3-5">A PTI is identified by an Instance-ID. This is an unsigned 16-bit
        number that is unique in context of the SR P2MP Policy of the
        CP.</t>
        <t indent="0" pn="section-2.3-6">PTIs are instantiated using Replication segments. 
        <xref target="RFC9524" section="2" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2" derivedContent="RFC9524"/> specifies the Replication-ID of the Replication segment control plane identifier
        tuple as a variable length field that can be
        modified as required based on the use of a Replication segment.
        However, length is an imprecise indicator of the actual structure of
        the Replication-ID. This document updates the Replication-ID of the control plane identifier of a
        Replication segment <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> to be the tuple: &lt;Root,
        Tree-ID, Instance-ID&gt;, where &lt;Root, Tree-ID&gt;
        identifies the SR P2MP Policy and Instance-ID identifies the PTI
        within that SR P2MP Policy. The Replication segments
        used to instantiate a PTI are thus identified in the control plane by the tuple: &lt;Root,
        Tree-ID, Instance-ID, Node-ID&gt;. As per
        <xref section="2" target="RFC9524" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2" derivedContent="RFC9524"/>, for a simple use case, the
        Replication-ID is a 32-bit number. To map this use case to the tuple for the control plane identifier of a Replication segment as defined in this document, the Root <bcp14>MUST</bcp14> be zero
        (0.0.0.0 for IPv4 and :: for IPv6), the Instance-ID <bcp14>MUST</bcp14> be zero,
        and the 32-bit Tree-ID to effectively make the tuple 
        &lt;[0.0.0.0 or ::], Tree-ID, 0, Node-ID&gt;.</t>
        <t indent="0" pn="section-2.3-7">PTIs may have different tree topologies due to possibly differing
        constraints and optimization objectives of the CPs in an SR P2MP
        Policy and across different policies. Even within a given CP, two PTIs
        of that CP, say during the Make-Before-Break procedure, are likely to have
        different tree topologies due to a change in the network state. Since
        the PTIs may have different tree topologies, their replication states
        also differ at various nodes in the SR domain. Therefore, each PTI has
        its own Replication segment and a unique Replication-SID in the data plane at a given
        node in the SR domain.</t>
        <t indent="0" pn="section-2.3-8">A controller designates an active instance of a CP at the Root node
        of the SR P2MP Policy by signaling this state through the protocol used
        to instantiate the Replication segment of the instance.</t>
        <t indent="0" pn="section-2.3-9">This document focuses on the use of a controller to compute and
        instantiate PTIs of SR P2MP Policy CPs. It is also feasible to
        provision an explicit CP in an SR P2MP Policy with a static tree
        topology using NETCONF/YANG or CLI. Note that a static tree topology will
        not adapt to any changes in the network state of an SR domain. The
        explicit CPs may be provisioned on the controller or the Root node.
        When an explicit CP is provisioned on the controller, the controller
        bypasses the compute stage and directly instantiates the PTIs in the
        SR domain. When an explicit CP is provisioned on the Root node, the
        Root node instantiates the PTIs in the SR domain. The exact procedures
        for provisioning an explicit CP and the signaling from the Root node
        to instantiate the PTIs are outside the scope of this document.</t>
      </section>
    </section>
    <section anchor="Steering" numbered="true" toc="include" removeInRFC="false" pn="section-3">
      <name slugifiedName="name-steering-traffic-into-an-sr">Steering Traffic into an SR P2MP Policy</name>
      <t indent="0" pn="section-3-1">The Replication-SID of the Replication segment at the Root node is
      referred to as the Tree-SID of a PTI. It is <bcp14>RECOMMENDED</bcp14> that the
      Tree-SID is also used as the Replication-SID for the Replication
      segments at the intermediate Replication nodes and the Leaf nodes of the
      PTI as it simplifies operations and troubleshooting. However, the
      Replication-SIDs of the Replication segments at the intermediate
      Replication nodes and the Leaf nodes <bcp14>MAY</bcp14> differ from the Tree-SID. For
      SRv6, Replication-SID is the FUNCT portion of the SRv6 segment ID (SID) <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/> <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/>. Note that even if the Tree-SID
      is the Replication-SID of all the Replication segments of a PTI, the locator (LOC)
      portion of the SRv6 SID <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/> differs for the Root
      node, the intermediate Replication nodes, and the Leaf nodes of the
      PTI.</t>
      <t indent="0" pn="section-3-2">An SR P2MP Policy has a Binding SID (BSID). The BSID is used to steer
      traffic into an SR P2MP Policy, as described below, when the Root node is not
      the ingress node of the SR domain where the traffic arrives. The packets
      are steered from the ingress node to the Root node using a segment list
      with the BSID as the last segment in the list. In this case, it is
      <bcp14>RECOMMENDED</bcp14> that the BSID of an SR P2MP Policy <bcp14>SHOULD</bcp14> be constant
      throughout the lifetime of the policy so the steering of traffic to the
      Root node remains unchanged. The BSID of an SR P2MP Policy <bcp14>MAY</bcp14> be the
      Tree-SID of the active P2MP instance of the active CP of the policy. In
      this case, the BSID of an SR P2MP Policy changes when the active CP or
      the active PTI of the SR P2MP Policy changes. Note that the BSID is not
      required to steer traffic into an SR P2MP Policy when the Root node of
      an SR P2MP Policy is also the ingress node of the SR domain where the
      traffic arrives.</t>
      <t indent="0" pn="section-3-3">The Root node can steer an incoming packet into an SR P2MP Policy in
      one of following methods:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-3-4">
        <li pn="section-3-4.1">
          <t indent="0" pn="section-3-4.1.1">Local-policy-based forwarding: The Root node maps the incoming
          packet to the active PTI of the active CP of an SR P2MP Policy based
          on local forwarding policy, and it is replicated with the
          encapsulated Replication-SIDs of the downstream nodes. The
          procedures to map an incoming packet to an SR P2MP Policy are out of
          scope of this document. It is <bcp14>RECOMMENDED</bcp14> that an implementation
          provide a mechanism to examine the result of application of the
          local forwarding policy, i.e., provide information about the traffic
          mapped to an SR P2MP Policy and the active CP and active PTI of the
          policy.</t>
        </li>
        <li pn="section-3-4.2">
          <t indent="0" pn="section-3-4.2.1">Tree-SID-based forwarding: The BSID, which may be the
          Tree-SID of the active PTI, in an incoming packet is used to map the
          packet to the active PTI. The BSID in the incoming packet is
          replaced with the Tree-SID of the active PTI of the active CP, and the
          packet is replicated with the Replication-SIDs of the downstream
          nodes.</t>
        </li>
      </ul>
      <t indent="0" pn="section-3-5">For local-policy-based forwarding with SR-MPLS, the TTL for the Root node
      <bcp14>SHOULD</bcp14> set the TTL in the encapsulating MPLS header so that the replicated
      packet can reach the furthest Leaf node. The Root <bcp14>MAY</bcp14> set the TTL in
      the encapsulating MPLS header from the payload. In this case, the TTL may
      not be sufficient for the replicated packet to reach the furthest node.
      For SRv6, <xref target="RFC9524" section="2.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2.2" derivedContent="RFC9524"/> provides guidance to
      set the IPv6 Hop Limit of the encapsulating IPv6 header.</t>
    </section>
    <section anchor="P2MP_Tree" numbered="true" toc="include" removeInRFC="false" pn="section-4">
      <name slugifiedName="name-p2mp-tree-instance">P2MP Tree Instance</name>
      <t indent="0" pn="section-4-1">A PTI within an SR domain establishes a forwarding
      structure that connects a Root node to a set of Leaf nodes via a series
      of intermediate Replication nodes. The tree consists of:</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4-2">
        <li pn="section-4-2.1">
          <t indent="0" pn="section-4-2.1.1">A Replication segment at the Root node.</t>
        </li>
        <li pn="section-4-2.2">
          <t indent="0" pn="section-4-2.2.1">Zero or more Replication segments at intermediate Replication
          nodes.</t>
        </li>
        <li pn="section-4-2.3">
          <t indent="0" pn="section-4-2.3.1">Replication segments at the Leaf nodes.</t>
        </li>
      </ul>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.1">
        <name slugifiedName="name-replication-segments-at-lea">Replication Segments at Leaf Nodes</name>
        <t indent="0" pn="section-4.1-1">A specific service is identified by a service context in a packet.
        A PTI is usually associated with one and only one multipoint service.
        On a Leaf node of such a multipoint service, the transport identifier,
        which is the Tree-SID or Replication-SID of the Replication segment at
        a Leaf node, is also associated with the service context because it is
        not always feasible to separate the transport and service context with
        efficient replication in core since a) multipoint services may have
        differing sets of endpoints and b) downstream allocation of a service
        context cannot be encoded in packets replicated in the core.</t>
        <t indent="0" pn="section-4.1-2">A PTI can be associated with one or more multipoint services on
        the Root and Leaf nodes. In SR-MPLS deployments, if it is known a
        priori that multipoint services mapped to an SR-MPLS PTI can be
        uniquely identified with their service label, a controller <bcp14>MAY</bcp14> opt
        to not instantiate Replication segments at Leaf nodes. In such cases,
        Replication nodes upstream of the Leaf nodes can remove the Tree-SID
        from the packet before forwarding it. A multipoint service context
        allocated from an upstream assigned label or Domain-wide Common Block
        (DCB), as specified in <xref target="RFC9573" format="default" sectionFormat="of" derivedContent="RFC9573"/>, is an example of a
        globally unique context that facilitates this optimization.</t>
        <t indent="0" pn="section-4.1-3">In SRv6 deployments, Replication segments of a PTI <bcp14>MUST</bcp14> be
        instantiated on Leaf nodes of the tree since behavior like Penultimate Hop Popping (PHP) is not
        feasible because the Tree-SID is carried in the IPv6 Destination Address
        field of the outer IPv6 header. If two or more multipoint services are
        mapped to one SRv6 PTI, an SRV6 SID representing the service context
        is assigned by the Root node or assigned from the DCB. This SRv6 SID <bcp14>MUST</bcp14>
        be encoded as the last segment in the Segment List of the Segment
        Routing Header <xref target="RFC8754" format="default" sectionFormat="of" derivedContent="RFC8754"/> by the Root node to derive the
        packet processing context (PPC) for the service, as described in
        <xref target="RFC9524" section="2.2" sectionFormat="of" format="default" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2.2" derivedContent="RFC9524"/>, at a Leaf node.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.2">
        <name slugifiedName="name-shared-replication-segments">Shared Replication Segments</name>
        <t indent="0" pn="section-4.2-1">A Replication segment <bcp14>MAY</bcp14> be shared across different PTIs. One
        simple use of a shared Replication segment is for local protection on
        a Replication node. Assume a Replication node, say node X, has multiple PTIs. Assume the Replications segments of these PTIs replicate to a downstream node, say node Y, amongst other downstream nodes. This node Y is a common downstream node of these Replication segments at node X.  A Replication segment is established to protect the adjacency or path between node X and node Y; this Replication segment can be shared across all the Replication segments of the PTIs replicating from node X to node Y.</t>
        <t indent="0" pn="section-4.2-2">A shared Replication segment <bcp14>MUST</bcp14> be identified using a Root set to
        zero (0.0.0.0 for IPv4 and :: for IPv6), an Instance-ID set to zero, and 
        a Tree-ID that is unique within the context of the node where the
        Replication segment is instantiated. The Root is zero because a shared
        Replication segment is not associated with a particular SR P2MP Policy
        or a PTI. Note that the shared Replication-SID conforms
        with the updated Replication-ID definition in <xref target="Candidate_Path" format="default" sectionFormat="of" derivedContent="Section 2.3"/>.</t>
        <t indent="0" pn="section-4.2-3">It is possible for different PTIs to share a P2MP tree at a
        Replication node. This allows a common sub-tree to be shared across
        PTIs whose tree topologies are identical in some portion of an SR
        domain. The procedures to share a P2MP tree across PTIs are outside
        the scope of this document.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-4.3">
        <name slugifiedName="name-packet-forwarding-in-a-p2mp">Packet Forwarding in a P2MP Tree Instance</name>
        <t indent="0" pn="section-4.3-1">When a packet is steered into a PTI, the Replication segment at the
        Root node performs packet replication and forwards copies to
        downstream nodes.</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-2">
          <li pn="section-4.3-2.1">
            <t indent="0" pn="section-4.3-2.1.1">Each replicated packet carries the Replication-SID of the
            Replication segment at the downstream node.</t>
          </li>
          <li pn="section-4.3-2.2">
            <t indent="0" pn="section-4.3-2.2.1">A downstream node can be either: </t>
            <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-4.3-2.2.2">
              <li pn="section-4.3-2.2.2.1">
                <t indent="0" pn="section-4.3-2.2.2.1.1">A Leaf node, in which case the replication process
                terminates, or</t>
              </li>
              <li pn="section-4.3-2.2.2.2">
                <t indent="0" pn="section-4.3-2.2.2.2.1">An intermediate Replication node, which further replicates
                the packet through its associated Replication segments until
                it reaches all Leaf nodes.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t indent="0" pn="section-4.3-3">A Replication node and a downstream node can be non-adjacent. In
        this case, the replicated packet has to traverse a path to reach the
        downstream node. For SR-MPLS, this is achieved by inserting one or
        more SIDs before the downstream Replication-SID. For SRv6, the LOC
        <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/> of the downstream Replication-SID can guide the
        packet to the downstream node or an optional segment list may be used
        to steer the replicated packet on a specific path to the downstream
        node. For details of SRv6 replication to a non-adjacent downstream node
        and IPv6 Hop Limit considerations, refer to <xref target="RFC9524" section="2.2" format="default" sectionFormat="of" derivedLink="https://rfc-editor.org/rfc/rfc9524#section-2.2" derivedContent="RFC9524"/>.</t>
      </section>
    </section>
    <section anchor="Controller" numbered="true" toc="include" removeInRFC="false" pn="section-5">
      <name slugifiedName="name-using-a-controller-to-build">Using a Controller to Build a P2MP Tree</name>
      <t indent="0" pn="section-5-1">A controller is instantiated or provisioned with the SR P2MP Policy and
      its CPs to compute and instantiate PTIs in an SR domain. The
      procedures for provisioning or instantiation of these constructs on a
      controller are outside the scope of this document.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.1">
        <name slugifiedName="name-sr-p2mp-policy-on-a-control">SR P2MP Policy on a Controller</name>
        <t indent="0" pn="section-5.1-1">An SR P2MP Policy is provisioned on a controller by an entity that
        can be an operator, a network node, or a machine by specifying the
        addresses of the Root, the set of Leaf nodes, and the CPs.
        In this case, the policy and its CPs are instantiated on the Root node
        using a signaling protocol. An SR P2MP Policy, its Leaf nodes, and the
        CPs may also be provisioned on the Root node and then instantiated on
        the controller using a signaling protocol. The procedures and
        mechanisms for provisioning and instantiation of an SR P2MP Policy and its CPS
        on a controller or a Root node are outside the scope of this
        document.</t>
        <t indent="0" pn="section-5.1-2">The possible set of constraints and optimization objective of a CP
        are described in <xref section="3" target="I-D.filsfils-spring-sr-policy-considerations" format="default" sectionFormat="of" derivedLink="https://datatracker.ietf.org/doc/html/draft-filsfils-spring-sr-policy-considerations-09#section-3" derivedContent="SR-POLICY"/>. Other
        constraints and optimization objectives <bcp14>MAY</bcp14> be used for P2MP tree
        computation.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.2">
        <name slugifiedName="name-controller-functions">Controller Functions</name>
        <t indent="0" pn="section-5.2-1">A controller performs the following functions in general:</t>
        <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-5.2-2">
          <li pn="section-5.2-2.1">
            <t indent="0" pn="section-5.2-2.1.1">Topology Discovery: A controller discovers network topology
            across Interior Gateway Protocol (IGP) areas, levels, or Autonomous
            Systems (ASes).</t>
          </li>
          <li pn="section-5.2-2.2">
            <t indent="0" pn="section-5.2-2.2.1">Capability Exchange: A controller discovers a node's capability
            to participate in an SR P2MP Policy as well as advertise its capability to
            support the SR P2MP Policy.</t>
          </li>
        </ul>
      </section>
      <section anchor="Tree_Compute" numbered="true" toc="include" removeInRFC="false" pn="section-5.3">
        <name slugifiedName="name-p2mp-tree-compute">P2MP Tree Compute</name>
        <t indent="0" pn="section-5.3-1">A controller computes one or more PTIs for CPs of an SR P2MP
        Policy. A CP may not have any PTIs if a controller cannot compute a
        P2MP tree for it.</t>
        <t indent="0" pn="section-5.3-2">A controller <bcp14>MUST</bcp14> compute a P2MP tree such that there are no loops
        in the tree at steady state as required by <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/>.</t>
        <t indent="0" pn="section-5.3-3">A controller <bcp14>SHOULD</bcp14> modify a PTI of a CP on detecting a
        change in the network topology if the change affects the tree
        instance or when a better path can be found based on the new network
        state. Alternatively, the controller <bcp14>MAY</bcp14> decide to implement a
        Make-Before-Break approach to minimize traffic loss. The controller
        can do this by creating a new PTI, activating the new instance once it
        is instantiated in the network, and then removing the old PTI.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.4">
        <name slugifiedName="name-sid-management">SID Management</name>
        <t indent="0" pn="section-5.4-1">The controller assigns the Replication-SIDs for the Replication
        segments of the PTI.</t>
        <t indent="0" pn="section-5.4-2">The Replication-SIDs of a PTI of a CP of an SR P2MP Policy can be
        either dynamically assigned by the controller or statically assigned
        by the entity provisioning the SR P2MP Policy.</t>
        <t indent="0" pn="section-5.4-3">For SR-MPLS, a Replication-SID may be assigned from the SR Local
        Block (SRLB) or the SR Global Block (SRGB) <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/>.
        It is <bcp14>RECOMMENDED</bcp14> to assign a Replication-SID from the SRLB since
        Replication segments are local to each node of the PTI. It is <bcp14>NOT RECOMMENDED</bcp14> to allocate a Replication-SID from the SRGB since this
        block is globally significant in the SR domain any it may get depleted if a
        significant number of PTIs are instantiated in the SR domain.</t>
        <t indent="0" pn="section-5.4-4"><xref target="Steering" format="default" sectionFormat="of" derivedContent="Section 3"/> recommends that the Tree-SID be used as the
        Replication-SIDs for all the Replication segments of a PTI. It may be
        feasible to allocate the same Tree-SID value for all the Replication
        segments if the blocks used for allocation are not identical on all
        the nodes of the PTI or if the particular Tree-SID value in the block
        is assigned to some other SID on some node.</t>
        <t indent="0" pn="section-5.4-5">A BSID is also assigned for the SR P2MP Policy. The controller <bcp14>MAY</bcp14>
        decide to not assign a BSID and allow the Root node of the SR P2MP
        Policy to assign the BSID. It is <bcp14>RECOMMENDED</bcp14> to assign the BSID of an
        SR P2MP Policy from the SRLB for SR-MPLS.</t>
        <t indent="0" pn="section-5.4-6">The controller <bcp14>MAY</bcp14> be provisioned with a reserved block or multiple
        reserved blocks for assigning Replication-SIDs and/or the BSIDs for SR
        P2MP Policies. A single block maybe be reserved for the whole SR
        domain, or dedicated blocks can be reserved for each node or a group
        of nodes in the SR domain. These blocks <bcp14>MAY</bcp14> overlap with either 
        the SRGB, the SRLB, or both. The procedures for provisioning these reserved
        blocks and procedures for deconflicting assignments from these
        reserved blocks with overlapping SRLB or SRGB blocks are outside the
        scope of this document.</t>
        <t indent="0" pn="section-5.4-7">A controller may not be aware of all the assignments of SIDs from
        the SRGB or the SRLB of the SR domain. If reserved blocks are not
        used, the assignment of Replication-SIDs or BSIDs of SR P2MP Policies
        from these blocks may conflict with other SIDs.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.5">
        <name slugifiedName="name-instantiating-p2mp-tree-ins">Instantiating P2MP Tree Instance on Nodes</name>
        <t indent="0" pn="section-5.5-1">After computing P2MP trees, the controller instantiates the
        Replication segments that compose the PTIs in the SR domain using
        signaling protocols such as the Path Computation Element Communication Protocol (PCEP) <xref target="I-D.ietf-pce-sr-p2mp-policy" format="default" sectionFormat="of" derivedContent="SR-P2MP-PCEP"/>, BGP <xref target="I-D.ietf-idr-sr-p2mp-policy" format="default" sectionFormat="of" derivedContent="P2MP-BGP"/>, or other mechanisms such as
        NETCONF/YANG <xref target="I-D.hb-spring-sr-p2mp-policy-yang" format="default" sectionFormat="of" derivedContent="SR-P2MP-YANG"/>, etc.
        The procedures for the instantiation of the Replication segments in an
        SR domain are outside the scope of this document.</t>
        <t indent="0" pn="section-5.5-2">A node <bcp14>SHOULD</bcp14> report a successful instantiation of a Replication
        segment. The exact procedure for reporting this is outside the scope
        of this document.</t>
        <t indent="0" pn="section-5.5-3">The instantiation of a Replication segment on a node may fail,
        e.g., when the Replication-SID conflicts with another SID on the node.
        The node <bcp14>SHOULD</bcp14> report this, preferably with a reason for the failure,
        using a signaling protocol. The exact procedure for reporting this
        failure is outside the scope of this document.</t>
        <t indent="0" pn="section-5.5-4">If the instantiation of a Replication segment on a node fails, the
        controller <bcp14>SHOULD</bcp14> attempt to re-instantiate the Replication segment.
        There <bcp14>SHOULD</bcp14> be an upper bound on the number of attempts. If the
        instantiation of a Replication segment ultimately fails after the
        allowed number of attempts, the controller <bcp14>SHOULD</bcp14> generate an alert
        via mechanisms like syslog. These alerts <bcp14>SHOULD</bcp14> be rate-limited to
        protect the logging facility in case Replication segment instantiation
        fails on multiple nodes. The controller <bcp14>MAY</bcp14> decide to tear down the
        PTI if the instantiations of some of the Replication segments of the
        instance fail. The controller is <bcp14>RECOMMENDED</bcp14> to tear down the PTI if
        the instantiation of the Replication segment on the Root node fails.
        The controller can employ different strategies to retry instantiating
        a PTI after a failure. These are out of scope of this document.</t>
        <t indent="0" pn="section-5.5-5">A PTI should be instantiated within a reasonable time, especially if
        it is the active PTI of an SR P2MP Policy. One approach is the
        controller instantiates the Replication segments in a batch. For
        example, the controller instantiates the Replication segments of the
        Leaf nodes and the intermediate Replication nodes first. If all of
        these Replication segments are successfully instantiated, the
        controller then proceeds to instantiate the Replication segment at the
        Root node. If the Replication segment instantiation at the Root node
        succeeds, the controller can immediately activate the instance if it
        needs to carry traffic of the SR P2MP Policy. A controller can adopt a
        similar approach when instantiating the new PTI for the Make-Before-Break
        procedure.</t>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-5.6">
        <name slugifiedName="name-protection">Protection</name>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-5.6.1">
          <name slugifiedName="name-local-protection">Local Protection</name>
          <t indent="0" pn="section-5.6.1-1">A network link, node, or replication branch on a PTI can be
          protected using SR Policies <xref target="RFC9256" format="default" sectionFormat="of" derivedContent="RFC9256"/>. The backup SR
          Policies are associated with replication branches of a Replication
          segment and are programmed in the data plane in order to minimize
          traffic loss when the protected link/node fails. The segment list of
          the backup SR Policy is imposed on the downstream Replication-SID of
          a replication branch to steer the traffic on the backup path.</t>
          <t indent="0" pn="section-5.6.1-2">It is also possible to use a node local Loop-Free Alternate <xref target="RFC5286" format="default" sectionFormat="of" derivedContent="RFC5286"/> or Topology Independent Loop-Free Alternate (TI-LFA) <xref target="RFC9855" format="default" sectionFormat="of" derivedContent="RFC9855"/> protection and
          a Micro-Loop <xref target="RFC5715" format="default" sectionFormat="of" derivedContent="RFC5715"/> or SR Micro-Loop <xref target="I-D.bashandy-rtgwg-segment-routing-uloop" format="default" sectionFormat="of" derivedContent="SR-LOOP"/> prevention
          mechanism to protect the links/nodes of a PTI.</t>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-5.6.2">
          <name slugifiedName="name-path-protection">Path Protection</name>
          <t indent="0" pn="section-5.6.2-1">A controller can create a disjoint backup tree instance for
          providing end-to-end tree protection if the topology permits. This
          can be achieved by having a backup CP with constraints and/or
          optimization objectives that ensure its PTIs are disjoint from the
          PTIs of the primary/active CP.</t>
        </section>
      </section>
    </section>
    <section anchor="IANA" numbered="true" toc="include" removeInRFC="false" pn="section-6">
      <name slugifiedName="name-iana-considerations">IANA Considerations</name>
      <t indent="0" pn="section-6-1">This document has no IANA actions.</t>
    </section>
    <section anchor="Security" numbered="true" toc="include" removeInRFC="false" pn="section-7">
      <name slugifiedName="name-security-considerations">Security Considerations</name>
      <t indent="0" pn="section-7-1">This document describes how a PTI can be created in an SR domain by
      stitching Replication segments together. Some security considerations
      for Replication segments outlined in <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> are also
      applicable to this document. Following is a brief reminder of those
      security considerations.</t>
      <t indent="0" pn="section-7-2">An SR domain needs protection from outside attackers as described in
      <xref target="RFC8402" format="default" sectionFormat="of" derivedContent="RFC8402"/>, <xref target="RFC8754" format="default" sectionFormat="of" derivedContent="RFC8754"/>, and <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/>.</t>
      <t indent="0" pn="section-7-3">Failure to protect the SR-MPLS domain by correctly provisioning MPLS
      support per interface permits attackers from outside the domain to send
      packets to receivers of the multipoint services that use the SR P2MP
      Policies provisioned within the domain.</t>
      <t indent="0" pn="section-7-4">Failure to protect the SRv6 domain with inbound Infrastructure Access
      Control Lists (IACLs) on external interfaces, combined with failure to
      implement the method described in RFC 2827 <xref target="BCP38" format="default" sectionFormat="of" derivedContent="BCP38"/> or apply IACLs on nodes
      provisioning SIDs, permits attackers from outside the SR domain to send
      packets to the receivers of multipoint services that use the SR P2MP
      Policies provisioned within the domain.</t>
      <t indent="0" pn="section-7-5">Incorrect provisioning of Replication segments by a controller that
      computes SR PTI can result in a chain of Replication segments forming a
      loop. In this case, replicated packets can create a storm until MPLS TTL
      (for SR-MPLS) or IPv6 Hop Limit (for SRv6) decrements to zero.</t>
      <t indent="0" pn="section-7-6">The control plane protocols (like PCEP, BGP, etc.) used to
      instantiate Replication segments of SR PTI can leverage their own
      security mechanisms such as encryption, authentication filtering,
      etc.</t>
      <t indent="0" pn="section-7-7">For SRv6, <xref target="RFC9524" format="default" sectionFormat="of" derivedContent="RFC9524"/> describes an exception for the ICMPv6
      Parameter Problem message with Code 2. If an attacker
      is able to inject a packet into a multipoint service with the source address
      of a node and with an extension header using an unknown option type marked
      as mandatory, then a large number of ICMPv6 Parameter Problem messages
      can cause a denial-of-service attack on the source node.</t>
    </section>
  </middle>
  <back>
    <displayreference target="I-D.ietf-pce-sr-p2mp-policy" to="SR-P2MP-PCEP"/>
    <displayreference target="I-D.ietf-idr-sr-p2mp-policy" to="P2MP-BGP"/>
    <displayreference target="I-D.hb-spring-sr-p2mp-policy-yang" to="SR-P2MP-YANG"/>
    <displayreference target="I-D.filsfils-spring-sr-policy-considerations" to="SR-POLICY"/>
    <displayreference target="I-D.bashandy-rtgwg-segment-routing-uloop" to="SR-LOOP"/>
    <references pn="section-8">
      <name slugifiedName="name-references">References</name>
      <references pn="section-8.1">
        <name slugifiedName="name-normative-references">Normative References</name>
        <reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t indent="0">In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </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" quoteTitle="true" derivedAnchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t indent="0">RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8402" target="https://www.rfc-editor.org/info/rfc8402" quoteTitle="true" derivedAnchor="RFC8402">
          <front>
            <title>Segment Routing Architecture</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="S. Previdi" initials="S." role="editor" surname="Previdi"/>
            <author fullname="L. Ginsberg" initials="L." surname="Ginsberg"/>
            <author fullname="B. Decraene" initials="B." surname="Decraene"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="R. Shakir" initials="R." surname="Shakir"/>
            <date month="July" year="2018"/>
            <abstract>
              <t indent="0">Segment Routing (SR) leverages the source routing paradigm. A node steers a packet through an ordered list of instructions, called "segments". A segment can represent any instruction, topological or service based. A segment can have a semantic local to an SR node or global within an SR domain. SR provides a mechanism that allows a flow to be restricted to a specific topological path, while maintaining per-flow state only at the ingress node(s) to the SR domain.</t>
              <t indent="0">SR can be directly applied to the MPLS architecture with no change to the forwarding plane. A segment is encoded as an MPLS label. An ordered list of segments is encoded as a stack of labels. The segment to process is on the top of the stack. Upon completion of a segment, the related label is popped from the stack.</t>
              <t indent="0">SR can be applied to the IPv6 architecture, with a new type of routing header. A segment is encoded as an IPv6 address. An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing header. The active segment is indicated by the Destination Address (DA) of the packet. The next active segment is indicated by a pointer in the new routing header.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8402"/>
          <seriesInfo name="DOI" value="10.17487/RFC8402"/>
        </reference>
        <reference anchor="RFC9256" target="https://www.rfc-editor.org/info/rfc9256" quoteTitle="true" derivedAnchor="RFC9256">
          <front>
            <title>Segment Routing Policy Architecture</title>
            <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
            <author fullname="K. Talaulikar" initials="K." role="editor" surname="Talaulikar"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <author fullname="A. Bogdanov" initials="A." surname="Bogdanov"/>
            <author fullname="P. Mattes" initials="P." surname="Mattes"/>
            <date month="July" year="2022"/>
            <abstract>
              <t indent="0">Segment Routing (SR) allows a node to steer a packet flow along any path. Intermediate per-path states are eliminated thanks to source routing. SR Policy is an ordered list of segments (i.e., instructions) that represent a source-routed policy. Packet flows are steered into an SR Policy on a node where it is instantiated called a headend node. The packets steered into an SR Policy carry an ordered list of segments associated with that SR Policy.</t>
              <t indent="0">This document updates RFC 8402 as it details the concepts of SR Policy and steering into an SR Policy.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9256"/>
          <seriesInfo name="DOI" value="10.17487/RFC9256"/>
        </reference>
        <reference anchor="RFC9524" target="https://www.rfc-editor.org/info/rfc9524" quoteTitle="true" derivedAnchor="RFC9524">
          <front>
            <title>Segment Routing Replication for Multipoint Service Delivery</title>
            <author fullname="D. Voyer" initials="D." role="editor" surname="Voyer"/>
            <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
            <author fullname="R. Parekh" initials="R." surname="Parekh"/>
            <author fullname="H. Bidgoli" initials="H." surname="Bidgoli"/>
            <author fullname="Z. Zhang" initials="Z." surname="Zhang"/>
            <date month="February" year="2024"/>
            <abstract>
              <t indent="0">This document describes the Segment Routing Replication segment for multipoint service delivery. A Replication segment allows a packet to be replicated from a replication node to downstream nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9524"/>
          <seriesInfo name="DOI" value="10.17487/RFC9524"/>
        </reference>
      </references>
      <references pn="section-8.2">
        <name slugifiedName="name-informative-references">Informative References</name>
        <referencegroup anchor="BCP38" target="https://www.rfc-editor.org/info/bcp38" derivedAnchor="BCP38">
          <reference anchor="RFC2827" target="https://www.rfc-editor.org/info/rfc2827" quoteTitle="true">
            <front>
              <title>Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing</title>
              <author fullname="P. Ferguson" initials="P." surname="Ferguson"/>
              <author fullname="D. Senie" initials="D." surname="Senie"/>
              <date month="May" year="2000"/>
              <abstract>
                <t indent="0">This paper discusses a simple, effective, and straightforward method for using ingress traffic filtering to prohibit DoS (Denial of Service) attacks which use forged IP addresses to be propagated from 'behind' an Internet Service Provider's (ISP) aggregation point. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
              </abstract>
            </front>
            <seriesInfo name="BCP" value="38"/>
            <seriesInfo name="RFC" value="2827"/>
            <seriesInfo name="DOI" value="10.17487/RFC2827"/>
          </reference>
        </referencegroup>
        <reference anchor="I-D.ietf-idr-sr-p2mp-policy" target="https://datatracker.ietf.org/doc/html/draft-ietf-idr-sr-p2mp-policy-01" quoteTitle="true" derivedAnchor="P2MP-BGP">
          <front>
            <title>Advertising p2mp policies in BGP</title>
            <author fullname="Hooman Bidgoli"/>
            <author fullname="Daniel Voyer"/>
            <author fullname="Andrew Stone"/>
            <author fullname="Rishabh Parekh"/>
            <author fullname="Serge Krier"/>
            <author fullname="Swadesh Agrewal"/>
            <date day="29" month="April" year="2026"/>
            <abstract>
              <t indent="0">SR P2MP policies are set of policies that enable architecture for
   P2MP service delivery.</t>
              <t indent="0">A P2MP policy consists of candidate paths (CPs) that connects the
   Root of the Tree to a set of Leaves.  The P2MP policy is composed of
   replication segments [RFC9524].  A replication segment is a
   forwarding instruction for a candidate path which is downloaded to
   the Root, transit nodes and the leaves.</t>
              <t indent="0">This document specifies a new BGP SAFI with a new NLRI in order to
   advertise P2MP policy from a controller to a set of nodes.</t>
              <t indent="0">This document introduces three new route types within this NLRI, one
   for P2MP policy and its candidate paths that need to be programmed on
   the Root node, one for the replication segment incoming SID which
   uniquely will identify the replication state and another for each
   outgoing interface that the packets get replicated to.  The last two
   route types are forwarding instructions that needs to be programmed
   on the Root, and optionally on Transit and Leaf nodes.</t>
              <t indent="0">It should be noted that this document does not specify how the Root
   and the Leaves are discovered on the controller, it only describes
   how the P2MP Policy and Replication Segments are programmed from the
   controller to the nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-idr-sr-p2mp-policy-01"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="RFC4655" target="https://www.rfc-editor.org/info/rfc4655" quoteTitle="true" derivedAnchor="RFC4655">
          <front>
            <title>A Path Computation Element (PCE)-Based Architecture</title>
            <author fullname="A. Farrel" initials="A." surname="Farrel"/>
            <author fullname="J.-P. Vasseur" initials="J.-P." surname="Vasseur"/>
            <author fullname="J. Ash" initials="J." surname="Ash"/>
            <date month="August" year="2006"/>
            <abstract>
              <t indent="0">Constraint-based path computation is a fundamental building block for traffic engineering systems such as Multiprotocol Label Switching (MPLS) and Generalized Multiprotocol Label Switching (GMPLS) networks. Path computation in large, multi-domain, multi-region, or multi-layer networks is complex and may require special computational components and cooperation between the different network domains.</t>
              <t indent="0">This document specifies the architecture for a Path Computation Element (PCE)-based model to address this problem space. This document does not attempt to provide a detailed description of all the architectural components, but rather it describes a set of building blocks for the PCE architecture from which solutions may be constructed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4655"/>
          <seriesInfo name="DOI" value="10.17487/RFC4655"/>
        </reference>
        <reference anchor="RFC5286" target="https://www.rfc-editor.org/info/rfc5286" quoteTitle="true" derivedAnchor="RFC5286">
          <front>
            <title>Basic Specification for IP Fast Reroute: Loop-Free Alternates</title>
            <author fullname="A. Atlas" initials="A." role="editor" surname="Atlas"/>
            <author fullname="A. Zinin" initials="A." role="editor" surname="Zinin"/>
            <date month="September" year="2008"/>
            <abstract>
              <t indent="0">This document describes the use of loop-free alternates to provide local protection for unicast traffic in pure IP and MPLS/LDP networks in the event of a single failure, whether link, node, or shared risk link group (SRLG). The goal of this technology is to reduce the packet loss that happens while routers converge after a topology change due to a failure. Rapid failure repair is achieved through use of precalculated backup next-hops that are loop-free and safe to use until the distributed network convergence process completes. This simple approach does not require any support from other routers. The extent to which this goal can be met by this specification is dependent on the topology of the network. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5286"/>
          <seriesInfo name="DOI" value="10.17487/RFC5286"/>
        </reference>
        <reference anchor="RFC5715" target="https://www.rfc-editor.org/info/rfc5715" quoteTitle="true" derivedAnchor="RFC5715">
          <front>
            <title>A Framework for Loop-Free Convergence</title>
            <author fullname="M. Shand" initials="M." surname="Shand"/>
            <author fullname="S. Bryant" initials="S." surname="Bryant"/>
            <date month="January" year="2010"/>
            <abstract>
              <t indent="0">A micro-loop is a packet forwarding loop that may occur transiently among two or more routers in a hop-by-hop packet forwarding paradigm.</t>
              <t indent="0">This framework provides a summary of the causes and consequences of micro-loops and enables the reader to form a judgement on whether micro-looping is an issue that needs to be addressed in specific networks. It also provides a survey of the currently proposed mechanisms that may be used to prevent or to suppress the formation of micro-loops when an IP or MPLS network undergoes topology change due to failure, repair, or management action. When sufficiently fast convergence is not available and the topology is susceptible to micro-loops, use of one or more of these mechanisms may be desirable. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5715"/>
          <seriesInfo name="DOI" value="10.17487/RFC5715"/>
        </reference>
        <reference anchor="RFC8660" target="https://www.rfc-editor.org/info/rfc8660" quoteTitle="true" derivedAnchor="RFC8660">
          <front>
            <title>Segment Routing with the MPLS Data Plane</title>
            <author fullname="A. Bashandy" initials="A." role="editor" surname="Bashandy"/>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="B. Decraene" initials="B." surname="Decraene"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="R. Shakir" initials="R." surname="Shakir"/>
            <date month="December" year="2019"/>
            <abstract>
              <t indent="0">Segment Routing (SR) leverages the source-routing paradigm. A node steers a packet through a controlled set of instructions, called segments, by prepending the packet with an SR header. In the MPLS data plane, the SR header is instantiated through a label stack. This document specifies the forwarding behavior to allow instantiating SR over the MPLS data plane (SR-MPLS).</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8660"/>
          <seriesInfo name="DOI" value="10.17487/RFC8660"/>
        </reference>
        <reference anchor="RFC8754" target="https://www.rfc-editor.org/info/rfc8754" quoteTitle="true" derivedAnchor="RFC8754">
          <front>
            <title>IPv6 Segment Routing Header (SRH)</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="D. Dukes" initials="D." role="editor" surname="Dukes"/>
            <author fullname="S. Previdi" initials="S." surname="Previdi"/>
            <author fullname="J. Leddy" initials="J." surname="Leddy"/>
            <author fullname="S. Matsushima" initials="S." surname="Matsushima"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <date month="March" year="2020"/>
            <abstract>
              <t indent="0">Segment Routing can be applied to the IPv6 data plane using a new type of Routing Extension Header called the Segment Routing Header (SRH). This document describes the SRH and how it is used by nodes that are Segment Routing (SR) capable.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8754"/>
          <seriesInfo name="DOI" value="10.17487/RFC8754"/>
        </reference>
        <reference anchor="RFC8986" target="https://www.rfc-editor.org/info/rfc8986" quoteTitle="true" derivedAnchor="RFC8986">
          <front>
            <title>Segment Routing over IPv6 (SRv6) Network Programming</title>
            <author fullname="C. Filsfils" initials="C." role="editor" surname="Filsfils"/>
            <author fullname="P. Camarillo" initials="P." role="editor" surname="Camarillo"/>
            <author fullname="J. Leddy" initials="J." surname="Leddy"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <author fullname="S. Matsushima" initials="S." surname="Matsushima"/>
            <author fullname="Z. Li" initials="Z." surname="Li"/>
            <date month="February" year="2021"/>
            <abstract>
              <t indent="0">The Segment Routing over IPv6 (SRv6) Network Programming framework enables a network operator or an application to specify a packet processing program by encoding a sequence of instructions in the IPv6 packet header.</t>
              <t indent="0">Each instruction is implemented on one or several nodes in the network and identified by an SRv6 Segment Identifier in the packet.</t>
              <t indent="0">This document defines the SRv6 Network Programming concept and specifies the base set of SRv6 behaviors that enables the creation of interoperable overlays with underlay optimization.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8986"/>
          <seriesInfo name="DOI" value="10.17487/RFC8986"/>
        </reference>
        <reference anchor="RFC9573" target="https://www.rfc-editor.org/info/rfc9573" quoteTitle="true" derivedAnchor="RFC9573">
          <front>
            <title>MVPN/EVPN Tunnel Aggregation with Common Labels</title>
            <author fullname="Z. Zhang" initials="Z." surname="Zhang"/>
            <author fullname="E. Rosen" initials="E." surname="Rosen"/>
            <author fullname="W. Lin" initials="W." surname="Lin"/>
            <author fullname="Z. Li" initials="Z." surname="Li"/>
            <author fullname="IJ. Wijnands" initials="IJ." surname="Wijnands"/>
            <date month="May" year="2024"/>
            <abstract>
              <t indent="0">The Multicast VPN (MVPN) specifications allow a single Point-to-Multipoint (P2MP) tunnel to carry traffic of multiple IP VPNs (referred to as VPNs in this document). The EVPN specifications allow a single P2MP tunnel to carry traffic of multiple Broadcast Domains (BDs). These features require the ingress router of the P2MP tunnel to allocate an upstream-assigned MPLS label for each VPN or for each BD. A packet sent on a P2MP tunnel then carries the label that is mapped to its VPN or BD (in some cases, a distinct upstream-assigned label is needed for each flow.) Since each ingress router allocates labels independently, with no coordination among the ingress routers, the egress routers may need to keep track of a large number of labels. The number of labels may need to be as large as, or larger than, the product of the number of ingress routers times the number of VPNs or BDs. However, the number of labels can be greatly reduced if the association between a label and a VPN or BD is made by provisioning, so that all ingress routers assign the same label to a particular VPN or BD. New procedures are needed in order to take advantage of such provisioned labels. These new procedures also apply to Multipoint-to-Multipoint (MP2MP) tunnels. This document updates RFCs 6514, 7432, and 7582 by specifying the necessary procedures.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9573"/>
          <seriesInfo name="DOI" value="10.17487/RFC9573"/>
        </reference>
        <reference anchor="RFC9855" target="https://www.rfc-editor.org/info/rfc9855" quoteTitle="true" derivedAnchor="RFC9855">
          <front>
            <title>Topology Independent Fast Reroute Using Segment Routing</title>
            <author fullname="A. Bashandy" initials="A." surname="Bashandy"/>
            <author fullname="S. Litkowski" initials="S." surname="Litkowski"/>
            <author fullname="C. Filsfils" initials="C." surname="Filsfils"/>
            <author fullname="P. Francois" initials="P." surname="Francois"/>
            <author fullname="B. Decraene" initials="B." surname="Decraene"/>
            <author fullname="D. Voyer" initials="D." surname="Voyer"/>
            <date month="October" year="2025"/>
            <abstract>
              <t indent="0">This document presents Topology Independent Loop-Free Alternate (TI-LFA) Fast Reroute (FRR), which is aimed at providing protection of node and Adjacency segments within the Segment Routing (SR) framework. This FRR behavior builds on proven IP FRR concepts being LFAs, Remote LFAs (RLFAs), and Directed Loop-Free Alternates (DLFAs). It extends these concepts to provide guaranteed coverage in any two-connected networks using a link-state IGP. An important aspect of TI-LFA is the FRR path selection approach establishing protection over the expected post-convergence paths from the Point of Local Repair (PLR), reducing the operational need to control the tie-breaks among various FRR options.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9855"/>
          <seriesInfo name="DOI" value="10.17487/RFC9855"/>
        </reference>
        <reference anchor="I-D.bashandy-rtgwg-segment-routing-uloop" target="https://datatracker.ietf.org/doc/html/draft-bashandy-rtgwg-segment-routing-uloop-18" quoteTitle="true" derivedAnchor="SR-LOOP">
          <front>
            <title>Loop avoidance using Segment Routing</title>
            <author fullname="Ahmed Bashandy"/>
            <author fullname="Clarence Filsfils"/>
            <author fullname="Stephane Litkowski"/>
            <author fullname="Bruno Decraene"/>
            <author fullname="Pierre Francois"/>
            <author fullname="Peter Psenak"/>
            <date day="19" month="April" year="2026"/>
            <abstract>
              <t indent="0">This document presents a mechanism aimed at providing loop avoidance
in the case of IGP network convergence event.  The solution relies on
the temporary use of SR policies ensuring loop-freeness over the
post-convergence paths from the converging node to the destination.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bashandy-rtgwg-segment-routing-uloop-18"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.ietf-pce-sr-p2mp-policy" target="https://datatracker.ietf.org/doc/html/draft-ietf-pce-sr-p2mp-policy-14" quoteTitle="true" derivedAnchor="SR-P2MP-PCEP">
          <front>
            <title>PCEP extensions for SR P2MP Policy</title>
            <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli">
              <organization showOnFrontPage="true">Nokia</organization>
            </author>
            <author fullname="Daniel Voyer" initials="D." surname="Voyer">
              <organization showOnFrontPage="true">Cisco Systems</organization>
            </author>
            <author fullname="Anuj Budhiraja" initials="A." surname="Budhiraja">
              <organization showOnFrontPage="true">Cisco System</organization>
            </author>
            <author fullname="Rishabh Parekh (editor)" initials="R." surname="Parekh">
              <organization showOnFrontPage="true">Arrcus</organization>
            </author>
            <author fullname="Siva Sivabalan" initials="S." surname="Sivabalan">
              <organization showOnFrontPage="true">Ciena</organization>
            </author>
            <date day="23" month="February" year="2026"/>
            <abstract>
              <t indent="0">Segment Routing (SR) Point-to-Multipoint (P2MP) Policies are a set of policies that enable architecture for P2MP service delivery. This document specifies extensions to the Path Computation Element Communication Protocol (PCEP) that allow a stateful PCE to compute and initiate P2MP paths from a Root to a set of Leaf nodes.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-pce-sr-p2mp-policy-14"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.hb-spring-sr-p2mp-policy-yang" target="https://datatracker.ietf.org/doc/html/draft-hb-spring-sr-p2mp-policy-yang-02" quoteTitle="true" derivedAnchor="SR-P2MP-YANG">
          <front>
            <title>YANG Data Model for p2mp sr policy</title>
            <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli">
              <organization showOnFrontPage="true">Nokia</organization>
            </author>
            <author fullname="Daniel Voyer" initials="D." surname="Voyer">
              <organization showOnFrontPage="true">Bell Canada</organization>
            </author>
            <author fullname="Rishabh Parekh" initials="R." surname="Parekh">
              <organization showOnFrontPage="true">Cisco System</organization>
            </author>
            <author fullname="Tarek Saad" initials="T." surname="Saad">
              <organization showOnFrontPage="true">Juniper Networks</organization>
            </author>
            <author fullname="Tanmoy Kundu" initials="T." surname="Kundu">
              <organization showOnFrontPage="true">Nokia</organization>
            </author>
            <date day="30" month="October" year="2020"/>
            <abstract>
              <t indent="0">SR P2MP policies are set of policies that enable architecture for P2MP service delivery. This document defines a YANG data model for SR P2MP Policy Configuration and operation.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-hb-spring-sr-p2mp-policy-yang-02"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
        <reference anchor="I-D.filsfils-spring-sr-policy-considerations" target="https://datatracker.ietf.org/doc/html/draft-filsfils-spring-sr-policy-considerations-09" quoteTitle="true" derivedAnchor="SR-POLICY">
          <front>
            <title>SR Policy Implementation and Deployment Considerations</title>
            <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
              <organization showOnFrontPage="true">Cisco Systems</organization>
            </author>
            <author fullname="Ketan Talaulikar" initials="K." surname="Talaulikar">
              <organization showOnFrontPage="true">Arrcus Inc</organization>
            </author>
            <author fullname="Przemysław Gniewomir Król" initials="P. G." surname="Król">
              <organization showOnFrontPage="true">Google, Inc.</organization>
            </author>
            <author fullname="Martin Horneffer" initials="M." surname="Horneffer">
              <organization showOnFrontPage="true">Deutsche Telekom</organization>
            </author>
            <author fullname="Paul Mattes" initials="P." surname="Mattes">
              <organization showOnFrontPage="true">Microsoft</organization>
            </author>
            <date day="24" month="April" year="2022"/>
            <abstract>
              <t indent="0">Segment Routing (SR) allows a headend node to steer a packet flow along any path. Intermediate per-flow states are eliminated thanks to source routing. SR Policy framework enables the instantiation and the management of necessary state on the headend node for flows along a source routed paths using an ordered list of segments associated with their specific SR Policies. This document describes some of the implementation and deployment aspects that are useful for operationalizing the SR Policy architecture.</t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-filsfils-spring-sr-policy-considerations-09"/>
          <refcontent>Work in Progress</refcontent>
        </reference>
      </references>
    </references>
    <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a">
      <name slugifiedName="name-illustration-of-the-sr-p2mp">Illustration of the SR P2MP Policy and P2MP Tree</name>
      <t indent="0" pn="section-appendix.a-1">Consider the following topology:</t>
      <figure align="left" suppress-title="false" pn="figure-1">
        <name slugifiedName="name-sr-topology">SR Topology</name>
        <artwork name="SR_Topology" align="center" alt="" pn="section-appendix.a-2.1">
             R3------R6
Controller--/         \
    R1----R2----R5-----R7
            \         /
             +--R4---+</artwork>
      </figure>
      <t indent="0" pn="section-appendix.a-3">In these examples, the Node-SID of a node Rn is N-SIDn and
      the Adjacency-SID from node Rm to node Rn is A-SIDmn. The interface between Rm
      and Rn is Lmn.</t>
      <t indent="0" pn="section-appendix.a-4">For SRv6, the reader is expected to be familiar with SRv6 Network
      Programming <xref target="RFC8986" format="default" sectionFormat="of" derivedContent="RFC8986"/> to follow the examples.</t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-5">
        <li pn="section-appendix.a-5.1">
          <t indent="0" pn="section-appendix.a-5.1.1">2001:db8::/32 is an IPv6 block allocated by a Regional Internet Registry (RIR) to the
          operator.</t>
        </li>
        <li pn="section-appendix.a-5.2">
          <t indent="0" pn="section-appendix.a-5.2.1">2001:db8:0::/48 is dedicated to the internal address space.</t>
        </li>
        <li pn="section-appendix.a-5.3">
          <t indent="0" pn="section-appendix.a-5.3.1">2001:db8:cccc::/48 is dedicated to the internal SRv6 SID
          space.</t>
        </li>
        <li pn="section-appendix.a-5.4">
          <t indent="0" pn="section-appendix.a-5.4.1">We assume a location is expressed in 64 bits and a function is
          expressed in 16 bits.</t>
        </li>
        <li pn="section-appendix.a-5.5">
          <t indent="0" pn="section-appendix.a-5.5.1">Node k has a classic IPv6 loopback address 2001:db8::k/128, which
          is advertised in the IGP.</t>
        </li>
        <li pn="section-appendix.a-5.6">
          <t indent="0" pn="section-appendix.a-5.6.1">Node k has 2001:db8:cccc:k::/64 for its local SID space. Its SIDs
          will be explicitly assigned from that block.</t>
        </li>
        <li pn="section-appendix.a-5.7">
          <t indent="0" pn="section-appendix.a-5.7.1">Node k advertises 2001:db8:cccc:k::/64 in its IGP.</t>
        </li>
        <li pn="section-appendix.a-5.8">
          <t indent="0" pn="section-appendix.a-5.8.1">Function :1:: (function 1, for short) represents the End function
          with Penultimate Segment Pop (PSP) support.</t>
        </li>
        <li pn="section-appendix.a-5.9">
          <t indent="0" pn="section-appendix.a-5.9.1">Function :Cn:: (function Cn, for short) represents the End.X
          function to node n.</t>
        </li>
        <li pn="section-appendix.a-5.10">
          <t indent="0" pn="section-appendix.a-5.10.1">Function :C1n: (function C1n for short) represents the End.X
          function to node n with Ultimate Segment Decapsulation (USD).</t>
        </li>
      </ul>
      <t indent="0" pn="section-appendix.a-6">Each node k has: </t>
      <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a-7">
        <li pn="section-appendix.a-7.1">
          <t indent="0" pn="section-appendix.a-7.1.1">An explicit SID instantiation 2001:db8:cccc:k:1::/128 bound to an
          End function with additional support for PSP</t>
        </li>
        <li pn="section-appendix.a-7.2">
          <t indent="0" pn="section-appendix.a-7.2.1">An explicit SID instantiation 2001:db8:cccc:k:Cj::/128 bound to
          an End.X function to neighbor J with additional support for PSP</t>
        </li>
        <li pn="section-appendix.a-7.3">
          <t indent="0" pn="section-appendix.a-7.3.1">An explicit SID instantiation 2001:db8:cccc:k:C1j::/128 bound to
          an End.X function to neighbor J with additional support for USD</t>
        </li>
      </ul>
      <t indent="0" pn="section-appendix.a-8">Assume a controller is provisioned with the following SR P2MP Policy at
      Root R1 with Tree-ID T-ID:</t>
      <artwork name="" type="" align="left" alt="" pn="section-appendix.a-9">
SR P2MP Policy &lt;R1,T-ID&gt;:
 Leaf nodes: {R2, R6, R7}
 candidate-path 1:
   Optimize: IGP metric
   Tree-SID: T-SID1
</artwork>
      <t indent="0" pn="section-appendix.a-10">The controller is responsible for computing a PTI of the CP.
      In this example, we assume one active PTI with Instance-ID I-ID1.
      Assume the controller instantiates PTIs by signaling Replication
      segments, i.e., the Replication-ID of these Replication segments is &lt;Root,
      Tree-ID, Instance-ID&gt;. All Replication segments use the Tree-SID
      T-SID1 as the Replication-SID. For SRv6, assume the Replication-SID at node
      k, bound to an End.Replicate function, is 2001:db8:cccc:k:fa::/128.</t>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.1">
        <name slugifiedName="name-p2mp-tree-with-non-adjacent">P2MP Tree with Non-Adjacent Replication Segments</name>
        <t indent="0" pn="section-appendix.a.1-1">Assume the controller computes a PTI with Root node R1,
        Intermediate and Leaf node R2, and Leaf nodes R6 and R7. The
        controller instantiates the instance by stitching Replication segments
        at R1, R2, R6, and R7. The Replication segment at R1 replicates to R2.
        The Replication segment at R2 replicates to R6 and R7. Note that nodes R3, R4,
        and R5 do not have any Replication segment state for the tree.</t>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.1.1">
          <name slugifiedName="name-sr-mpls">SR-MPLS</name>
          <t indent="0" pn="section-appendix.a.1.1-1">The Replication segment state at nodes R1, R2, R6, and R7 is shown
          below.</t>
          <t indent="0" pn="section-appendix.a.1.1-2">Replication segment at R1:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.1-3">
Replication segment &lt;R1,T-ID,I-ID1,R1&gt;:
 Replication-SID: T-SID1
 Replication State:
   R2: &lt;T-SID1-&gt;L12&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.1-4">Replication to R2 steers a packet directly to the node on
          interface L12.</t>
          <t indent="0" pn="section-appendix.a.1.1-5">Replication segment at R2:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.1-6">
Replication segment &lt;R1,T-ID,I-ID1,R2&gt;:
 Replication-SID: T-SID1
 Replication State:
   R2: &lt;Leaf&gt;
   R6: &lt;N-SID6, T-SID1&gt;
   R7: &lt;N-SID7, T-SID1&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.1-7">R2 is a Bud node. It performs the role of a Leaf as well as a transit
          node replicating to R6 and R7. Replication to R6, using N-SID6,
          steers a packet via IGP shortest path to that node. Replication to
          R7, using N-SID7, steers a packet via IGP shortest path to R7 via
          either R5 or R4 based on ECMP hashing.</t>
          <t indent="0" pn="section-appendix.a.1.1-8">Replication segment at R6:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.1-9">
Replication segment &lt;R1,T-ID,I-ID1,R6&gt;:
 Replication-SID: T-SID1
 Replication State:
   R6: &lt;Leaf&gt;</artwork>
          <t keepWithNext="true" indent="0" pn="section-appendix.a.1.1-10">Replication segment at R7:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.1-11">
Replication segment &lt;R1,T-ID,I-ID1,R7&gt;:
 Replication-SID: T-SID1
 Replication State:
   R7: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.1-12">When a packet is steered into the active instance CP
          1 of the SR P2MP Policy at R1:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a.1.1-13">
            <li pn="section-appendix.a.1.1-13.1">
              <t indent="0" pn="section-appendix.a.1.1-13.1.1">Since R1 is directly connected to R2, R1 performs the PUSH
              operation with just the &lt;T-SID1&gt; label for the replicated copy
              and sends it to R2 on interface L12.</t>
            </li>
            <li pn="section-appendix.a.1.1-13.2">
              <t indent="0" pn="section-appendix.a.1.1-13.2.1">R2, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload. For replication to R6, R2 performs a PUSH
              operation of N-SID6 to send the &lt;N-SID6,T-SID1&gt; label stack
              to R3. R3 is the penultimate hop for N-SID6; it performs
              PHP, which corresponds to the NEXT operation,
              and the packet is then sent to R6 with &lt;T-SID1&gt; in the
              label stack. For replication to R7, R2 performs a PUSH operation
              of N-SID7 to send the &lt;N-SID7,T-SID1&gt; label stack to R4, which is one
              of the IGP ECMP next hops (R5 is other) towards R7. R4 is the penultimate hop for
              N-SID7; it performs PHP, which corresponds
              to the NEXT operation, and the packet is then sent to R7 with
              &lt;T-SID1&gt; in the label stack.</t>
            </li>
            <li pn="section-appendix.a.1.1-13.3">
              <t indent="0" pn="section-appendix.a.1.1-13.3.1">R6, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload.</t>
            </li>
            <li pn="section-appendix.a.1.1-13.4">
              <t indent="0" pn="section-appendix.a.1.1-13.4.1">R7, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload.</t>
            </li>
          </ul>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.1.2">
          <name slugifiedName="name-srv6">SRv6</name>
          <t indent="0" pn="section-appendix.a.1.2-1">For SRv6, the replicated packet from R2 to R7 has to traverse R4
          using an SR Policy, Policy27. The policy has one SID in the segment
          list: End.X function with USD of R4 to R7. The Replication segment
          state at nodes R1, R2, R6, and R7 is shown below.</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.2-2">
Policy27: &lt;2001:db8:cccc:4:c17::&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.2-3">Replication segment at R1:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.2-4">
Replication segment &lt;R1,T-ID,I-ID1,R1&gt;:
 Replication-SID: 2001:db8:cccc:1:fa::
 Replication State:
   R2: &lt;2001:db8:cccc:2:fa::-&gt;L12&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.2-5">Replication to R2 steers a packet directly to the node on
          interface L12.</t>
          <t keepWithNext="true" indent="0" pn="section-appendix.a.1.2-6">Replication segment at R2:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.2-7">
Replication segment &lt;R1,T-ID,I-ID1,R2&gt;:
 Replication-SID: 2001:db8:cccc:2:fa::
 Replication State:
   R2: &lt;Leaf&gt;
   R6: &lt;2001:db8:cccc:6:fa::&gt;
   R7: &lt;2001:db8:cccc:7:fa:: -&gt; Policy27&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.2-8">R2 is a Bud node. It performs the role of a Leaf as well as a transit
          node replicating to R6 and R7. Replication to R6 steers a packet
          via IGP shortest path to that node. Replication to R7, via an SR
          Policy, first encapsulates the packet using H.Encaps and then steers
          the outer packet to R4. End.X USD on R4 decapsulates the outer header
          and sends the original inner packet to R7.</t>
          <t indent="0" pn="section-appendix.a.1.2-9">Replication segment at R6:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.2-10">
Replication segment &lt;R1,T-ID,I-ID1,R6&gt;:
 Replication-SID: 2001:db8:cccc:6:fa::
 Replication State:
   R6: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.2-11">Replication segment at R7:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.1.2-12">
Replication segment &lt;R1,T-ID,I-ID1,R7&gt;:
 Replication-SID: 2001:db8:cccc:7:fa::
 Replication State:
   R7: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.1.2-13">When a packet (A,B2) is steered into the active instance of
          CP 1 of the SR P2MP Policy at R1 using H.Encaps.Replicate
          behavior:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a.1.2-14">
            <li pn="section-appendix.a.1.2-14.1">
              <t indent="0" pn="section-appendix.a.1.2-14.1.1">Since R1 is directly connected to R2, R1 sends the replicated
              copy (2001:db8::1, 2001:db8:cccc:2:fa::) (A,B2) to R2 on
              interface L12.</t>
            </li>
            <li pn="section-appendix.a.1.2-14.2">
              <t indent="0" pn="section-appendix.a.1.2-14.2.1">R2, as a Leaf, removes the outer IPv6 header and delivers the
              payload. R2, as a Bud node, also replicates the packet.</t>
            </li>
            <li pn="section-appendix.a.1.2-14.3">
              <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a.1.2-14.3.1">
                <li pn="section-appendix.a.1.2-14.3.1.1">
                  <t indent="0" pn="section-appendix.a.1.2-14.3.1.1.1">For replication to R6, R2 sends (2001:db8::1,
                  2001:db8:cccc:6:fa::) (A,B2) to R3. R3 forwards the packet
                  using the 2001:db8:cccc:6::/64 packet to R6.</t>
                </li>
                <li pn="section-appendix.a.1.2-14.3.1.2">
                  <t indent="0" pn="section-appendix.a.1.2-14.3.1.2.1">For replication to R7 using Policy27, R2 encapsulates and
                  sends (2001:db8::2, 2001:db8:cccc:4:C17::) (2001:db8::1,
                  2001:db8:cccc:7:fa::) (A,B2) to R4. R4 performs End.X USD
                  behavior, decapsulates the outer IPv6 header, and sends
                  (2001:db8::1, 2001:db8:cccc:7:fa::) (A,B2) to R7.</t>
                </li>
              </ul>
            </li>
            <li pn="section-appendix.a.1.2-14.4">
              <t indent="0" pn="section-appendix.a.1.2-14.4.1">R6, as a Leaf, removes the outer IPv6 header and delivers the
              payload.</t>
            </li>
            <li pn="section-appendix.a.1.2-14.5">
              <t indent="0" pn="section-appendix.a.1.2-14.5.1">R7, as a Leaf, removes the outer IPv6 header and delivers the
              payload.</t>
            </li>
          </ul>
        </section>
      </section>
      <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.2">
        <name slugifiedName="name-p2mp-tree-with-adjacent-rep">P2MP Tree with Adjacent Replication Segments</name>
        <t indent="0" pn="section-appendix.a.2-1">Assume the controller computes a PTI with Root node R1,
        Intermediate and Leaf node R2, Intermediate nodes R3 and R5, and Leaf
        nodes R6 and R7. The controller instantiates the PTI by stitching
        Replication segments at R1, R2, R3, R5, R6, and R7. The Replication segment
        at R1 replicates to R2. The Replication segment at R2 replicates to R3 and
        R5. The Replication segment at R3 replicates to R6. The Replication segment at
        R5 replicates to R7. Note that node R4 does not have any Replication
        segment state for the tree.</t>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.2.1">
          <name slugifiedName="name-sr-mpls-2">SR-MPLS</name>
          <t indent="0" pn="section-appendix.a.2.1-1">The Replication segment state at nodes R1, R2, R3, R5, R6, and R7
          is shown below.</t>
          <t indent="0" pn="section-appendix.a.2.1-2">Replication segment at R1:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-3">
Replication segment &lt;R1,T-ID,I-ID1,R1&gt;:
 Replication-SID: T-SID1
 Replication State:
   R2: &lt;T-SID1-&gt;L12&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-4">Replication to R2 steers a packet directly to the node on
          interface L12.</t>
          <t indent="0" pn="section-appendix.a.2.1-5">Replication segment at R2:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-6">
Replication segment &lt;R1,T-ID,I-ID1,R2&gt;:
 Replication-SID: T-SID1
 Replication State:
   R2: &lt;Leaf&gt;
   R3: &lt;T-SID1-&gt;L23&gt;
   R5: &lt;T-SID1-&gt;L25&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-7">R2 is a Bud node. It performs the role of a Leaf as well as a transit
          node replicating to R3 and R5. Replication to R3 steers a packet
          directly to the node on L23. Replication to R5 steers a packet
          directly to the node on L25.</t>
          <t indent="0" pn="section-appendix.a.2.1-8">Replication segment at R3:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-9">
Replication segment &lt;R1,T-ID,I-ID1,R3&gt;:
 Replication-SID: T-SID1
 Replication State:
   R6: &lt;T-SID1-&gt;L36&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-10">Replication to R6 steers a packet directly to the node on
          L36.</t>
          <t keepWithNext="true" indent="0" pn="section-appendix.a.2.1-11">Replication segment at R5:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-12">
Replication segment &lt;R1,T-ID,I-ID1,R5&gt;:
 Replication-SID: T-SID1
 Replication State:
   R7: &lt;T-SID1-&gt;L57&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-13">Replication to R7 steers a packet directly to the node on
          L57.</t>
          <t indent="0" pn="section-appendix.a.2.1-14">Replication segment at R6:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-15">
Replication segment &lt;R1,T-ID,I-ID1,R6&gt;:
 Replication-SID: T-SID1
 Replication State:
   R6: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-16">Replication segment at R7:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.1-17">
Replication segment &lt;R1,T-ID,I-ID1,R7&gt;:
 Replication-SID: T-SID1
 Replication State:
   R7: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.1-18">When a packet is steered into the SR P2MP Policy at R1:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a.2.1-19">
            <li pn="section-appendix.a.2.1-19.1">
              <t indent="0" pn="section-appendix.a.2.1-19.1.1">Since R1 is directly connected to R2, R1 performs the PUSH
              operation with just the &lt;T-SID1&gt; label for the replicated copy
              and sends it to R2 on interface L12.</t>
            </li>
            <li pn="section-appendix.a.2.1-19.2">
              <t indent="0" pn="section-appendix.a.2.1-19.2.1">R2, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload. It also performs the PUSH operation on T-SID1
              for replication to R3 and R5. For replication to R6, R2 sends 
              the &lt;T-SID1&gt; label stack to R3 on interface L23. For
              replication to R5, R2 sends the &lt;T-SID1&gt; label stack to R5 on
              interface L25.</t>
            </li>
            <li pn="section-appendix.a.2.1-19.3">
              <t indent="0" pn="section-appendix.a.2.1-19.3.1">R3 performs the NEXT operation on T-SID1, performs a PUSH
              operation for replication to R6, and sends the &lt;T-SID1&gt; label
              stack to R6 on interface L36.</t>
            </li>
            <li pn="section-appendix.a.2.1-19.4">
              <t indent="0" pn="section-appendix.a.2.1-19.4.1">R5 performs the NEXT operation on T-SID1, performs a PUSH
              operation for replication to R7, and sends the &lt;T-SID1&gt; label
              stack to R7 on interface L57.</t>
            </li>
            <li pn="section-appendix.a.2.1-19.5">
              <t indent="0" pn="section-appendix.a.2.1-19.5.1">R6, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload.</t>
            </li>
            <li pn="section-appendix.a.2.1-19.6">
              <t indent="0" pn="section-appendix.a.2.1-19.6.1">R7, as a Leaf, performs the NEXT operation, pops the T-SID1 label, and
              delivers the payload.</t>
            </li>
          </ul>
        </section>
        <section numbered="true" toc="include" removeInRFC="false" pn="section-appendix.a.2.2">
          <name slugifiedName="name-srv6-2">SRv6</name>
          <t indent="0" pn="section-appendix.a.2.2-1">The Replication segment state at nodes R1, R2, R3, R5, R6, and R7
          is shown below.</t>
          <t keepWithNext="true" indent="0" pn="section-appendix.a.2.2-2">Replication segment at R1:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-3">
Replication segment &lt;R1,T-ID,I-ID1,R1&gt;:
 Replication-SID: 2001:db8:cccc:1:fa::
 Replication State:
   R2: &lt;2001:db8:cccc:2:fa::-&gt;L12&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-4">Replication to R2 steers a packet directly to the node on
          interface L12.</t>
          <t indent="0" pn="section-appendix.a.2.2-5">Replication segment at R2:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-6">
Replication segment &lt;R1,T-ID,I-ID1,R2&gt;:
 Replication-SID: 2001:db8:cccc:2:fa::
 Replication State:
   R2: &lt;Leaf&gt;
   R3: &lt;2001:db8:cccc:3:fa::-&gt;L23&gt;
   R5: &lt;2001:db8:cccc:5:fa::-&gt;L25&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-7">R2 is a Bud node. It performs the role of a Leaf as well as a transit
          node replicating to R3 and R5. Replication to R3 steers a packet
          directly to the node on L23. Replication to R5 steers a packet
          directly to the node on L25.</t>
          <t indent="0" pn="section-appendix.a.2.2-8">Replication segment at R3:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-9">
Replication segment &lt;R1,T-ID,I-ID1,R3&gt;:
 Replication-SID: 2001:db8:cccc:3:fa::
 Replication State:
   R6: &lt;2001:db8:cccc:6:fa::-&gt;L36&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-10">Replication to R6 steers a packet directly to the node on
          L36.</t>
          <t indent="0" pn="section-appendix.a.2.2-11">Replication segment at R5:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-12">
Replication segment &lt;R1,T-ID,I-ID1,R5&gt;:
 Replication-SID: 2001:db8:cccc:5:fa::
 Replication State:
   R7: &lt;2001:db8:cccc:7:fa::-&gt;L57&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-13">Replication to R7 steers a packet directly to the node on
          L57.</t>
          <t indent="0" pn="section-appendix.a.2.2-14">Replication segment at R6:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-15">
Replication segment &lt;R1,T-ID,I-ID1,R6&gt;:
 Replication-SID: 2001:db8:cccc:6:fa::
 Replication State:
   R6: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-16">Replication segment at R7:</t>
          <artwork name="" type="" align="left" alt="" pn="section-appendix.a.2.2-17">
Replication segment &lt;R1,T-ID,I-ID1,R7&gt;:
 Replication-SID: 2001:db8:cccc:7:fa::
 Replication State:
   R7: &lt;Leaf&gt;</artwork>
          <t indent="0" pn="section-appendix.a.2.2-18">When a packet (A,B2) is steered into the active instance of
          CP 1 of the SR P2MP Policy at R1 using the H.Encaps.Replicate
          behavior:</t>
          <ul spacing="normal" bare="false" empty="false" indent="3" pn="section-appendix.a.2.2-19">
            <li pn="section-appendix.a.2.2-19.1">
              <t indent="0" pn="section-appendix.a.2.2-19.1.1">Since R1 is directly connected to R2, R1 sends the replicated
              copy (2001:db8::1, 2001:db8:cccc:2:fa::) (A,B2) to R2 on
              interface L12.</t>
            </li>
            <li pn="section-appendix.a.2.2-19.2">
              <t indent="0" pn="section-appendix.a.2.2-19.2.1">R2, as a Leaf, removes the outer IPv6 header and delivers the
              payload. R2, as a Bud node, also replicates the packet. For
              replication to R3, R2 sends (2001:db8::1, 2001:db8:cccc:3:fa::)
              (A,B2) to R3 on interface L23. For replication to R5, R2 sends
              (2001:db8::1, 2001:db8:cccc:5:fa::) (A,B2) to R5 on interface
              L25.</t>
            </li>
            <li pn="section-appendix.a.2.2-19.3">
              <t indent="0" pn="section-appendix.a.2.2-19.3.1">R3 replicates and sends (2001:db8::1, 2001:db8:cccc:6:fa::)
              (A,B2) to R6 on interface L36.</t>
            </li>
            <li pn="section-appendix.a.2.2-19.4">
              <t indent="0" pn="section-appendix.a.2.2-19.4.1">R5 replicates and sends (2001:db8::1, 2001:db8:cccc:7:fa::)
              (A,B2) to R7 on interface L57.</t>
            </li>
            <li pn="section-appendix.a.2.2-19.5">
              <t indent="0" pn="section-appendix.a.2.2-19.5.1">R6, as a Leaf, removes the outer IPv6 header and delivers the
              payload.</t>
            </li>
            <li pn="section-appendix.a.2.2-19.6">
              <t indent="0" pn="section-appendix.a.2.2-19.6.1">R7, as a Leaf, removes the outer IPv6 header and delivers the
              payload.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="Acknowledgements" numbered="false" toc="include" removeInRFC="false" pn="section-appendix.b">
      <name slugifiedName="name-acknowledgements">Acknowledgements</name>
      <t indent="0" pn="section-appendix.b-1">The authors would like to acknowledge <contact fullname="Siva Sivabalan"/>, <contact fullname="Mike Koldychev"/>,
      and <contact fullname="Vishnu Pavan Beeram"/> for their valuable input.</t>
    </section>
    <section numbered="false" toc="include" removeInRFC="false" pn="section-appendix.c">
      <name slugifiedName="name-contributors">Contributors</name>
      <contact fullname="Clayton Hassen">
        <organization showOnFrontPage="true">Bell Canada</organization>
        <address>
          <postal>
            <city>Vancouver</city>
            <country>Canada</country>
          </postal>
          <email>clayton.hassen@bell.ca</email>
        </address>
      </contact>
      <contact fullname="Kurtis Gillis">
        <organization showOnFrontPage="true">Bell Canada</organization>
        <address>
          <postal>
            <city>Halifax</city>
            <country>Canada</country>
          </postal>
          <email>kurtis.gillis@bell.ca</email>
        </address>
      </contact>
      <contact fullname="Arvind Venkateswaran">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <city>San Jose</city>
            <country>United States of America</country>
          </postal>
          <email>arvvenka@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Zafar Ali">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <country>United States of America</country>
          </postal>
          <email>zali@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Swadesh Agrawal">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <city>San Jose</city>
            <country>United States of America</country>
          </postal>
          <email>swaagraw@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Jayant Kotalwar">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <postal>
            <city>Mountain View</city>
            <country>United States of America</country>
          </postal>
          <email>jayant.kotalwar@nokia.com</email>
        </address>
      </contact>
      <contact fullname="Tanmoy Kundu">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <postal>
            <city>Mountain View</city>
            <country>United States of America</country>
          </postal>
          <email>tanmoy.kundu@nokia.com</email>
        </address>
      </contact>
      <contact fullname="Andrew Stone">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <postal>
            <city>Ottawa</city>
            <country>Canada</country>
          </postal>
          <email>andrew.stone@nokia.com</email>
        </address>
      </contact>
      <contact fullname="Tarek Saad">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <postal>
            <country>Canada</country>
          </postal>
          <email>tsaad@juniper.net</email>
        </address>
      </contact>
      <contact fullname="Kamran Raza">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <country>Canada</country>
          </postal>
          <email>skraza@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Anuj Budhiraja">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <country>United States of America</country>
          </postal>
          <email>abudhira@cisco.com</email>
        </address>
      </contact>
      <contact fullname="Mankamana Mishra">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <country>United States of America</country>
          </postal>
          <email>mankamis@cisco.com</email>
        </address>
      </contact>
    </section>
    <section anchor="authors-addresses" numbered="false" removeInRFC="false" toc="include" pn="section-appendix.d">
      <name slugifiedName="name-authors-addresses">Authors' Addresses</name>
      <author fullname="Rishabh Parekh" initials="R." surname="Parekh" role="editor">
        <organization showOnFrontPage="true">Arrcus</organization>
        <address>
          <postal>
            <city>San Jose</city>
            <country>United States of America</country>
          </postal>
          <email>rishabh@arrcus.com</email>
        </address>
      </author>
      <author fullname="Daniel Voyer" initials="D." surname="Voyer" role="editor">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <city>Montreal</city>
            <country>Canada</country>
          </postal>
          <email>davoyer@cisco.com</email>
        </address>
      </author>
      <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
        <organization showOnFrontPage="true">Cisco Systems, Inc.</organization>
        <address>
          <postal>
            <city>Brussels</city>
            <country>Belgium</country>
          </postal>
          <email>cfilsfil@cisco.com</email>
        </address>
      </author>
      <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli">
        <organization showOnFrontPage="true">Nokia</organization>
        <address>
          <postal>
            <city>Ottawa</city>
            <country>Canada</country>
          </postal>
          <email>hooman.bidgoli@nokia.com</email>
        </address>
      </author>
      <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
        <organization showOnFrontPage="true">Juniper Networks</organization>
        <address>
          <email>zzhang@juniper.net</email>
        </address>
      </author>
    </section>
  </back>
</rfc>
