<?xml version="1.0"encoding="US-ASCII"?>encoding="UTF-8"?> <!DOCTYPE rfcSYSTEM "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"?>[ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]> <rfc category="std" consensus="true" docName="draft-ietf-spring-sr-replication-segment-19"ipr="trust200902">ipr="trust200902" number="9524" obsoletes="" sortRefs="true" submissionType="IETF" symRefs="true" tocDepth="3" tocInclude="true" updates="" version="3" xml:lang="en"> <front> <title abbrev="SR ReplicationSegment">SRSegment">Segment Routing ReplicationsegmentforMulti-pointMultipoint Service Delivery</title> <seriesInfo name="RFC" value="9524"/> <author fullname="DanielVoyer (editor)"Voyer" initials="D."surname="Voyer, Ed.">role="editor" surname="Voyer"> <organization>Bell Canada</organization> <address> <postal><street/><city>Montreal</city><region/> <code/> <country>CA</country><country>Canada</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><country>Belgium</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><region>CA</region> <country>United States of America</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><country>Canada</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> <dateday="28" month="August" year="2023"/>month="February" year="2024"/> <area>rtg</area> <workgroup>spring</workgroup> <abstract> <t>This document describes the Segment Routing Replication segment forMulti-pointmultipoint service delivery. A Replication segment allows a packet to be replicated from aReplicationreplication node toDownstreamdownstream 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> <sectiontitle="Introduction"> <t>Replicationnumbered="true" toc="default"> <name>Introduction</name> <t>The Replication segment is a new type of segment for Segment Routing (SR) <xref format="default" target="RFC8402"/>, which allows a node (henceforth called aReplication node)"replication node") to replicate packets to a set of other nodes (calledDownstream nodes)"downstream nodes") ina Segment Routing Domain.an SR domain. A Replication segment can replicate packets to directly connected nodes or to downstream nodes (without the need for state on the transit routers). This document focuses on specifying the behavior of a Replication segment for both Segment Routing with Multiprotocol Label Switching (SR-MPLS) <xref format="default" target="RFC8660"/> and Segment Routing with IPv6 (SRv6) <xref format="default" target="RFC8986"/>. The examples inthe Appendix<xref format="default" target="Appendix"/> illustrate the behavior of a Replication Segment in an 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> <sectiontitle="Terminology">numbered="true" toc="default"> <name>Terminology</name> <t>This section defines terms introduced and used frequently in this document. Refer to the Terminology sections of <xref format="default" target="RFC8402"/>, <xreftarget="RFC8754"/>format="default" target="RFC8754"/>, and <xref format="default" target="RFC8986"/> for other terms used inSegment Routing.</t> <t><list style="symbols"> <t>Replication segment: ASR.</t> <dl newline="false" spacing="normal"> <dt>Replication segment:</dt> <dd>A segment in an SR domain that replicates packets. See <xref format="default" target="RepSeg"/> fordetails.</t> <t>Replication node: Adetails.</dd> <dt>Replication node:</dt> <dd>A node in an SR domainwhichthat replicates packets based on a Replicationsegment.</t> <t>Downstream nodes: Asegment.</dd> <dt>Downstream nodes:</dt> <dd>A Replication segment replicates packets to a set of nodes. These nodes areDownstream nodes.</t> <t>Replication state: Statedownstream nodes.</dd> <dt>Replication state:</dt> <dd>State held for a Replication segment at aReplicationreplication node. It is conceptually a list ofreplicationReplication branches toDownstreamdownstream nodes. The list can beempty.</t> <t>Replication SID: Dataempty.</dd> <dt>Replication-SID:</dt> <dd>Data plane identifier of a Replication segment. This isaan SR-MPLS label or SRv6 Segment Identifier(SID).</t> <t>SRH: IPv6(SID).</dd> <dt>SRH:</dt> <dd>IPv6 Segment Routing Header <xreftarget="RFC8754"/>.</t> <t>Point-to-Multipoint Service: Aformat="default" target="RFC8754"/>.</dd> <dt>Point-to-Multipoint (P2MP) Service:</dt> <dd>A service that has one ingress node and one or more egress nodes. A packet is delivered to all the egressnodes</t> <t>Root node: Annodes.</dd> <dt>Root node:</dt> <dd>An ingress node of a P2MPservice,</t> <t>Leaf node: Anservice.</dd> <dt>Leaf node:</dt> <dd>An egress node of a P2MPservice.</t> <t>Bud node: Aservice.</dd> <dt>Bud node:</dt> <dd>A node that is both aReplicationreplication node and aLeaf node.</t> </list></t>leaf node.</dd> </dl> <t> The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shown here. </t> </section> <sectiontitle="Use Cases">numbered="true" toc="default"> <name>Use Cases</name> <t>In the simplest use case, a single Replication segment includes the ingress node of amulti-pointmultipoint service and the egress nodes of the service as all theDownstreamdownstream nodes. This achieves Ingress Replication <xref format="default" target="RFC7988"/> that has been widely used for Multicast VPN (MVPN) <xref format="default" target="RFC6513"/> and Ethernet VPN(EVPN)<xref(EVPN) <xref format="default" target="RFC7432"/> bridging of Broadcast, Unknown Unicast, and Multicast (BUM) traffic. This Replication segmentcan be either provisioned locallyon ingress and egressnodes,nodes can either be provisioned locally or using dynamicauto-discoveryautodiscovery procedures for MVPN and EVPN. Note <xref format="default" 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 aRootroot node, intermediateReplication nodesreplication nodes, andLeafleaf nodes for efficient delivery of MVPN and EVPN BUM traffic.</t> </section> </section> <section anchor="RepSeg"title="Replication Segment">numbered="true" toc="default"> <name>Replication Segment</name> <t>Ina Segment Routing Domain,an SR domain, a Replication segment is a logical constructwhichthat connects aReplicationreplication node to a set ofDownstreamdownstream 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 controlplane.</t>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 the SR P2MP policy is specified in <xref format="default" target="I-D.ietf-pim-sr-p2mp-policy"/>. However, if local provisioning is used to stitch Replication segments, then a chain of Replication segmentsSHOULD NOT<bcp14>SHOULD NOT</bcp14> form a loop. If a control plane is used to stitch Replication segments, the control plane specificationMUST<bcp14>MUST</bcp14> preventloops,loops ortodetect and mitigate loops in steady state.</t> <t>A Replication segment is identified by the tuple <Replication-ID, Node-ID>, where:</t><t><list style="symbols"> <t>Replication-ID: An<dl newline="false" spacing="normal"> <dt>Replication-ID:</dt> <dd>An identifier for a Replication segment that is unique in context of theReplication node.</t> <t>Node-ID: Thereplication node.</dd> <dt>Node-ID:</dt> <dd>The address of theReplicationreplication nodethatfor the Replicationsegment is for.segment. Note that theRootroot of amulti-pointmultipoint service is also a Replicationnode.</t> </list></t>node.</dd> </dl> <t>Replication-ID is avariable lengthvariable-length field. In the simplest case, it can be a 32-bit number, but it can be extended or modified as required based on the specific use of a Replication segment. This is out of scope for this document. The length of the Replication-ID is specified in the signaling mechanism used for the Replication segment. Examples of such signaling and extensions are described in <xref format="default" target="I-D.ietf-pim-sr-p2mp-policy"/>. When the PCE signals a Replication segment to its node, the <Replication-ID, Node-ID> tuple identifies the segment.</t> <t>A Replication segment includes the followingelements: <list style="symbols"> <t>Replication SID: Theelements:</t> <dl newline="false" spacing="normal"> <dt>Replication-SID:</dt> <dd>The Segment Identifier of a Replication segment. This isaan SR-MPLS label oraan SRv6 SID <xreftarget="RFC8402"/>.</t> <t>Downstream nodes: Setformat="default" target="RFC8402"/>.</dd> <dt>Downstream nodes:</dt> <dd>Set of nodes inSegment Routingan SR domain to which a packet is replicated by the Replicationsegment.</t> <t>Replication state: See below.</t> </list></t>segment.</dd> <dt>Replication state:</dt> <dd>See below.</dd> </dl> <t>TheDownstreamdownstream nodes and Replication state (RS) of a Replication segment can change over time, depending on the network state andLeafleaf nodes of amulti-pointmultipoint service that the segment is part of.</t><t>Replication SID<t>The Replication-SID identifies the Replication segment in the forwarding plane. At aReplicationreplication node, theReplication SIDReplication-SID operates onReplication statethe RS of the Replication segment.</t><t>Replication state<t>RS is a list ofreplicationReplication branches to theDownstreamdownstream nodes. In this document, each branch is abstracted to a<Downstream<downstream node,Downstream Replication SID>downstream Replication-SID> tuple.<Downstream<downstream node> represents the reachability from theReplicationreplication node to theDownstreamdownstream node. In its simplest form, thisMAY<bcp14>MAY</bcp14> be specified as an interface or next-hop if the downstream node is adjacent to theReplicationreplication node. The reachability may be specified in terms of a Flexible Algorithm path (including the default algorithm) <xreftarget="RFC9350"/>,format="default" target="RFC9350"/> or specified by anSR explicitSR-explicit path represented either by aSID-listSID list (of one or more SIDs) or by a Segment Routing Policy <xref format="default" target="RFC9256"/>.Downstream Replication SIDThe downstream Replication-SID is theReplication SIDReplication-SID of the Replication segment at theDownstreamdownstream node.</t> <t>A packet is steered into a Replication segment at aReplicationreplication node in two ways:</t><t><list style="symbols"> <t>When<ul spacing="normal"> <li>When theActive Segmentactive segment <xref format="default" target="RFC8402"/> is a locally instantiatedReplication SID</t> <t>ByReplication-SID.</li> <li>By theRootroot of amulti-pointmultipoint service based on local configuration that is outside the scope of thisdocument.</t> </list></t>document.</li> </ul> <t>In either case, the packet is replicated to eachDownstreamdownstream node in the associatedReplication state.</t>RS.</t> <t>If aDownstreamdownstream node is an egress(Leaf)(leaf) of themulti-pointmultipoint service, no further replication is needed. TheLeafleaf node's Replication segment has an indicator forLeaf rolethe leaf role, and it does not have anyReplication state i.e.RS (i.e., the list of Replication branches isempty.empty). TheReplication SIDReplication-SID at aLeafleaf nodeMAY<bcp14>MAY</bcp14> be used to identify themulti-pointmultipoint service. Notice that the segment on theLeafleaf node is still referred to as aReplication segment"Replication segment" for the purpose of generalization.</t> <t>A node can be aBud node, i.e.bud node (i.e., it is aReplicationreplication node and aLeafleaf node of amulti-pointmultipoint service <xreftarget="I-D.ietf-pim-sr-p2mp-policy"/>.format="default" target="I-D.ietf-pim-sr-p2mp-policy"/>). The Replication segment of aBudbud node has a list of ReplicationBranchesbranches as well asLeafa leaf role indicator.</t> <t>Inprincipleprinciple, it is possible for different Replication segments to replicate packets to the same Replication segment on aDownstreamdownstream node. However, such usage is intentionally left out of scope of this document.</t> <sectiontitle="SR-MPLS data plane">numbered="true" toc="default"> <name>SR-MPLS Data Plane</name> <t>When theActive Segmentactive segment is aReplication SID,Replication-SID, the processing results in a POP <xref format="default" target="RFC8402"/> operation and the lookup of the associatedReplication state.RS. For each replication in theReplication state,RS, the operation is a PUSH <xref format="default" target="RFC8402"/> of the downstreamReplication SIDReplication-SID and an optional segment liston toonto the packet to steer the packet to theDownstreamdownstream node.</t> <t>The operation performed on the incomingReplication SIDReplication-SID is NEXT <xref format="default" target="RFC8402"/> atLeaf/Bud nodesa leaf or bud node where delivery of payload off the tree is per local configuration. For some usages, this may involve looking at the nextSIDSID, forexampleexample, to get the necessary context.</t> <t>When theRootroot of amulti-pointmultipoint service steers a packet to a Replication segment, it results in a replication to eachDownstreamdownstream node in the associatedreplication state.RS. The operation is a PUSH of thereplication SIDReplication-SID and an optional segment liston toonto thepacketpacket, which is forwarded to the downstream node.</t> <t>The following applies toReplication SIDa Replication-SID in MPLS encapsulation:</t><t><list style="symbols"> <t>SIDs MAY<ul spacing="normal"> <li>SIDs <bcp14>MAY</bcp14> be inserted before the downstream SR-MPLSReplication SIDReplication-SID in order to guide a packet from a non-adjacent SR node to aReplication node.</t> <t>A Replicationreplication node.</li> <li>A replication nodeMAY<bcp14>MAY</bcp14> replicate a packet to a non-adjacentDownstreamdownstream node using SIDs it inserts in the copy preceding the downstreamReplication SID.Replication-SID. TheDownstreamdownstream node may be aLeafleaf node of the Replication segment,oranotherReplicationreplication node, or both in the case ofBud node.</t> <t>A Replicationa bud node.</li> <li>A replication nodeMAY<bcp14>MAY</bcp14> use anAnycast SIDAnycast-SID or a Border Gateway Protocol (BGP)PeerSet SIDPeerSet-SID in the segment list to send a replicated packet to one downstreamReplicationreplication node inan Anycasta set of Anycast nodes. This occurs if and only if all nodes in the set have an identicalReplication SIDReplication-SID and reach the same set ofreceivers.</t> <t>Forreceivers.</li> <li>For some use cases, thereMAY<bcp14>MAY</bcp14> be SIDs after theReplication SIDReplication-SID in the segment list of a packet. These SIDs are used only by theLeaf/Budleaf and bud nodes to forward a packet off the tree independent of theReplication SID.Replication-SID. Coordination regarding the absence or presence and value of context information forLeaf/Budleaf and bud nodes is outside the scope of thisdocument.</t> </list></t>document.</li> </ul> </section> <section anchor="SRv6"title="SRv6 data plane">numbered="true" toc="default"> <name>SRv6 Data Plane</name> <t>For SRv6 <xref format="default" target="RFC8986"/>, this document specifies“Endpoint"Endpoint withreplication”replication and/or decapsulate" behavior (End.Replicate for short) to replicate a packet and forward the replicas according toa Replication state.</t>an RS.</t> <t>When processing a packet destined to a localReplication SID,Replication-SID, the packet is replicated according to the associatedReplication stateRS toDownstreamdownstream nodes and/or locally delivered off the tree when this is aLeaf/Bud node.Forleaf or bud node. For replication, the outer header isre-used,reused, and theDownstream Replication SID,downstream Replication-SID, fromReplication state,RS, is written into the outer IPv6 headerdestination address.Destination Address (DA). If required, an optional segment list may be used on some branches using H.Encaps.Red <xref format="default" target="RFC8986"/> (while some other branches may not need that). Note that this H.Encaps.Red is independent of thereplication segment –Replication segment: it is just used to steer the replicated packet on atraffic engineeredtraffic-engineered path to aDownstreamdownstream node. The penultimate segment in the encapsulating IPv6 header will execute the Ultimate Segment Decapsulation (USD) flavor <xref format="default" target="RFC8986"/> of End/End.X behavior and forward the inner (replicated) packet to theDownstreamdownstream node. If H.Encaps.Red is used to steer a replicated packet to aDownstreamdownstream node, the operator must ensure the MTU on path to theDownstreamdownstream node is sufficient to account for additional SRv6 encapsulation. This also applies when the Replication segment is for theRootroot node, whose upstream node has placed the Replication-SID in the header.</t> <t>A local application onRoot, for e.g.root (e.g., MVPN <xref format="default" target="RFC6513"/> or EVPN <xreftarget="RFC7432"/>,format="default" target="RFC7432"/>) may also apply H.Encaps.Red and then steer the resulting traffic into the Replication segment. Again, note thattheH.Encaps.Red is independent of the Replicationsegment –segment: it is the action of the application (e.g.MVPN/EVPNMVPN or EVPN service). If the service is on aRootroot node, then the two H.Encaps mentioned, one for the service and the other in the previous paragraph for replication toDownstream node SHOULDthe downstream node, <bcp14>SHOULD</bcp14> be combined for optimization (to avoid extra IPv6 encapsulation).</t> <t>When processing a packet destined to a localReplication SID,Replication-SID, the IPv6 Hop LimitMUST<bcp14>MUST</bcp14> be decremented andMUST<bcp14>MUST</bcp14> be non-zero to replicate the packet. ARootroot node that encapsulates a payload can set the IPv6 Hop Limit based on a local policy. This local policySHOULD<bcp14>SHOULD</bcp14> set the IPv6 Hop Limit so that a replicated packet can reach the furthestLeafleaf node. ARootroot node can also have a local policy to set the IPv6 Hop Limit from the payload. In this case, the IPv6 Hop Limit may not be sufficient to get the replicated packet to all theLeaf nodes; non-replicationleaf nodes. Non-replication nodesi.e.(i.e., nodeswhichthat forward replicated packets based on the IPv6 locator unicastprefixprefix) can decrement the IPv6 Hop Limit to zero and originate ICMPv6Errorerror packets to theRootroot node. This can result in a storm of ICMPv6 packets (see <xref format="default" target="ICMP"/>) to theRootroot node. To avoid this, a ReplicationSegmentsegment has an optional IPv6 Hop Limitthreshold.Threshold. If this threshold is set, aReplicationreplication nodeMUST<bcp14>MUST</bcp14> discard an incoming packet with a localReplication SIDReplication-SID if the IPv6 Hop Limit in the packet is less than the threshold and log this in arate limitedrate-limited manner. The IPv6 Hop Limit ThresholdSHOULD<bcp14>SHOULD</bcp14> be set so that an incoming packet can be replicated to the furthestLeafleaf node.</t> <t>ForLeaf/Bud nodesleaf and bud nodes, local delivery off the tree is perReplication SIDReplication-SID or the next SID (if present in the SRH). For some usages, this may involve getting the necessary context either from the next SID (e.g., MVPN with a shared tree) or from thereplication SIDReplication-SID itself (e.g., MVPN with a 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 toReplication SIDa Replication-SID in SRv6 encapsulation:</t><t><list style="symbols"> <t>There MAY<ul spacing="normal"> <li>There <bcp14>MAY</bcp14> be SIDs preceding the SRv6Replication SIDReplication-SID in order to guide a packet from a non-adjacent SR node to aReplicationreplication node via an explicitpath.</t> <t>A Replicationpath.</li> <li>A replication nodeMAY<bcp14>MAY</bcp14> steer a replicated packet on an explicit path to a non-adjacentDownstreamdownstream node using SIDs it inserts in the copy preceding the downstreamReplication SID.Replication-SID. TheDownstreamdownstream node may be aLeafleaf node of the Replication segment,oranotherReplicationreplication node, or both in the case ofBud node.</t> <t>Fora bud node.</li> <li>For SRv6, as described in above paragraphs, the insertion of SIDs prior toReplication SIDthe Replication-SID entails a new IPv6 encapsulation withSRH, butthe SRH. However, this can be optimized onRootthe root node or for compressed SRv6SIDs.</t> <t>TheSIDs.</li> <li>The locator ofReplication SIDthe Replication-SID is sufficient to guide a packet on the shortestpath,path between non-adjacent nodes for default or Flexiblealgorithm, between non-adjacent nodes.</t> <t>A ReplicationAlgorithms.</li> <li>A replication nodeMAY<bcp14>MAY</bcp14> use anAnycast SIDAnycast-SID or a BGPPeerSet SIDPeerSet-SID in the segment list to send a replicated packet to one downstreamReplicationreplication node in an Anycastsetset. This occurs if and only if all nodes in the set have an identicalReplication SIDReplication-SID and reach the same set ofreceivers.</t> <t>There MAYreceivers.</li> <li>There <bcp14>MAY</bcp14> be SIDs after theReplication SIDReplication-SID in the SRH of a packet. These SIDs are used to provide additional context for processing a packet locally at the node where theReplication SIDReplication-SID is theActive Segment.active segment. Coordination regarding the absence or presence and value of context information forLeaf/Budleaf and bud nodes is outside the scope of thisdocument.</t> </list></t>document.</li> </ul> <sectiontitle="End.Replicate:numbered="true" toc="default"> <name>End.Replicate: Replicate and/orDecapsulate">Decapsulate</name> <t>The "Endpoint with replication and/ordecapsulate behaviordecapsulate" (End.Replicate for short) is a variant of End behavior. Thepseudo-codepseudocode in this section follows the convention introduced in <xreftarget="RFC8986">RFC 8986</xref>.</t> <t>A Replication stateformat="default" target="RFC8986"/>.</t> <t>An RS conceptually contains the following elements:</t><figure> <artwork><![CDATA[<sourcecode name="" type="pseudocode"><![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: {Downstreamdownstream node: <Node-Identifier>;Downstream Replication SID:downstream Replication-SID: R-SID; # Segment-List may be empty Segment-List: [SID-1, .... SID-N]; } }]]></artwork> </figure>]]></sourcecode> <t>Below is the Replicate function on a packet for Replication state (RS).</t><figure> <artwork><![CDATA[S01.<sourcecode name="" type="pseudocode"><![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 #RFC8986 Section 5.1,8986, Sections 5.1 and 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]]></sourcecode> <t>Notes:</t> <ul spacing="normal"> <li>The IPv6destination addressDA in the copy of a packet is set from the local state and not fromSRH</t> </list></t>the SRH.</li> </ul> <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.<sourcecode name="" type="pseudocode"><![CDATA[ S01. Lookup FUNCT portion of S to get Replication stateRS(RS) S02. If (IPv6 Hop Limit <= 1) { S03. Discard the packet S04. # ICMPv6 Time Exceeded is not permitted(ICMPv6 section below)(see Section 2.2.3) 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)bud) { S19. If (IPv6 NH == SRH and Segments Left > 0) { S20. Derive packet processingcontext(PPC)context (PPC) from Segment List S21. If (Segments Left != 0) { S22. Discard the packet S23. # ICMPv6 Parameter Problem message with Code 0 S24. # (Erroneous header field encountered) S25. # is not permitted(ICMPv6 section below)(Section 2.2.3) S26. } S27. } Else { S28. Derive packet processingcontext(PPC)context (PPC) from FUNCT ofReplication SIDReplicatio-SID S29. } S30. Process the next header S31.}]]></artwork> </figure>} ]]></sourcecode> <t>The processing of the Upper-Layer header of a packet matching the End.Replicate SID atLeaf/Buda leaf or bud node is as follows:</t><figure> <artwork><![CDATA[S01.<sourcecode name="" type="pseudocode"><![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 message with Code 4 S12. # (SRUpper-layer HeaderUpper-Layer header Error) S13. # is not permitted(ICMPv6 section below)(Section 2.2.3) S14. }]]></artwork> </figure> <t>Notes:<vspace blankLines="0"/></t> <t><list style="symbols"> <t>The]]></sourcecode> <t>Notes:</t> <ul spacing="normal"> <li>The behavior aboveMAY<bcp14>MAY</bcp14> result in a packet with a partially processed segment list in the SRH under some circumstances.Fox exampleFor example, a head node may encode acontext SIDcontext-SID in an SRH. As perpseudo-codethe pseudocode above, aReplicationreplication node that receives a packet with a localReplication SIDReplication-SID will not process the SRH segment list and will just forward a copy with an unmodified SRH toDownstream nodes.</t> <t>Thedownstream nodes.</li> <li>The packet processing contextusuallyis usually a FIB tableT</t> </list></t> <t>Processing the Replication SID may modify, if"T".</li> </ul> <t>If configured to process TLVs, processing the Replication-SID may modify 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> <sectiontitle="Hashednumbered="true" toc="default"> <name>Hashed Message Authentication Code (HMAC) SRHTLV">TLV</name> <t>If aRootroot node encodes acontext SIDcontext-SID in an SRH with an optional HMAC SRH TLV <xref format="default" target="RFC8754"/>, itMUST<bcp14>MUST</bcp14> set the 'D' bit as defined inSection 2.1.2<xref section="2.1.2" sectionFormat="of" target="RFC8754"/> because theReplication SIDReplication-SID is not part of the segment list in the SRH.</t> <t>HMAC generation and verification is as specified inRFC 8754.<xref format="default" target="RFC8754"/>. Verification of an HMAC TLV is determined by local configuration. If verification fails, an implementation ofReplication SID MUST NOTa Replication-SID <bcp14>MUST NOT</bcp14> originate an ICMPv6errorParameter Problem message(parameter problem,with code0).0. The failureSHOULD<bcp14>SHOULD</bcp14> be logged(rate limited)(rate-limited) and the packetSHOULD<bcp14>SHOULD</bcp14> be discarded.</t> </section> </section> <sectiontitle="OAM Operations"> <t>RFC 9259 <xrefnumbered="true" toc="default"> <name>OAM Operations</name> <t><xref format="default" target="RFC9259"/> specifies procedures forOAM operationsOperations, Administration, and Maintenance (OAM) like ping and traceroute on SRv6 SIDs.</t><t>It<t>Assuming the source node knows the Replication-SID a priori, it is possible to ping aReplication SIDReplication-SID of aLeaf/Bud node, assuming the sourceleaf or bud nodeknows the Replication SID a priori,directly by putting it in the IPv6destination addressDA withoutaan SRH or inaan SRH as the last segment. While it is not possible to ping aReplication SIDReplication-SID of a transit node because transit nodes do not processupper layerUpper-Layer headers, it is still possible to ping aReplication SIDReplication-SID ofLeaf/Buda leaf or bud node of a tree via theReplication SIDReplication-SID of intermediate transit nodes. The source of the pingMUST<bcp14>MUST</bcp14> compute the ICMPv6 Echo Request checksum using theReplication SIDReplication-SID ofLeaf/Budthe leaf or bud node asdestination address.the DA. The source can then send the Echo Request packet to a transit node'sReplication SID.Replication-SID. The transitnodes replicatenode replicates the packet by replacing the IPv6destination address tillDA until the packet reaches theLeaf/Bud nodeleaf or bud node, which responds with an ICMPv6 Echo Reply. Note that a transitReplicationreplication node may replicate Echo Request packets to otherLeaf/Budleaf or bud nodes. These nodes will drop the Echo Request due to an incorrect checksum. Procedures to prevent themis-deliverymisdelivery of an Echo Request may be addressed in a future document.Appendix A.2.1<xref format="default" target="A.2.1"/> illustrates examples of a ping to aReplication SID.</t>Replication-SID.</t> <t>Traceroute to aLeaf/Budleaf or bud nodeReplication SIDReplication-SID is not possible due torestrictionrestrictions prohibiting the origination of the ICMPv6 Time Exceeded error message for aReplication SIDReplication-SID as described inthe section below.</t><xref format="default" target="ICMP"/>.</t> </section> <section anchor="ICMP"title="ICMPv6numbered="true" toc="default"> <name>ICMPv6 ErrorMessages"> <t>ICMPv6 RFC <xrefMessages</name> <t><xref section="2.4" sectionFormat="of" target="RFC4443"/>Section 2.4states an ICMPv6 error messageMUST NOT<bcp14>MUST NOT</bcp14> be originated as a result of receiving a packet destined to an IPv6 multicast address. This is to prevent a source node from being overwhelmed by a storm of ICMPv6 error messages resulting from replicated IPv6packets from overwhelming a source node.packets. There are twoexceptions (1) theexceptions:</t> <ol> <li>The Packet Too Big message for Path MTU discovery,and (2)and</li> <li>The ICMPv6 Parameter ProblemMessage,message with Code 2 reporting an unrecognized IPv6option. Anoption.</li> </ol> <t>An implementation of a Replication segment for SRv6MUST<bcp14>MUST</bcp14> enforce these same restrictions and exceptions.</t> </section> </section> </section> <sectiontitle="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> <sectionanchor="IANA"title="IANA Considerations">numbered="true" toc="default"> <name>IANA Considerations</name> <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<table align="center" anchor="endpoint_cp_types"> <name>SRv6 EndpointBehaviors"> <ttcol align="left">Value</ttcol> <ttcol align="center">Hex</ttcol> <ttcolBehavior</name> <thead> <tr> <th align="left">Value</th> <th align="center">Hex</th> <th align="center">Endpointbehavior</ttcol> <ttcol align="center">Reference</ttcol> <c>75</c> <c>0x004B</c> <c>End.Replicate</c> <c>[This.ID]</c> </texttable>Behavior</th> <th align="center">Reference</th> <th align="center">Change Controller</th> </tr> </thead> <tbody> <tr> <td align="left">75</td> <td align="center">0x004B</td> <td align="center">End.Replicate</td> <td align="center">RFC 9524</td> <td align="center">IETF</td> </tr> </tbody> </table> </section> <section anchor="Security"title="Security Considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>The SID behaviors defined in this document are deployed within an SR domain <xref format="default" target="RFC8402"/>. An SR domain needs protection from outside attackersas(as described in <xreftarget="RFC8754"/> andformat="default" target="RFC8754"/>). The following is a brief reminder of the same:</t><t><list style="symbols"><ul spacing="normal"> <li> <t>For SR-MPLSdeployments:<list style="symbols"> <t>By disablingdeployments:</t> <ul spacing="normal"> <li>Disable MPLS on external interfaces of each edge node or any other technique to filter labeled traffic ingress on theseinterfaces.</t> </list></t>interfaces.</li> </ul> </li> <li> <t>For SRv6deployments:<list style="symbols"> <t>Allocatedeployments:</t> <ul spacing="normal"> <li>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 inboundinfrastructure access listInfrastructure Access Control List (IACL) that drops any incoming packet with adestination addressDA inS/s.</t>S/s.</li> <li> <t>Additionally, aniACLIACL may be applied to all nodes (k) provisioning SIDs as defined in thisspecification:<list style="symbols"> <t>Assignspecification:</t> <ul spacing="normal"> <li>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 adestination addressDA in Sk/sk if the source address is not inA/a.</t> </list></t> <t>DenyingA/a.</li> </ul> </li> <li>Deny traffic with spoofed source addresses by implementing recommendations in BCP 84 <xreftarget="RFC3704"/>.</t> <t>Additionallyformat="default" target="RFC3704"/>.</li> <li>Additionally, the block S/s from which SIDs are allocated may bea non-globally-routablean address that is not globally routable such asULAa Unique Local Address (ULA) or the prefix defined in <xreftarget="I-D.ietf-6man-sids"/>.</t> </list></t> </list>Failureformat="default" target="I-D.ietf-6man-sids"/>.</li> </ul> </li> </ul> <t>Failure to protect theSR MPLSSR-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 externalinterfaces,interfaces combined with failure to implement the recommendations of BCP 38 <xreftarget="RFC2827"/>orformat="default" target="RFC2827"/> or apply IACLs on nodes provisioningSIDs,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 the ingressfilterfilters above cannot take advantage of a stack ofreplicationReplication segments to perform amplification attacks nor link exhaustion attacks. Replication segment trees always terminate at aLeafleaf orBudbud node resulting in a decapsulation.This howeverHowever, this does allow an attacker to inject traffic to the receivers within a P2MP service.</t> <t>This document introducesaan SR segment endpoint behavior that replicates and decapsulates an inner payload for both the MPLS and IPv6 data planes. Similar to any MPLSend of stackend-of-stack label, or SRv6 END.D* behavior, if the protections described above are notimplementedimplemented, 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 stormtilluntil MPLS TTL (for SR-MPLS) or IPv6 Hop Limit (for SRv6) decrements to zero. A controlplane, for example PCE,plane such as PCE can be used to prevent loops. The control plane protocols (likePCEP,Path Computation Element Communication Protocol (PCEP), BGP, etc.) used to instantiate Replication segments can leverage their own security mechanisms such as encryption, authenticationfilteringfiltering, etc.</t> <t>For SRv6, <xref format="default" target="ICMP"/> describes an exception for the ICMPv6 Parameter ProblemMessage, code 2 ICMPv6 Error messages.message with Code 2. If an attacker sends a packet destined toReplication SIDa Replication-SID with the source address of a node and with an extension header using the 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 thisspecificationdocument does not specify any extension headers, any future extension of this documentdoingthat does so is susceptible to this security concern.</t> <t>If an attacker can forge an IPv6 packetwithwith:</t> <ul spacing="normal"> <li>the source address of anode, Replication SIDnode,</li> <li>a Replication-SID asdestination address and anthe DA, and</li> <li>an IPv6 Hop Limit such that nodeswhichthat forward replicated packets on an IPv6 locator unicast prefix, decrement the Hop Limit tozero, thenzero,</li> </ul> <t>then these nodes can cause a storm of ICMPv6Errorerror packets to overwhelm the source node under attack. The IPv6 Hop Limit Threshold check described in <xref format="default" 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</middle> <back> <displayreference target="I-D.ietf-pim-sr-p2mp-policy" to="P2MP-POLICY"/> <displayreference target="I-D.filsfils-spring-srv6-net-pgm-illustration" to="PGM-ILLUSTRATION"/> <displayreference target="I-D.ietf-6man-sids" to="SIDS-SRv6"/> <references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8986.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9259.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8754.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> </references> <references> <name>Informative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6513.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7432.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7988.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8660.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <reference anchor="I-D.ietf-pim-sr-p2mp-policy"> <front> <title>Segment Routing Point-to-Multipoint Policy</title> <author fullname="Daniel Voyer" initials="D." role="editor" surname="Voyer"> <organization>Bell Canada</organization> </author> <author fullname="Clarence Filsfils" initials="C." surname="Filsfils"> <organization>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"/> CiscoInc.</organization> </author> <author fullname="Rishabh Parekh" initials="R." surname="Parekh"> <organization>Cisco Systems,Inc. <vspace blankLines="0"/> US</t> <t>Email: zali@cisco.com</t> <t>Swadesh Agrawal <vspace blankLines="0"/> CiscoInc.</organization> </author> <author fullname="Hooman Bidgoli" initials="H." surname="Bidgoli"> <organization>Nokia</organization> </author> <author fullname="Zhaohui (Jeffrey) Zhang" initials="Z. J." surname="Zhang"> <organization>Juniper Networks</organization> </author> <date day="11" month="October" year="2023"/> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-pim-sr-p2mp-policy-07"/> </reference> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9350.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9256.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <reference anchor="I-D.filsfils-spring-srv6-net-pgm-illustration"> <front> <title>Illustrations for SRv6 Network Programming</title> <author fullname="Clarence Filsfils" initials="C." surname="Filsfils"> <organization>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"/> CiscoInc.</organization> </author> <author fullname="Pablo Camarillo" initials="P." role="editor" surname="Camarillo"> <organization>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'?>Inc.</organization> </author> <author fullname="Zhenbin Li" initials="Z." surname="Li"> <organization>Huawei Technologies</organization> </author> <author fullname="Satoru Matsushima" initials="S." surname="Matsushima"> <organization>SoftBank</organization> </author> <author fullname="Bruno Decraene" initials="B." surname="Decraene"> <organization>Orange</organization> </author> <author fullname="Dirk Steinberg" initials="D." surname="Steinberg"> <organization>Lapishills Consulting Limited</organization> </author> <author fullname="David Lebrun" initials="D." surname="Lebrun"> <organization>Google</organization> </author> <author fullname="Robert Raszuk" initials="R." surname="Raszuk"> <organization>Bloomberg LP</organization> </author> <author fullname="John Leddy" initials="J." surname="Leddy"> <organization>Individual Contributor</organization> </author> <date day="30" month="March" year="2021"/> </front> <seriesInfo name="Internet-Draft" value="draft-filsfils-spring-srv6-net-pgm-illustration-04"/> </reference> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3704.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2827.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-6man-sids.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/> </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> <sectiontitle="Illustrationanchor="Appendix" numbered="true" toc="default"> <name>Illustration of a ReplicationSegment">Segment</name> <t>This section illustrates an example of a single Replication segment. Examples showing Replicationsegmentsegments stitched together to form a P2MP tree (based on SR P2MP policy) are in <xref format="default" target="I-D.ietf-pim-sr-p2mp-policy"/>.</t> <t>Consider the following topology:</t><figure title="Topology<figure> <name>Topology forillustrationIllustration of a ReplicationSegment"> <artwork><![CDATA[Segment</name> <artwork align="left" alt="" name="" type=""><![CDATA[ R3------R6 / \ R1----R2----R5-----R7 \ / +--R4---+ ]]></artwork> </figure> <sectiontitle="SR-MPLS">numbered="true" toc="default"> <name>SR-MPLS</name> <t>In this example, the Node-SID of a node Rn is N-SIDn andAdjacency-SIDthe Adj-SID from node Rm to node Rn is A-SIDmn.InterfaceThe interface between Rm and Rn is Lmn. The state representation uses "R-SID->Lmn" to represent a packet replication with outgoingreplication SIDReplication-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,R6R6, and R7. TheReplication SIDReplication-SID at node n is R-SIDn. A packet replicated from R1 to R7 has to traverse R4.</t> <t>The Replicationsegment statesegments at nodes R1, R2,R6R6, and R7isare shown below. Note nodes R3,R4R4, and R5 do not havestate for thea Replication segment.</t> <t>Replication segment at R1:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R1>: Replication SID:<R-ID,R1>: Replication-SID: R-SID1 Replication state: R2:<R-SID2->L12><R-SID2->L12> R6:<N-SID6, R-SID6><N-SID6, R-SID6> R7:<N-SID4,<N-SID4, A-SID47,R-SID7> ]]></artwork> </figure>R-SID7></sourcecode> <t>Replication to R2 steers the packet directly to R2 on interface L12. Replication to R6, using N-SID6, steers the packet via the 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<sourcecode name="" type="pseudocode">Replication segment<R-ID,R2>: Replication SID:<R-ID,R2>: Replication-SID: R-SID2 Replication state: R2:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <t>Replication segment at R6:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R6>: Replication SID:<R-ID,R6>: Replication-SID: R-SID6 Replication state: R6:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <t>Replication segment at R7:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R7>: Replication SID:<R-ID,R7>: Replication-SID: R-SID7 Replication state: R7:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <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<ul spacing="normal"> <li>R1 performs the PUSH operation with just the <R-SID2> label for the replicated copy and sends it to R2 on interfaceL12.L12, since R1 is directly connected to R2. R2, asLeaf,leaf, performs the NEXT operation, pops the R-SID2labellabel, and delivers thepayload.</t> <t>R1payload.</li> <li>R1 performs the PUSH operation with the <N-SID6, R-SID6> label stack for the replicated copy to R6 and sends it to R2, which is the nexthop on the shortest path to R6. R2 performs the 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 NEXToperation and theoperation. The packet is then sent to R6 with <R-SID6> in the label stack. R6, asLeaf,leaf, performs the NEXT operation, pops the R-SID6labellabel, and delivers thepayload.</t> <t>R1payload.</li> <li>R1 performs the PUSH operation with the <N-SID4, A-SID47, R-SID7> label stack for the replicated copy to R7 and sends it to R2, which is the nexthop on the shortest path to R4. R2 is the penultimate hop for N-SID4; it performs penultimate hop popping, which corresponds to the NEXToperation and theoperation. The packet is then sent to R4 with <A-SID47, R-SID1> in the label stack. R4 performs the NEXT operation, pops A-SID47, and delivers the packet to R7 with <R-SID7> in the label stack. R7, asLeaf,leaf, performs the NEXT operation, pops the R-SID7labellabel, and delivers thepayload.</t> </list></t>payload.</li> </ul> </section> <sectiontitle="SRv6">numbered="true" toc="default"> <name>SRv6</name> <t>ForSRv6 ,SRv6, we use the SID allocation scheme, reproduced below, fromIllustrations"Illustrations for SRv6 NetworkProgrammingProgramming" <xreftarget="I-D.filsfils-spring-srv6-net-pgm-illustration"/></t> <t><list style="symbols"> <t>2001:db8::/32format="default" target="I-D.filsfils-spring-srv6-net-pgm-illustration"/>:</t> <ul spacing="normal"> <li>2001:db8::/32 is an IPv6 block allocated by a Regional Internet Registry (RIR) to theoperator</t> <t>2001:db8:0::/48operator.</li> <li>2001:db8:0::/48 is dedicated to the internal addressspace</t> <t>2001:db8:cccc::/48space.</li> <li>2001:db8:cccc::/48 is dedicated to the internal SRv6 SIDspace</t> <t>Wespace.</li> <li>We assume a location expressed in 64 bits and a function expressed in 16bits</t> <t>Nodebits.</li> <li>Node k has a classic IPv6 loopback address2001:db8::k/1282001:db8::k/128, which is advertised in the Interior Gateway Protocol(IGP)</t> <t>Node(IGP).</li> <li>Node k has 2001:db8:cccc:k::/64 for its local SID space. Its SIDs will be explicitly assigned from thatblock</t> <t>Nodeblock.</li> <li>Node k advertises 2001:db8:cccc:k::/64 in itsIGP</t> <t>FunctionIGP.</li> <li>Function :1:: (function 1, for short) represents the End function with the Penultimate Segment Pop (PSP) of the SRH(PSP)<xref format="default" target="RFC8986"/> and USDsupport</t> <t>Functionsupport.</li> <li>Function :Cn:: (function Cn, for short) represents the End.X function from to Node n with PSP and USDsupport</t> </list></t>support.</li> </ul> <t>Each node khas: <list style="symbols"> <t>Anhas:</t> <ul spacing="normal"> <li>An explicit SID instantiation 2001:db8:cccc:k:1::/128 bound to an End function with additional support for PSP andUSD</t> <t>AnUSD.</li> <li>An explicit SID instantiation 2001:db8:cccc:k:Cj::/128 bound to an End.X function to neighbor J with additional support for PSP andUSD</t> <t>AnUSD.</li> <li>An explicit SID instantiation 2001:db8:cccc:k:Fk::/128 bound to an End.Replicatefunction</t> </list></t>function.</li> </ul> <t>Assume a Replication segment identified with R-ID at Replication node R1 and downstream nodes R2,R6R6, and R7. TheReplication SIDReplication-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 Replicationsegment statesegments at nodes R1, R2,R6R6, and R7isare shown below. Note nodes R3,R4R4, and R5 do not havestate for thea Replication segment. The state representation uses "R-SID->Lmn" to represent a packet replication with outgoingreplication SIDReplication-SID R-SID sent on interface Lmn. "SL" representsandan optional segment list used to steer a replicated packet on a specific path to aDownstreamdownstream node.</t> <t>Replication segment at R1:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R1>: Replication SID:<R-ID,R1>: Replication-SID: 2001:db8:cccc:1:F1::0 Replication state: R2:<2001:db8:cccc:2:F2::0->L12><2001:db8:cccc:2:F2::0->L12> R6:<2001:db8:cccc:6:F6::0><2001:db8:cccc:6:F6::0> R7:<2001:db8:cccc:4:C7::0>,<2001:db8:cccc:4:C7::0>, SL:<2001:db8:cccc:7:F7::0> ]]></artwork> </figure><2001:db8:cccc:7:F7::0></sourcecode> <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 the 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<sourcecode name="" type="pseudocode">Replication segment<R-ID,R2>: Replication SID:<R-ID,R2>: Replication-SID: 2001:db8:cccc:2:F2::0 Replication state: R2:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <t>Replication segment at R6:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R6>: Replication SID:<R-ID,R6>: Replication-SID: 2001:db8:cccc:6:F6::0 Replication state: R6:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <t>Replication segment at R7:</t><figure> <artwork><![CDATA[Replication<sourcecode name="" type="pseudocode">Replication segment<R-ID,R7>: Replication SID:<R-ID,R7>: Replication-SID: 2001:db8:cccc:7:F7::0 Replication state: R7:<Leaf>]]></artwork> </figure><Leaf></sourcecode> <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<ul spacing="normal"> <li>R1 creates an encapsulated replicated copy (2001:db8::1, 2001:db8:cccc:2:F2::0) (A, B2), and sends it to R2 on interfaceL12.L12, since R1 is directly connected to R2. R2, asLeaf,leaf, removes the outer IPv6 header and delivers thepayload.</t> <t>R1payload.</li> <li>R1 creates an 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, asLeaf,leaf, removes the outer IPv6 header and delivers thepayload.</t>payload.</li> <li> <t>R1 has to steer the packet toDownstreamdownstream node R7 via node R4. It can do this in one of twoways:<list style="symbols"> <t>R1ways:</t> <ul spacing="normal"> <li>R1 creates an 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 the (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, which is the nexthop on the shortest path to 2001:db8:cccc:4::/64. R2 forwards the packet to R4 using 2001:db8:cccc:4::/64. R4 executes the End.X function on 2001:db8:cccc:4:C7::0, performs a USD action, removes the outer IPv6encapsulationencapsulation, and sends the resulting packet (2001:db8::1, 2001:db8:cccc:7:F7::0) (A, B2) to R7. R7, asLeaf,leaf, removes the outer IPv6 header and delivers thepayload.</t> <t>R1payload.</li> <li>R1 isRootthe root ofreplicationthe Replication segment. Therefore, it can combine above encapsulations to create an 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, which is the nexthop on the shortest path to 2001:db8:cccc:4::/64. R2 forwards the packet to R4 using 2001:db8:cccc:4::/64. R4 executes the End.X function on 2001:db8:cccc:4:C7::0, performs a PSP action, removesSRHthe SRH, and sends the resulting packet (2001:db8::1, 2001:db8:cccc:7:F7::0) (A, B2) to R7. R7, asLeaf,leaf, removes the outer IPv6 header and delivers thepayload.</t> </list></t> </list></t>payload.</li> </ul> </li> </ul> <sectiontitle="Pinging Replication SID">anchor="A.2.1" numbered="true" toc="default"> <name>Pinging a Replication-SID</name> <t>This section illustrates the ping of aReplication SID.</t>Replication-SID.</t> <t>Node R1 pingsreplication SIDthe Replication-SID of node R6 directly by sending the following packet:</t><t><list style="numbers"> <t>R1<ol spacing="normal" type="1"> <li>R1 to R6: (2001:db8::1, 2001:db8:cccc:6:F6::0; NH=ICMPv6) (ICMPv6 EchoRequest)</t> <t>NodeRequest).</li> <li>Node R6 as aLeafleaf processesupper layerthe upper-layer ICMPv6 Echo Request and responds with an ICMPv6 EchoReply</t> </list></t>Reply.</li> </ol> <t>Node R1 pingsReplication SIDthe Replication-SID of R7 via R4 by sending the following packet with the SRH:</t><t><list style="numbers"> <t>R1<ol spacing="normal" type="1"> <li>R1 to R4: (2001:db8::1, 2001:db8:cccc:4:C7::0) (2001:db8:cccc:7:F7::0; SL=1; NH=ICMPV6) (ICMPv6 EchoRequest)</t> <t>R4Request).</li> <li>R4 to R7: (2001:db8::1, 2001:db8:cccc:7:F7::0; NH=ICMPv6) (ICMPv6 EchoRequest)</t> <t>NodeRequest).</li> <li>Node R7 as aLeafleaf processesupper layerthe upper-layer ICMPv6 Echo Request and responds with an ICMPv6 EchoReply</t> </list></t>Reply.</li> </ol> <t>Assume node R4 is a transitReplicationreplication node withReplication SIDReplication-SID 2001:db8:cccc:4:F4::0 replicating to R7. Node R1 pingsReplication SIDthe Replication-SID of R7 viaReplication SIDthe Replication-SID of R4 as follows:</t><t><list style="numbers"> <t>R1<ol spacing="normal" type="1"> <li>R1 to R4: (2001:db8::1, 2001:db8:cccc:4:F4::0; NH=ICMPv6) (ICMPv6 EchoRequest)</t> <t>R4Request).</li> <li>R4 replicates to R7 by replacing the IPv6destination addressDA withReplication SIDthe Replication-SID of R7 from its Replicationstate</t> <t>R4state.</li> <li>R4 to R7: (2001:db8::1, 2001:db8:cccc:7:F7::0; NH=ICMPv6) (ICMPv6 EchoRequest)</t> <t>NodeRequest).</li> <li>Node R7 as aLeafleaf processesupper layerthe upper-layer ICMPv6 Echo Request and responds with an ICMPv6 EchoReply</t> </list></t>Reply.</li> </ol> </section> </section> </section> <section anchor="Acknowledgements" numbered="false" toc="default"> <name>Acknowledgements</name> <t>The authors would like to acknowledge <contact fullname="Siva Sivabalan"/>, <contact fullname="Mike Koldychev"/>, <contact fullname="Vishnu Pavan Beeram"/>, <contact fullname="Alexander Vainshtein"/>, <contact fullname="Bruno Decraene"/>, <contact fullname="Thierry Couture"/>, <contact fullname="Joel Halpern"/>, <contact fullname="Ketan Talaulikar"/>, <contact fullname="Darren Dukes"/> and <contact fullname="Jingrong Xie"/> for their valuable inputs.</t> </section> <section numbered="false" toc="default"> <name>Contributors</name> <contact fullname="Clayton Hassen"> <organization>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>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>Cisco Systems, Inc.</organization> <address> <postal> <city>San Jose</city> <region>CA</region> <country>United States of America</country> </postal> <email>arvvenka@cisco.com</email> </address> </contact> <contact fullname="Zafar Ali"> <organization>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>Cisco Systems, Inc.</organization> <address> <postal> <city>San Jose</city> <region>CA</region> <country>United States of America</country> </postal> <email>swaagraw@cisco.com</email> </address> </contact> <contact fullname="Jayant Kotalwar"> <organization>Nokia</organization> <address> <postal> <city>Mountain View</city> <region>CA</region> <country>United States of America</country> </postal> <email>jayant.kotalwar@nokia.com</email> </address> </contact> <contact fullname="Tanmoy Kundu"> <organization>Nokia</organization> <address> <postal> <city>Mountain View</city> <region>CA</region> <country>United States of America</country> </postal> <email>tanmoy.kundu@nokia.com</email> </address> </contact> <contact fullname="Andrew Stone"> <organization>Nokia</organization> <address> <postal> <city>Ottawa</city> <country>Canada</country> </postal> <email>andrew.stone@nokia.com</email> </address> </contact> <contact fullname="Tarek Saad"> <organization>Cisco Systems, Inc.</organization> <address> <postal> <country>Canada</country> </postal> <email>tsaad@cisco.com</email> </address> </contact> <contact fullname="Kamran Raza"> <organization>Cisco Systems, Inc.</organization> <address> <postal> <country>Canada</country> </postal> <email>skraza@cisco.com</email> </address> </contact> <contact fullname="Jingrong Xie"> <organization>Huawei Technologies</organization> <address> <postal> <city>Beijing</city> <country>China</country> </postal> <email>xiejingrong@huawei.com</email> </address> </contact> </section> </back> </rfc>