<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-spring-sr-replication-segment-18"
     ipr="trust200902">
  <front>
    <title abbrev="SR Replication Segment">SR Replication segment for
    Multi-point Service Delivery</title>

    <author fullname="Daniel Voyer (editor)" initials="D."
            surname="Voyer, Ed.">
      <organization>Bell Canada</organization>

      <address>
        <postal>
          <street/>

          <city>Montreal</city>

          <region/>

          <code/>

          <country>CA</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>daniel.voyer@bell.ca</email>

        <uri/>
      </address>
    </author>

    <author fullname="Clarence Filsfils" initials="C." surname="Filsfils">
      <organization>Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street/>

          <city>Brussels</city>

          <region/>

          <code/>

          <country>BE</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>cfilsfil@cisco.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Rishabh Parekh" initials="R." surname="Parekh">
      <organization>Cisco Systems, Inc.</organization>

      <address>
        <postal>
          <street/>

          <city>San Jose</city>

          <region/>

          <code/>

          <country>US</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>riparekh@cisco.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli">
      <organization>Nokia</organization>

      <address>
        <postal>
          <street/>

          <city>Ottawa</city>

          <region/>

          <code/>

          <country>CA</country>
        </postal>

        <phone/>

        <facsimile/>

        <email>hooman.bidgoli@nokia.com</email>

        <uri/>
      </address>
    </author>

    <author fullname="Zhaohui Zhang" initials="Z." surname="Zhang">
      <organization>Juniper Networks</organization>

      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <date day="25" month="August" year="2023"/>

    <abstract>
      <t>This document describes the Segment Routing Replication segment for
      Multi-point service delivery. A Replication segment allows a packet to
      be replicated from a Replication node to Downstream nodes.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
      "OPTIONAL" in this document are to be interpreted as described in BCP 14
      [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as
      shown here.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>Replication segment is a new type of segment for Segment Routing (SR)
      <xref target="RFC8402"/>, which allows a node (henceforth called a
      Replication node) to replicate packets to a set of other nodes (called
      Downstream nodes) in a Segment Routing Domain. A Replication segment can
      replicate packets to directly connected nodes or to downstream nodes
      (without need for state on the transit routers). This document focuses
      on specifying behavior of a Replication segment for both Segment Routing
      with Multiprotocol Label Switching (SR-MPLS) <xref target="RFC8660"/>
      and Segment Routing with IPv6 (SRv6) <xref target="RFC8986"/>. The
      examples in the Appendix illustrate the behavior of a Replication
      Segment in SR domain. The use of two or more Replication segments
      stitched together to form a tree using a control plane is left to be
      specified in other documents. The management of IP multicast groups,
      building IP multicast trees, and performing multicast congestion control
      are out of scope of this document.</t>

      <section title="Terminology">
        <t>This section defines terms introduced and used frequently in this
        document. Refer to Terminology sections of <xref target="RFC8402"/>,
        <xref target="RFC8754"/> and <xref target="RFC8986"/> for other terms
        used in Segment Routing.</t>

        <t><list style="symbols">
            <t>Replication segment: A segment in SR domain that replicates
            packets. See <xref target="RepSeg"/> for details.</t>

            <t>Replication node: A node in SR domain which replicates packets
            based on Replication segment.</t>

            <t>Downstream nodes: A Replication segment replicates packets to a
            set of nodes. These nodes are Downstream nodes.</t>

            <t>Replication state: State held for a Replication segment at a
            Replication node. It is conceptually a list of replication
            branches to Downstream nodes. The list can be empty.</t>

            <t>Replication SID: Data plane identifier of a Replication
            segment. This is a SR-MPLS label or SRv6 Segment Identifier
            (SID).</t>

            <t>SRH: IPv6 Segment Routing Header <xref target="RFC8754"/>.</t>

            <t>Point-to-Multipoint Service: A service that has one ingress
            node and one or more egress nodes. A packet is delivered to all
            the egress nodes</t>

            <t>Root node: An ingress node of a P2MP service,</t>

            <t>Leaf node: An egress node of a P2MP service.</t>

            <t>Bud node: A node that is both a Replication node and a Leaf
            node.</t>
          </list></t>
      </section>

      <section title="Use Cases">
        <t>In the simplest use case, a single Replication segment includes the
        ingress node of a multi-point service and the egress nodes of the
        service as all the Downstream nodes. This achieves Ingress Replication
        <xref target="RFC7988"/> that has been widely used for Multicast VPN
        (MVPN) <xref target="RFC6513"/> and Ethernet VPN (EVPN)<xref
        target="RFC7432"/> bridging of Broadcast, Unknown Unicast, and
        Multicast (BUM) traffic. This Replication segment can be either
        provisioned locally on ingress and egress nodes, or using dynamic
        auto-discovery procedures for MVPN and EVPN. Note <xref
        target="RFC8986">SRv6</xref> has End.DT2M replication behavior for
        EVPN BUM traffic.</t>

        <t>Replication segments can also be used to form trees by stitching
        Replication segments on a Root node, intermediate Replication nodes
        and Leaf nodes for efficient delivery of MVPN and EVPN BUM
        traffic.</t>
      </section>
    </section>

    <section anchor="RepSeg" title="Replication Segment">
      <t>In a Segment Routing Domain, a Replication segment is a logical
      construct which connects a Replication node to a set of Downstream
      nodes. A Replication segment is a local segment instantiated at a
      Replication node. It can be either provisioned locally on a node or
      programmed by a control plane.</t>

      <t>Replication segments can be stitched together to form a tree by
      either local provisioning on nodes or using a control plane. The
      procedures for doing this are out of scope of this document. One such
      control plane using a PCE with SR P2MP policy is specified in <xref
      target="I-D.ietf-pim-sr-p2mp-policy"/>. However, if local provisioning
      is used to stitch Replication segments, then a chain of Replication
      segments SHOULD NOT form a loop. If a control plane is used to stitch
      Replication segments, the control plane specification MUST prevent
      loops, or to detect and mitigate loops in steady state.</t>

      <t>A Replication segment is identified by the tuple &lt;Replication-ID,
      Node-ID&gt;, where:</t>

      <t><list style="symbols">
          <t>Replication-ID: An identifier for a Replication segment that is
          unique in context of the Replication node.</t>

          <t>Node-ID: The address of the Replication node that the Replication
          segment is for. Note that the Root of a multi-point service is also
          a Replication node.</t>
        </list></t>

      <t>Replication-ID is a variable length field. In simplest case, it can
      be a 32-bit number, but it can be extended or modified as required based
      on specific use of a Replication segment. This is out of scope for this
      document. The length of Replication-ID is specified in the signaling
      mechanism used for Replication segment. Examples of such signaling and
      extensions are described in <xref
      target="I-D.ietf-pim-sr-p2mp-policy"/>. When the PCE signals a
      Replication segment to its node, the &lt;Replication-ID, Node-ID&gt;
      tuple identifies the segment.</t>

      <t>A Replication segment includes the following elements: <list
          style="symbols">
          <t>Replication SID: The Segment Identifier of a Replication segment.
          This is a SR-MPLS label or a SRv6 SID <xref target="RFC8402"/>.</t>

          <t>Downstream nodes: Set of nodes in Segment Routing domain to which
          a packet is replicated by the Replication segment.</t>

          <t>Replication state: See below.</t>
        </list></t>

      <t>The Downstream nodes and Replication state of a Replication segment
      can change over time, depending on the network state and Leaf nodes of a
      multi-point service that the segment is part of.</t>

      <t>Replication SID identifies the Replication segment in the forwarding
      plane. At a Replication node, the Replication SID operates on
      Replication state of the Replication segment.</t>

      <t>Replication state is a list of replication branches to the Downstream
      nodes. In this document, each branch is abstracted to a &lt;Downstream
      node, Downstream Replication SID&gt; tuple. &lt;Downstream node&gt;
      represents the reachability from the Replication node to the Downstream
      node. In its simplest form, this MAY be specified as an interface or
      next-hop if downstream node is adjacent to the Replication node. The
      reachability may be specified in terms of Flexible Algorithm path
      (including the default algorithm) <xref target="RFC9350"/>, or specified
      by an SR explicit path represented either by a SID-list (of one or more
      SIDs) or by a Segment Routing Policy <xref target="RFC9256"/>.
      Downstream Replication SID is the Replication SID of the Replication
      segment at the Downstream node.</t>

      <t>A packet is steered into a Replication segment at a Replication node
      in two ways:</t>

      <t><list style="symbols">
          <t>When the Active Segment <xref target="RFC8402"/> is a locally
          instantiated Replication SID</t>

          <t>By the Root of a multi-point service based on local configuration
          outside the scope of this document.</t>
        </list></t>

      <t>In either case, the packet is replicated to each Downstream node in
      the associated Replication state.</t>

      <t>If a Downstream node is an egress (Leaf) of the multi-point service,
      i.e. no further replication is needed, then that Leaf node's Replication
      segment will not have any Replication state i.e. the list of Replication
      branches is empty. The Replication segment will have an indicator role
      of the node is Leaf. The operation performed on incoming Replication SID
      is NEXT <eref
      target="https://www.rfc-editor.org/rfc/rfc8402#section-2"/>. At an
      egress node, the Replication SID MAY be used to identify that portion of
      the multi-point service. Notice that the segment on the Leaf node is
      still referred to as a Replication segment for the purpose of
      generalization.</t>

      <t>A node can be a Bud node, i.e. it is a Replication node and a Leaf
      node of a multi-point service <xref
      target="I-D.ietf-pim-sr-p2mp-policy"/>. Replication segment of a Bud
      node has a list of Replication Branches as well as Leaf role
      indicator.</t>

      <t>In principle it is possible for different Replication segments to
      replicate packets to the same Replication segment on a Downstream node.
      However, such usage is intentionally left out of scope of this
      document.</t>

      <section title="SR-MPLS data plane">
        <t>When the Active Segment is a Replication SID, the processing
        results in a POP <eref
        target="https://www.rfc-editor.org/rfc/rfc8402#section-2"/> operation
        and lookup of the associated Replication state. For each replication
        in the Replication state, the operation is a PUSH <eref
        target="https://www.rfc-editor.org/rfc/rfc8402#section-2"/> of the
        downstream Replication SID and an optional segment list on to the
        packet to steer the packet to the Downstream node.</t>

        <t>For Leaf/Bud nodes local delivery off tree is per local
        configuration. For some usages, this may involve looking at the next
        SID for example to get the necessary context.</t>

        <t>When the Root of a multi-point service steers a packet to a
        Replication segment, it results in a replication to each Downstream
        node in the associated replication state. The operation is a PUSH of
        the replication SID and an optional segment list on to the packet
        which is forwarded to the downstream node.</t>

        <t>The following applies to Replication SID in MPLS encapsulation:</t>

        <t><list style="symbols">
            <t>SIDs MAY be inserted before the downstream SR-MPLS Replication
            SID in order to guide a packet from a non-adjacent SR node to a
            Replication node.</t>

            <t>A Replication node MAY replicate a packet to a non-adjacent
            Downstream node using SIDs it inserts in the copy preceding the
            downstream Replication SID. The Downstream node may be a Leaf node
            of the Replication segment, or another Replication node, or both
            in case of Bud node.</t>

            <t>A Replication node MAY use an Anycast SID or Border Gateway
            Protocol (BGP) PeerSet SID in segment list to send a replicated
            packet to one downstream Replication node in an Anycast set if and
            only if all nodes in the set have an identical Replication SID and
            reach the same set of receivers.</t>

            <t>For some use cases, there MAY be SIDs after the Replication SID
            in the segment list of a packet. These SIDs are used only by the
            Leaf/Bud nodes to forward a packet off the tree independent of the
            Replication SID. Coordination regarding the absence or presence
            and value of context information for Leaf/Bud nodes is outside the
            scope of this document.</t>
          </list></t>
      </section>

      <section anchor="SRv6" title="SRv6 data plane">
        <t>For SRv6 <xref target="RFC8986"/>, this document specifies
        &ldquo;Endpoint with replication&rdquo; behavior (End.Replicate for
        short) to replicate a packet and forward the replicas according to a
        Replication state.</t>

        <t>When processing a packet destined to a local Replication SID, the
        packet is replicated according to the associated Replication state to
        Downstream nodes and/or locally delivered off tree when this is a
        Leaf/Bud node.For replication, the outer header is re-used, and the
        Downstream Replication SID, from Replication state, is written into
        the outer IPv6 header destination address. If required, an optional
        segment list may be used on some branches using H.Encaps.Red <xref
        target="RFC8986"/> (while some other branches may not need that). Note
        that this H.Encaps.Red is independent of the replication segment
        &ndash; it is just used to steer the replicated packet on a traffic
        engineered path to a Downstream node. The penultimate segment in
        encapsulating IPv6 header will execute Ultimate Segment Decapsulation
        (USD) flavor <xref target="RFC8986"/> of End/End.X behavior and
        forward the inner (replicated) packet to the Downstream node. If
        H.Encaps.Red is used to steer a replicated packet to a Downstream
        node, the operator must ensure the MTU on path to the Downstream node
        is sufficient to account for additional SRv6 encapsulation. This also
        applies when the Replication segment is for the Root node, whose
        upstream node has placed the Replication-SID in the header.</t>

        <t>A local application on Root, for e.g. MVPN <xref target="RFC6513"/>
        or EVPN <xref target="RFC7432"/>, may also apply H.Encaps.Red and then
        steer the resulting traffic into the Replication segment. Again, note
        that the H.Encaps.Red is independent of the Replication segment
        &ndash; it is the action of the application (e.g. MVPN/EVPN service).
        If the service is on a Root node, the two H.Encaps mentioned, one for
        the service and other in the previous paragraph for replication to
        Downstream node SHOULD be combined for optimization (to avoid extra
        IPv6 encapsulation).</t>

        <t>When processing a packet destined to a local Replication SID, IPv6
        Hop Limit MUST be decremented and MUST be non-zero to replicate the
        packet. A Root node that encapsulates a payload can set the IPv6 Hop
        Limit based on a local policy. This local policy SHOULD set the IPv6
        Hop Limit so that a replicated packet can reach the furthest Leaf
        node. A Root node can also have a local policy to set the IPv6 Hop
        Limit from the payload. In this case, IPv6 Hop Limit may not be
        sufficient to get the replicated packet to all the Leaf nodes;
        non-replication nodes i.e. nodes which forward replicated packets
        based on IPv6 locator unicast prefix can decrement IPv6 Hop Limit to
        zero and originate ICMPv6 Error packets to the Root node. This can
        result in a storm of ICMPv6 packets (see <xref target="ICMP"/>) to the
        Root node. To avoid this, a Replication Segment has an optional IPv6
        Hop Limit threshold. If this threshold is set, a Replication node MUST
        discard an incoming packet with local Replication SID if the IPv6 Hop
        Limit in the packet is less than the threshold and log this in a rate
        limited manner. The IPv6 Hop Limit Threshold SHOULD be set so that
        incoming packet can be replicated to furthest Leaf node.</t>

        <t>For Leaf/Bud nodes local delivery off the tree is per Replication
        SID or next SID (if present in SRH). For some usages, this may involve
        getting the necessary context either from the next SID (e.g., MVPN
        with shared tree) or from the replication SID itself (e.g., MVPN with
        non-shared tree). In both cases, the context association is achieved
        with signaling and is out of scope of this document.</t>

        <t>The following applies to Replication SID in SRv6 encapsulation:</t>

        <t><list style="symbols">
            <t>There MAY be SIDs preceding the SRv6 Replication SID in order
            to guide a packet from a non-adjacent SR node to a Replication
            node via an explicit path.</t>

            <t>A Replication node MAY steer a replicated packet on an explicit
            path to a non-adjacent Downstream node using SIDs it inserts in
            the copy preceding the downstream Replication SID. The Downstream
            node may be a Leaf node of the Replication segment, or another
            Replication node, or both in case of Bud node.</t>

            <t>For SRv6, as described in above paragraphs, the insertion of
            SIDs prior to Replication SID entails a new IPv6 encapsulation
            with SRH, but this can be optimized on Root node or for compressed
            SRv6 SIDs.</t>

            <t>The locator of Replication SID is sufficient to guide a packet
            on shortest path, for default or Flexible algorithm, between
            non-adjacent nodes.</t>

            <t>A Replication node MAY use an Anycast SID or BGP PeerSet SID in
            segment list to send a replicated packet to one downstream
            Replication node in an Anycast set if and only if all nodes in the
            set have an identical Replication SID and reach the same set of
            receivers.</t>

            <t>There MAY be SIDs after the Replication SID in the SRH of a
            packet. These SIDs are used to provide additional context for
            processing a packet locally at the node where the Replication SID
            is the Active Segment. Coordination regarding the absence or
            presence and value of context information for Leaf/Bud nodes is
            outside the scope of this document.</t>
          </list></t>

        <section title="End.Replicate: Replicate and/or Decapsulate">
          <t>The "Endpoint with replication and/or decapsulate behavior
          (End.Replicate for short) is variant of End behavior. The
          pseudo-code in this section follows the convention introduced in
          <xref target="RFC8986">RFC 8986</xref>.</t>

          <t>A Replication state conceptually contains the following
          elements:</t>

          <figure>
            <artwork><![CDATA[
Replication state:
{
  Node-Role: {Head, Transit, Leaf, Bud};
  IPv6 Hop Limit Threshold; # default is zero
  # On Leaf, replication list is zero length
  Replication-List:
  {
    Downstream node: <Node-Identifier>;
    Downstream Replication SID: R-SID;
    # Segment-List may be empty
    Segment-List: [SID-1, .... SID-N];
  }
}

]]></artwork>
          </figure>

          <t>Below is the Replicate function on a packet for Replication state
          (RS).</t>

          <figure>
            <artwork><![CDATA[S01. Replicate(RS, packet)
S02. {
S03.    For each Replication R in RS.Replication-List {
S04.       Make a copy of the packet
S05.       Set IPv6 DA = RS.R-SID
S06.       If RS.Segment-List is not empty {
S07.         # Head node may optimize below encapsulation and 
S08.         # the encapsulation of packet in a single encapsulation
S09.         Execute H.Encaps or H.Encaps.Red with RS.Segment-List 
             on packet copy #RFC 8986 Section 5.1, 5.2
S10.       }
S11.       Submit the packet to the egress IPv6 FIB lookup and           
           transmission to the new destination
S12.   }
S13. }    

]]></artwork>
          </figure>

          <t>Notes:<vspace blankLines="0"/></t>

          <t><list style="symbols">
              <t>The IPv6 destination address in the copy of a packet is set
              from local state and not from SRH</t>
            </list></t>

          <t>When N receives a packet whose IPv6 DA is S and S is a local
          End.Replicate SID, N does:</t>

          <figure>
            <artwork><![CDATA[S01.   Lookup FUNCT portion of S to get Replication state RS
S02.   If (IPv6 Hop Limit <= 1) {
S03.     Discard the packet
S04.     # ICMPv6 Time Exceeded is not permitted (ICMPv6 section below)
S05.   }
S06.   If RS is not found {
S07.     Discard the packet
S08.   }
S09.   If (IPv6 Hop Limit < RS.IPv6 Hop Limit Threshold) {
S10.     Discard the packet
S11.     # Rate-limited logging
S12.   }
S13.   Decrement IPv6 Hop Limit by 1
S14.   If (IPv6 NH == SRH and SRH TLVs present) {
S15.     Process SRH TLVs if allowed by local configuration
S16.   }
S17.   Call Replicate(RS, packet)
S18.   If (RS.Node-Role == Leaf OR RS.Node-Role == Bud) {
S19.     If (IPv6 NH == SRH and Segments Left > 0) {
S20.       Derive packet processing context(PPC) from Segment List
S21.       If (Segments Left != 0) {
S22.         Discard the packet
S23.         # ICMPv6 Parameter Problem with Code 0
S24.         # (Erroneous header field encountered) 
S25.         # is not permitted (ICMPv6 section below)
S26.       }
S27.     } Else {
S28.       Derive packet processing context(PPC) 
           from FUNCT of Replication SID
S29.     }
S30.     Process the next header
S31.   }]]></artwork>
          </figure>

          <t>The processing of Upper-Layer header of a packet matching
          End.Replicate SID at Leaf/Bud node is as follows:</t>

          <figure>
            <artwork><![CDATA[S01.   If (Upper-Layer header type == 4(IPv4) OR 
           Upper-Layer header type == 41(IPv6) ) {
S02.     Remove the outer IPv6 header with all its extension headers
S03.     Process the packet in context of PPC
S04.   } Else If (Upper-Layer header type == 143(Ethernet) ) {
S05.     Remove the outer IPv6 header with all its extension headers
S06.     Process the Ethernet Frame in context of PPC
S07.   } Else If (Upper-Layer header type is allowed 
                  by local configuration) {
S08.     Proceed to process the Upper-Layer header
S09.   } Else {
S10.     Discard the packet
S11.     # ICMPv6 Parameter Problem with Code 4
S12.     # (SR Upper-layer Header Error) 
S13.     # is not permitted (ICMPv6 section below)
S14.   }                  ]]></artwork>
          </figure>

          <t>Notes:<vspace blankLines="0"/></t>

          <t><list style="symbols">
              <t>The behavior above MAY result in a packet with partially
              processed segment list in SRH under some circumstances. Fox
              example a head node may encode a context SID in an SRH. As per
              pseudo-code above, a Replication node that receives a packet
              with local Replication SID will not process the SRH segment list
              and just forward a copy with unmodified SRH to Downstream
              nodes.</t>

              <t>The packet processing context usually is a FIB table T</t>
            </list></t>

          <t>Processing the Replication SID may modify, if configured to
          process TLVs, the "variable-length data" of TLV types that change en
          route. Therefore, TLVs that change en route are mutable. The
          remainder of the SRH (Segments Left, Flags, Tag, Segment List, and
          TLVs that do not change en route) are immutable while processing
          this SID.</t>

          <section title="Hashed Message Authentication Code (HMAC) SRH TLV">
            <t>If a Root node encodes a context SID in SRH with an optional
            HMAC SRH TLV <xref target="RFC8754"/>, it MUST set the 'D' bit as
            defined in Section 2.1.2 because the Replication SID is not part
            of the segment list in SRH.</t>

            <t>HMAC generation and verification is as specified in <eref
            target="https://www.rfc-editor.org/rfc/rfc8754.html#name-hmac-generation-and-verific">Section
            2.1.2.1 of RFC 8754</eref>. Verification of HMAC TLV is determined
            by local configuration. If verification fails, an implementation
            of Replication SID MUST NOT originate an ICMPv6 error message
            (parameter problem, code 0). The failure SHOULD be logged (rate
            limited) and the packet SHOULD be discarded.</t>
          </section>
        </section>

        <section title="OAM Operations">
          <t>RFC 9259 <xref target="RFC9259"/> specifies procedures for OAM
          operations like ping and traceroute on SRv6 SIDs.</t>

          <t>It is possible to ping a Replication SID of a Leaf/Bud node,
          assuming the source node knows the Replication SID a priori,
          directly by putting it in the IPv6 destination address without a SRH
          or in a SRH as the last segment. While it is not possible to ping a
          Replication SID of a transit node because transit nodes do not
          process upper layer headers, it is still possible to ping a
          Replication SID of Leaf/Bud node of a tree via the Replication SID
          of intermediate transit nodes. The source of ping MUST compute the
          ICMPv6 Echo Request checksum using the Replication SID of Leaf/Bud
          as destination address. The source can then send the Echo Request
          packet to a transit node's Replication SID. The transit nodes
          replicate the packet by replacing the IPv6 destination address till
          the packet reaches the Leaf/Bud node which responds with an ICMPv6
          Echo Reply. Note that a transit Replication node may replicate Echo
          Request packets to other Leaf/Bud nodes. These nodes will drop the
          Echo Request due to incorrect checksum. Procedures to prevent the
          mis-delivery of Echo Request may be addressed in a future document.
          Appendix A.2.1 illustrates examples of ping to a Replication
          SID.</t>

          <t>Traceroute to a Leaf/Bud node Replication SID is not possible due
          to restriction prohibiting origination of ICMPv6 Time Exceeded error
          message for a Replication SID as described in the section below.</t>
        </section>

        <section anchor="ICMP" title="ICMPv6 Error Messages">
          <t>ICMPv6 RFC <xref target="RFC4443"/> Section 2.4 states an ICMPv6
          error message MUST NOT be originated as a result of receiving a
          packet destined to an IPv6 multicast address. This is to prevent a
          storm of ICMPv6 error messages resulting from replicated IPv6
          packets from overwhelming a source node. There are two exceptions
          (1) the Packet Too Big message for Path MTU discovery, and (2)
          Parameter Problem Message, Code 2 reporting an unrecognized IPv6
          option. An implementation of Replication segment for SRv6 MUST
          enforce these same restrictions and exceptions.</t>
        </section>
      </section>
    </section>

    <section title="Implementation Status">
      <t>Note to the RFC Editor: Please remove this section and reference to
      RFC 7942 before publication.</t>

      <t>This section records the status of known implementations of the
      protocol defined by this specification at the time of posting of this
      Internet-Draft, and is based on a proposal described in <xref
      target="RFC7942">RFC 7942</xref>. The description of implementations in
      this section is intended to assist the IETF in its decision processes in
      progressing drafts to RFCs. Please note that the listing of any
      individual implementation here does not imply endorsement by the IETF.
      Furthermore, no effort has been spent to verify the information
      presented here that was supplied by IETF contributors. This is not
      intended as, and must not be construed to be, a catalog of available
      implementations or their features. Readers are advised to note that
      other implementations may exist. According to <xref target="RFC7942">RFC
      7942</xref>, "this will allow reviewers and working groups to assign due
      consideration to documents that have the benefit of running code, which
      may serve as evidence of valuable experimentation and feedback that have
      made the implemented protocols more mature. It is up to the individual
      working groups to use this information as they see fit".</t>

      <t>There are two known implementations of this draft by Cisco and Nokia.
      Interoperability reports for the implementations are not applicable
      since this draft does not specify inter-operable elements of Replication
      segments.</t>

      <section title="Cisco implementation">
        <t>Cisco Implementation uses Replication segments defined in this
        draft as a basis for PCE to compute and establish P2MP trees in SR
        domain to provide multi-point services. The implementation, based on
        latest version of this draft, is in production and supports all MUST
        and SHOULD clauses for SR-MPLS Replication segments. The documentation
        is available at <eref
        target="https://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k-r7-3/segment-routing/configuration/guide/b-segment-routing-cg-asr9000-73x/b-segment-routing-cg-asr9000-71x_chapter_01001.html ">Cisco
        documentation</eref> and the point of contact is Rishabh Parekh
        (riparekh@cisco.com).</t>
      </section>

      <section title="Nokia implementation">
        <t>Nokia has implemented replication SID as defined in this draft to
        establish P2MP tree in segment routing domain. The implementation
        supports SR-MPLS encapsulation and has all the MUST and SHOULD clause
        in this draft. The implementation is at general availability maturity
        and is compliant with the latest version of the draft. The
        documentation for implementation can be found at <eref
        target="https://infocenter.nokia.com/public/7750SR207R1A/index.jsp?topic=%2Fcom.sr.multicast%2Fhtml%2Ftreesid.html">Nokia
        help</eref> and the point of contact is hooman.bidgoli@nokia.com.</t>
      </section>
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA has assigned the following codepoint for End.Replicate behavior
      in the "SRv6 Endpoint Behaviors" registry in the "Segment Routing"
      registry group.</t>

      <texttable anchor="endpoint_cp_types"
                 title="IETF - SRv6 Endpoint Behaviors">
        <ttcol align="left">Value</ttcol>

        <ttcol align="center">Hex</ttcol>

        <ttcol align="center">Endpoint behavior</ttcol>

        <ttcol align="center">Reference</ttcol>

        <c>75</c>

        <c>0x004B</c>

        <c>End.Replicate</c>

        <c>[This.ID]</c>
      </texttable>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>The SID behaviors defined in this document are deployed within an SR
      domain <xref target="RFC8402"/>. An SR domain needs protection from
      outside attackers as described in <xref target="RFC8754"/> and following
      is a brief reminder of the same:</t>

      <t><list style="symbols">
          <t>For SR-MPLS deployments:<list style="symbols">
              <t>By disabling MPLS on external interfaces of each edge node or
              any other technique to filter labeled traffic ingress on these
              interfaces.</t>
            </list></t>

          <t>For SRv6 deployments:<list style="symbols">
              <t>Allocate all the SIDs from an IPv6 prefix block S/s and
              configure each external interface of each edge node of the
              domain with an inbound infrastructure access list (IACL) that
              drops any incoming packet with a destination address in S/s
              <eref
              target="https://www.rfc-editor.org/rfc/rfc8754.html#name-securing-the-sr-domain">RFC
              8754 Section 5.1</eref>.</t>

              <t>Additionally, an iACL may be applied to all nodes (k)
              provisioning SIDs as defined in this specification:<list
                  style="symbols">
                  <t>Assign all interface addresses from within IPv6 prefix
                  A/a. At node k, all SIDs local to k are assigned from prefix
                  Sk/sk. Configure each internal interface of each SR node k
                  in the SR domain with an inbound IACL that drops any
                  incoming packet with a destination address in Sk/sk if the
                  source address is not in A/a. <eref
                  target="https://www.rfc-editor.org/rfc/rfc8754.html#name-securing-the-sr-domain">RFC
                  8754 Section 5.1</eref>.</t>
                </list></t>

              <t>Denying traffic with spoofed source addresses by implementing
              recommendations in BCP 84 <xref target="RFC3704"/>.</t>

              <t>Additionally the block S/s from which SIDs are allocated may
              be a non-globally-routable address such as ULA or the prefix
              defined in <xref target="I-D.ietf-6man-sids"/>.</t>
            </list></t>
        </list>Failure to protect the SR MPLS domain by correctly provisioning
      MPLS support per interface permits attackers from outside the domain to
      send packets that use the replication services provisioned within the
      domain.</t>

      <t>Failure to protect the SRv6 domain with IACLs on external interfaces,
      combined with failure to implement BCP 38 <xref target="RFC2827"/>or
      apply IACLs on nodes provisioning SIDs, permits attackers from outside
      the SR domain to send packets that use the replication services
      provisioned within the domain.</t>

      <t>Given the definition of the Replication segment in this document, an
      attacker subverting ingress filter above cannot take advantage of a
      stack of replication segments to perform amplification attacks nor link
      exhaustion attacks. Replication segment trees always terminate at a Leaf
      or Bud node resulting in a decapsulation. This however does allow an
      attacker to inject traffic to the receivers within a P2MP service.</t>

      <t>This document introduces a SR segment endpoint behavior that
      replicates and decapsulates an inner payload for both the MPLS and IPv6
      data planes. Similar to any MPLS end of stack label, or SRv6 END.D*
      behavior, if the protections described above are not implemented an
      attacker can perform an attack via the decapsulating segment (including
      the one described in this document).</t>

      <t>Incorrect provisioning of Replication segments can result in a chain
      of Replication segments forming a loop. This can happen if Replication
      segments are provisioned on SR nodes without using a control plane. In
      this case, replicated packets can create a storm till MPLS TTL (for
      SR-MPLS) or IPv6 Hop Limit (for SRv6) decrements to zero. A control
      plane, for example PCE, can be used to prevent loops. The control plane
      protocols (like PCEP, BGP, etc.) used to instantiate Replication
      segments can leverage their own security mechanisms such as encryption,
      authentication filtering etc.</t>

      <t>For SRv6, <xref target="ICMP"/> describes an exception for Parameter
      Problem Message, code 2 ICMPv6 Error messages. If an attacker sends a
      packet destined to Replication SID with source address of a node and
      with an extension header using 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. Although this specification
      does not specify any extension headers, any future extension of this
      document doing so is susceptible to this security concern.</t>

      <t>If an attacker can forge an IPv6 packet with source address of a
      node, Replication SID as destination address and an IPv6 Hop Limit such
      that nodes which forward replicated packets on IPv6 locator unicast
      prefix, decrement the Hop Limit to zero, then these nodes can cause a
      storm of ICMPv6 Error packets to overwhelm the source node under attack.
      The IPv6 Hop Limit Threshold check described in <xref target="SRv6"/>
      can help mitigate such attacks.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>The authors would like to acknowledge Siva Sivabalan, Mike Koldychev,
      Vishnu Pavan Beeram, Alexander Vainshtein, Bruno Decraene, Thierry
      Couture, Joel Halpern, Ketan Talaulikar, Darren Dukes and Jingrong Xie
      for their valuable inputs.</t>
    </section>

    <section title="Contributors">
      <t>Clayton Hassen <vspace blankLines="0"/> Bell Canada <vspace
      blankLines="0"/> Vancouver <vspace blankLines="0"/> Canada</t>

      <t>Email: clayton.hassen@bell.ca</t>

      <t>Kurtis Gillis <vspace blankLines="0"/> Bell Canada <vspace
      blankLines="0"/> Halifax <vspace blankLines="0"/> Canada</t>

      <t>Email: kurtis.gillis@bell.ca</t>

      <t>Arvind Venkateswaran <vspace blankLines="0"/> Cisco Systems, Inc.
      <vspace blankLines="0"/> San Jose <vspace blankLines="0"/> US</t>

      <t>Email: arvvenka@cisco.com</t>

      <t>Zafar Ali <vspace blankLines="0"/> Cisco Systems, Inc. <vspace
      blankLines="0"/> US</t>

      <t>Email: zali@cisco.com</t>

      <t>Swadesh Agrawal <vspace blankLines="0"/> Cisco Systems, Inc. <vspace
      blankLines="0"/> San Jose <vspace blankLines="0"/> US</t>

      <t>Email: swaagraw@cisco.com</t>

      <t>Jayant Kotalwar <vspace blankLines="0"/> Nokia <vspace
      blankLines="0"/> Mountain View <vspace blankLines="0"/> US</t>

      <t>Email: jayant.kotalwar@nokia.com</t>

      <t>Tanmoy Kundu <vspace blankLines="0"/> Nokia <vspace blankLines="0"/>
      Mountain View <vspace blankLines="0"/> US</t>

      <t>Email: tanmoy.kundu@nokia.com</t>

      <t>Andrew Stone <vspace blankLines="0"/> Nokia <vspace blankLines="0"/>
      Ottawa <vspace blankLines="0"/> Canada</t>

      <t>Email: andrew.stone@nokia.com</t>

      <t>Tarek Saad <vspace blankLines="0"/> Cisco Systems Inc.<vspace
      blankLines="0"/> Canada</t>

      <t>Email:tsaad@cisco.com</t>

      <t>Kamran Raza <vspace blankLines="0"/> Cisco Systems, Inc. <vspace
      blankLines="0"/> Canada</t>

      <t>Email:skraza@cisco.com</t>

      <t>Jingrong Xie <vspace blankLines="0"/> Huawei Technologies <vspace
      blankLines="0"/> Beijing <vspace blankLines="0"/> China</t>

      <t>Email:xiejingrong@huawei.com</t>
    </section>
  </middle>

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

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

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

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

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

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

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

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

      <?rfc include="reference.RFC.7432"?>

      <?rfc include="reference.RFC.7988"?>

      <?rfc include="reference.RFC.7942"?>

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

      <?rfc include='reference.I-D.ietf-pim-sr-p2mp-policy'?>

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

      <?rfc include="reference.RFC.9256"?>

      <?rfc include='reference.I-D.filsfils-spring-srv6-net-pgm-illustration'?>

      <?rfc include="reference.RFC.3704"?>

      <?rfc include="reference.RFC.2827"?>

      <?rfc include="reference.I-D.ietf-6man-sids"?>
    </references>

    <section title="Illustration of a Replication Segment">
      <t>This section illustrates an example of a single Replication segment.
      Examples showing Replication segment stitched together to form P2MP tree
      (based on SR P2MP policy) are in <xref
      target="I-D.ietf-pim-sr-p2mp-policy"/>.</t>

      <t>Consider the following topology:</t>

      <figure title="Topology for illustration of Replication Segment">
        <artwork><![CDATA[                               R3------R6
                              /         \
                      R1----R2----R5-----R7
                              \         / 
                               +--R4---+  ]]></artwork>
      </figure>

      <section title="SR-MPLS">
        <t>In this example, the Node-SID of a node Rn is N-SIDn and
        Adjacency-SID from node Rm to node Rn is A-SIDmn. Interface between Rm
        and Rn is Lmn. The state representation uses "R-SID-&gt;Lmn" to
        represent a packet replication with outgoing replication SID R-SID
        sent on interface Lmn.</t>

        <t>Assume a Replication segment identified with R-ID at Replication
        node R1 and downstream nodes R2, R6 and R7. The Replication SID at
        node n is R-SIDn. A packet replicated from R1 to R7 has to traverse
        R4.</t>

        <t>The Replication segment state at nodes R1, R2, R6 and R7 is shown
        below. Note nodes R3, R4 and R5 do not have state for the Replication
        segment.</t>

        <t>Replication segment at R1:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R1>:
 Replication SID: R-SID1
 Replication state:
   R2: <R-SID2->L12>
   R6: <N-SID6, R-SID6>
   R7: <N-SID4, A-SID47, R-SID7>
]]></artwork>
        </figure>

        <t>Replication to R2 steers the packet directly to R2 on interface
        L12. Replication to R6, using N-SID6, steers the packet via shortest
        path to that node. Replication to R7 is steered via R4, using N-SID4
        and then adjacency SID A-SID47 to R7.</t>

        <t>Replication segment at R2:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R2>:
 Replication SID: R-SID2
 Replication state:
   R2: <Leaf>]]></artwork>
        </figure>

        <t>Replication segment at R6:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R6>:
 Replication SID: R-SID6
 Replication state:
   R6: <Leaf>]]></artwork>
        </figure>

        <t>Replication segment at R7:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R7>:
 Replication SID: R-SID7
 Replication state:
   R7: <Leaf>]]></artwork>
        </figure>

        <t>When a packet is steered into the Replication segment at R1:</t>

        <t><list style="symbols">
            <t>Since R1 is directly connected to R2, R1 performs PUSH
            operation with just &lt;R-SID2&gt; label for the replicated copy
            and sends it to R2 on interface L12. R2, as Leaf, performs NEXT
            operation, pops R-SID2 label and delivers the payload.</t>

            <t>R1 performs PUSH operation with &lt;N-SID6, R-SID6&gt; label
            stack for the replicated copy to R6 and sends it to R2, the
            nexthop on shortest path to R6. R2 performs CONTINUE operation on
            N-SID6 and forwards it to R3. R3 is the penultimate hop for
            N-SID6; it performs penultimate hop popping, which corresponds to
            the NEXT operation and the packet is then sent to R6 with
            &lt;R-SID6&gt; in the label stack. R6, as Leaf, performs NEXT
            operation, pops R-SID6 label and delivers the payload.</t>

            <t>R1 performs PUSH operation with &lt;N-SID4, A-SID47, R-SID7&gt;
            label stack for the replicated copy to R7 and sends it to R2, the
            nexthop on shortest path to R4. R2 is the penultimate hop for
            N-SID4; it performs penultimate hop popping, which corresponds to
            the NEXT operation and the packet is then sent to R4 with
            &lt;A-SID47, R-SID1&gt; in the label stack. R4 performs NEXT
            operation, pops A-SID47, and delivers packet to R7 with
            &lt;R-SID7&gt; in the label stack. R7, as Leaf, performs NEXT
            operation, pops R-SID7 label and delivers the payload.</t>
          </list></t>
      </section>

      <section title="SRv6">
        <t>For SRv6 , we use SID allocation scheme, reproduced below, from
        Illustrations for SRv6 Network Programming <xref
        target="I-D.filsfils-spring-srv6-net-pgm-illustration"/></t>

        <t><list style="symbols">
            <t>2001:db8::/32 is an IPv6 block allocated by a Regional Internet
            Registry (RIR) to the operator</t>

            <t>2001:db8:0::/48 is dedicated to the internal address space</t>

            <t>2001:db8:cccc::/48 is dedicated to the internal SRv6 SID
            space</t>

            <t>We assume a location expressed in 64 bits and a function
            expressed in 16 bits</t>

            <t>Node k has a classic IPv6 loopback address 2001:db8::k/128
            which is advertised in the Interior Gateway Protocol (IGP)</t>

            <t>Node k has 2001:db8:cccc:k::/64 for its local SID space. Its
            SIDs will be explicitly assigned from that block</t>

            <t>Node k advertises 2001:db8:cccc:k::/64 in its IGP</t>

            <t>Function :1:: (function 1, for short) represents the End
            function with Penultimate Segment Pop of SRH (PSP) <xref
            target="RFC8986"/> and USD support</t>

            <t>Function :Cn:: (function Cn, for short) represents the End.X
            function from to Node n with PSP and USD support</t>
          </list></t>

        <t>Each node k has: <list style="symbols">
            <t>An explicit SID instantiation 2001:db8:cccc:k:1::/128 bound to
            an End function with additional support for PSP and USD</t>

            <t>An explicit SID instantiation 2001:db8:cccc:k:Cj::/128 bound to
            an End.X function to neighbor J with additional support for PSP
            and USD</t>

            <t>An explicit SID instantiation 2001:db8:cccc:k:Fk::/128 bound to
            an End.Replicate function</t>
          </list></t>

        <t>Assume a Replication segment identified with R-ID at Replication
        node R1 and downstream nodes R2, R6 and R7. The Replication SID at
        node k, bound to an End.Replicate function, is
        2001:db8:cccc:k:Fk::/128. A packet replicated from R1 to R7 has to
        traverse R4.</t>

        <t>The Replication segment state at nodes R1, R2, R6 and R7 is shown
        below. Note nodes R3, R4 and R5 do not have state for the Replication
        segment. The state representation uses "R-SID-&gt;Lmn" to represent a
        packet replication with outgoing replication SID R-SID sent on
        interface Lmn. "SL" represents and optional segment list used to steer
        a replicated packet on a specific path to a Downstream node.</t>

        <t>Replication segment at R1:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R1>:
 Replication SID: 2001:db8:cccc:1:F1::0
 Replication state:
   R2: <2001:db8:cccc:2:F2::0->L12>
   R6: <2001:db8:cccc:6:F6::0>
   R7: <2001:db8:cccc:4:C7::0>, SL: <2001:db8:cccc:7:F7::0>
]]></artwork>
        </figure>

        <t>Replication to R2 steers the packet directly to R2 on interface
        L12. Replication to R6, using 2001:db8:cccc:6:F6::0, steers the packet
        via shortest path to that node. Replication to R7 is steered via R4,
        using H.Encaps.Red with End.X SID 2001:db8:cccc:4:C7::0 at R4 to
        R7.</t>

        <t>Replication segment at R2:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R2>:
 Replication SID: 2001:db8:cccc:2:F2::0
 Replication state:
   R2: <Leaf>]]></artwork>
        </figure>

        <t>Replication segment at R6:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R6>:
 Replication SID: 2001:db8:cccc:6:F6::0
 Replication state:
   R6: <Leaf>]]></artwork>
        </figure>

        <t>Replication segment at R7:</t>

        <figure>
          <artwork><![CDATA[Replication segment <R-ID,R7>:
 Replication SID: 2001:db8:cccc:7:F7::0
 Replication state:
   R7: <Leaf>]]></artwork>
        </figure>

        <t>When a packet, (A,B2), is steered into the Replication segment at
        R1:</t>

        <t><list style="symbols">
            <t>Since R1 is directly connected to R2, R1 creates encapsulated
            replicated copy (2001:db8::1, 2001:db8:cccc:2:F2::0) (A, B2), and
            sends it to R2 on interface L12. R2, as Leaf, removes outer IPv6
            header and delivers the payload.</t>

            <t>R1 creates encapsulated replicated copy (2001:db8::1,
            2001:db8:cccc:6:F6::0) (A, B2) then forwards the resulting packet
            on the shortest path to 2001:db8:cccc:6::/64. R2 and R3 forward
            the packet using 2001:db8:cccc:6::/64. R6, as Leaf, removes outer
            IPv6 header and delivers the payload.</t>

            <t>R1 has to steer packet to Downstream node R7 via node R4. It
            can do this in one of two ways:<list style="symbols">
                <t>R1 creates encapsulated replicated copy (2001:db8::1,
                2001:db8:cccc:7:F7::0) (A, B2) and then performs H.Encaps.Red
                using the SL to create (2001:db8::1, 2001:db8:cccc:4:C7::0)
                (2001:db8::1, 2001:db8:cccc:7:F7::0) (A, B2) packet. It sends
                this packet to R2, the nexthop on shortest path to
                2001:db8:cccc:4::/64. R2 forwards packet to R4 using
                2001:db8:cccc:4::/64. R4 executes End.X function on
                2001:db8:cccc:4:C7::0, performs USD action, removes outer IPv6
                encapsulation and sends resulting packet (2001:db8::1,
                2001:db8:cccc:7:F7::0) (A, B2) to R7. R7, as Leaf, removes
                outer IPv6 header and delivers the payload.</t>

                <t>R1 is Root of replication segment. Therefore, it can
                combine above encapsulations to create encapsulated replicated
                copy (2001:db8::1, 2001:db8:cccc:4:C7::0)
                (2001:db8:cccc:7:F7::0; SL=1) (A, B2) and sends it to R2, the
                nexthop on shortest path to 2001:db8:cccc:4::/64. R2 forwards
                packet to R4 using 2001:db8:cccc:4::/64. R4 executes End.X
                function on 2001:db8:cccc:4:C7::0, performs PSP action,
                removes SRH and sends resulting packet (2001:db8::1,
                2001:db8:cccc:7:F7::0) (A, B2) to R7. R7, as Leaf, removes
                outer IPv6 header and delivers the payload.</t>
              </list></t>
          </list></t>

        <section title="Pinging Replication SID">
          <t>This section illustrates ping of a Replication SID.</t>

          <t>Node R1 pings replication SID of node R6 directly by sending the
          following packet:</t>

          <t><list style="numbers">
              <t>R1 to R6: (2001:db8::1, 2001:db8:cccc:6:F6::0; NH=ICMPv6)
              (ICMPv6 Echo Request)</t>

              <t>Node R6 as a Leaf processes upper layer ICMPv6 Echo Request
              and responds with ICMPv6 Echo Reply</t>
            </list></t>

          <t>Node R1 pings Replication SID of R7 via R4 by sending the
          following packet with SRH:</t>

          <t><list style="numbers">
              <t>R1 to R4: (2001:db8::1, 2001:db8:cccc:4:C7::0)
              (2001:db8:cccc:7:F7::0; SL=1; NH=ICMPV6) (ICMPv6 Echo
              Request)</t>

              <t>R4 to R7: (2001:db8::1, 2001:db8:cccc:7:F7::0; NH=ICMPv6)
              (ICMPv6 Echo Request)</t>

              <t>Node R7 as a Leaf processes upper layer ICMPv6 Echo Request
              and responds with ICMPv6 Echo Reply</t>
            </list></t>

          <t>Assume node R4 is a transit Replication node with Replication SID
          2001:db8:cccc:4:F4::0 replicating to R7. Node R1 pings Replication
          SID of R7 via Replication SID of R4 as follows:</t>

          <t><list style="numbers">
              <t>R1 to R4: (2001:db8::1, 2001:db8:cccc:4:F4::0; NH=ICMPv6)
              (ICMPv6 Echo Request)</t>

              <t>R4 replicates to R7 by replacing IPv6 destination address
              with Replication SID of R7 from its Replication state</t>

              <t>R4 to R7: (2001:db8::1, 2001:db8:cccc:7:F7::0; NH=ICMPv6)
              (ICMPv6 Echo Request)</t>

              <t>Node R7 as a Leaf processes upper layer ICMPv6 Echo Request
              and responds with ICMPv6 Echo Reply</t>
            </list></t>
        </section>
      </section>
    </section>
  </back>
</rfc>
