<?xml version="1.0"encoding="US-ASCII"?> <!-- This template is for creating an Internet Draft using xml2rfc, which is available here: http://xml.resource.org. -->encoding="UTF-8"?> <!DOCTYPE rfcSYSTEM "rfc2629.dtd"[<!-- One method to get references from the online citation libraries. There has to be one entity for each item to be referenced. An alternate method (rfc include) is described in the references. --> <!ENTITY RFC2119 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"> <!ENTITY RFC2205 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2205.xml"> <!ENTITY RFC2212 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2212.xml"> <!ENTITY RFC2629 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.2629.xml"> <!ENTITY RFC3209 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3209.xml"> <!ENTITY RFC3552 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.3552.xml"> <!ENTITY RFC4253 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4253.xml"><!ENTITYRFC4456 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4456.xml">nbsp " "> <!ENTITYRFC4655 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.4655.xml">zwsp "​"> <!ENTITYRFC5440 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5440.xml">nbhy "‑"> <!ENTITYRFC7752 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7752.xml"> <!ENTITY RFC7950 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7950.xml"> <!ENTITY RFC8345 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8345.xml"> <!ENTITY RFC8401 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8401.xml"> <!ENTITY RFC8444 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8444.xml"> <!ENTITY RFC5226 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.5226.xml"> <!ENTITY RFC6241 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6241.xml"> <!ENTITY RFC6242 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.6242.xml"> <!ENTITY RFC7589 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7589.xml"> <!ENTITY RFC7988 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.7988.xml"> <!ENTITY RFC8040 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8040.xml"> <!ENTITY RFC8174 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8174.xml"> <!ENTITY RFC8253 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8253.xml"> <!ENTITY RFC8279 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8279.xml"> <!ENTITY RFC8296 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8296.xml"> <!ENTITY RFC8402 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8402.xml"> <!ENTITY RFC8556 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC.8556.xml">wj "⁠"> ]><?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?> <!-- used by XSLT processors --> <!-- For a complete list and description of processing instructions (PIs), please see http://xml.resource.org/authoring/README.html. --> <!-- Below are generally applicable Processing Instructions (PIs) that most I-Ds might want to use. (Here they are set differently than their defaults in xml2rfc v1.32) --> <?rfc strict="yes" ?> <!-- give errors regarding ID-nits and DTD validation --> <!-- control the table of contents (ToC) --> <?rfc toc="yes"?> <!-- generate a ToC --> <?rfc tocdepth="4"?> <!-- the number of levels of subsections in ToC. default: 3 --> <!-- control references --> <?rfc symrefs="yes"?> <!-- use symbolic references tags, i.e, [RFC2119] instead of [1] --> <?rfc sortrefs="yes" ?> <!-- sort the reference entries alphabetically --> <!-- control vertical white space (using these PIs as follows is recommended by the RFC Editor) --> <?rfc compact="yes" ?> <!-- do not start each main section on a new page --> <?rfc subcompact="no" ?> <!-- keep one blank line between list items --> <?rfc iprnotified="no" ?> <!-- Change to "yes" if someone has disclosed IPR for the draft --> <!-- end of list of popular I-D processing instructions --><rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-bier-te-arch-13"category="std">number="9262" submissionType="IETF" category="std" consensus="true" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="4" symRefs="true" sortRefs="true" version="3"> <!-- xml2rfc v2v3 conversion 3.12.2 --> <front> <title abbrev="BIER-TE ARCH">Tree Engineering for Bit Index Explicit Replication (BIER-TE)</title> <seriesInfo name="RFC" value="9262"/> <author role="editor" fullname="Toerless Eckert"initials="T.T.E."initials="T." surname="Eckert"> <organization abbrev="Futurewei">Futurewei Technologies Inc.</organization> <address> <postal> <street>2330 Central Expy</street> <city>Santa Clara</city> <code>95050</code><country>USA</country><region>CA</region> <country>United States of America</country> </postal><email>tte+ietf@cs.fau.de</email><email>tte@cs.fau.de</email> </address> </author> <author fullname="Michael Menth"initials="M.M."initials="M." surname="Menth"> <organization>University of Tuebingen</organization> <address> <postal> <country>Germany</country> </postal> <email>menth@uni-tuebingen.de</email> </address> </author> <author fullname="Gregory Cauchie"initials="G.C."initials="G." surname="Cauchie"> <organization>KOEVOO</organization> <address> <postal> <country>France</country> </postal> <email>gregory@koevoo.tech</email> </address> </author> <datemonth="April"month="October" year="2022"/> <area>rtg</area> <workgroup>bier</workgroup> <keyword>BIER</keyword> <keyword>BIER-TE</keyword> <keyword>controller</keyword> <keyword>ECMP</keyword> <keyword>forwarding</keyword> <keyword>traffic-engineering</keyword> <keyword>multicast</keyword> <keyword>pseudocode</keyword> <keyword>routing</keyword> <keyword>traffic-steering</keyword> <keyword>tree-steering</keyword> <abstract> <t> This memo describes per-packet stateless strict and loose path steered replication and forwarding for "Bit Index Explicit Replication"(BIER, RFC8279) packets. It(BIER) packets (RFC 8279); it is calledBIER Tree"Tree Engineering for Bit Index Explicit Replication" (BIER-TE) and is intended to be used as the path steering mechanism for Traffic Engineering with BIER.</t> <t>BIER-TE introduces a new semantic for "bit positions"(BP). They(BPs). These BPs indicate adjacencies of the network topology, as opposed to (non-TE) BIER in which BPs indicate "Bit-Forwarding Egress Routers"(BFER).(BFERs). A BIER-TEpackets BitString"packets BitString" therefore indicates the edges of the (loop-free) treethatacross which thepacket ispackets are forwardedacrossby BIER-TE. BIER-TE can leverage BIER forwarding engines with little changes. Co-existence of BIER and BIER-TE forwarding in the same domain ispossible,possible -- forexampleexample, by using separate BIER"sub-domains""subdomains" (SDs). Except for the optional routed adjacencies, BIER-TE does not require a BIER routingunderlay,underlay and can therefore operate without depending onana routing protocol such as the "Interior GatewayRouting protocol"Protocol" (IGP).</t> </abstract> </front> <middle> <section anchor="overview"title="Overview"> <t> BIER-TEnumbered="true" toc="default"> <name>Overview</name> <t>"Tree Engineering for Bit Index Explicit Replication" (BIER-TE) is based on the (non-TE) BIER architecture,terminologyterminology, and packet formats as described in <xreftarget="RFC8279"/>target="RFC8279" format="default"/> and <xreftarget="RFC8296"/>.target="RFC8296" format="default"/>. This document describesBIER-TE inBIER-TE, with the expectation that the reader is familiar with these two documents.</t> <t>BIER-TE introduces a new semantic for "bit positions"(BP). They(BPs). These BPs indicate adjacencies of the network topology, as opposed to (non-TE) BIER in which BPs indicate "Bit-Forwarding Egress Routers"(BFER).(BFERs). A BIER-TEpackets BitString"packets BitString" therefore indicates the edges of the (loop-free) treethatacross which thepacket ispackets are forwardedacrossby BIER-TE. With BIER-TE, the "Bit Index Forwarding Table" (BIFT) of each"Bit Forwarding"Bit-Forwarding Router" (BFR) is only populated withBPBPs that are adjacent to the BFR in the BIER-TETopology.topology. Other BPs are empty in the BIFT. The BFRreplicatereplicates and forwards BIER packets to adjacent BPs that are set in thepacket.packets. BPs are normally also cleared upon forwarding to avoid duplicates and loops. </t> <t>BIER-TE can leverage BIER forwarding engines with little or no changes. It can also co-exist with BIER forwarding in the samedomain,domain -- forexampleexample, by using separate BIERsub-domains.subdomains. Except for the optional routed adjacencies, BIER-TE does not require a BIER routingunderlay,underlay and can therefore operate without depending onana routing protocol such as the "Interior GatewayRouting protocol"Protocol" (IGP).</t> <t>This document is structured as follows:<list style="symbols"> <t><xref target="introduction"/></t> <ul spacing="normal"> <li> <xref target="introduction" format="default"/> introduces BIER-TE with two forwarding examples, followed by an introductionofto the new concepts of the BIER-TE (overlay)topologytopology, and finally a summary of the relationship between BIER and BIER-TE and a discussion of accelerated hardwareforwarding.</t> <t><xref target="components"/>forwarding.</li> <li> <xref target="components" format="default"/> describes the components of the BIER-TEarchitecture, Flowarchitecture: the multicast flow overlay, the BIER-TE layer with the BIER-TE control plane (including the BIER-TEcontroller) andcontroller), the BIER-TE forwarding plane, and the routingunderlay.</t> <t><xref target="forwarding"/>underlay.</li> <li> <xref target="forwarding" format="default"/> specifies the behavior of the BIER-TE forwarding plane with the differenttypetypes of adjacencies and possible variations of BIER-TE forwarding pseudocode, and finally the mandatory and optionalrequirements.</t> <t><xref target="controller-ops"/>requirements.</li> <li> <xref target="controller-ops" format="default"/> describes operational considerations for the BIER-TE controller,foremostprimarily how the BIER-TE controller can optimize the use ofBPBPs by using specifictypetypes of BIER-TE adjacencies for differenttypetypes of topologicalsituations, butsituations. It also describes how to assign bits to avoid loops and duplicates(which(which, inBIER-TEBIER-TE, does not comefor free), and finally"for free"). Finally, it discusses how "SetIdentifier" (SI), "sub-domain" (SD)Identifiers" (SIs), "subdomains" (SDs), and BFR-ids can be managed by a BIER-TEcontroller,controller; examples andsummary.</t> <t><xref target="SR"/>a summary are provided.</li> <li> <xref target="SR" format="default"/> concludes this document; details regarding thetechnology specific sections of the document by further relatingrelationship between BIER-TEto Segment Routing (SR).</t> </list></t>and "Segment Routing" (SR) are discussed.</li> </ul> <t>Note that relatedwork,work <xreftarget="I-D.ietf-roll-ccast"/>target="I-D.ietf-roll-ccast" format="default"/> uses Bloom filters <xreftarget="Bloom70"/>target="Bloom70" format="default"/> to represent leaves or edges of the intended delivery tree. Bloom filters in general can support larger trees/topologies with fewer addressing bits than explicit BitStrings, but they introduce the heuristic risk of false positives and cannot clear bits in theBitStringBitStrings during forwarding to avoid loops. For these reasons,BIER-TE uses explicit BitStringsBIER-TE, likeBIER. TheBIER, uses explicit BitStrings. Explicit BitStringsofas used by BIER-TE can also be seen as a special type of Bloom filter, and this is how other related work <xreftarget="ICC"/>target="ICC" format="default"/> describes it.</t><!-- Removed for now by review with Lou Berger <section anchor="te" title="BIER-TE and Traffic Engineering (BIER-TE)"> <t>BIER-TE is not a standalone, complete traffic engineering signaling solution such as RSVP with RSVP-TE extensions (<xref target="RFC2205"/>, <xref target="RFC3209"/>). Instead it is a (non-TE) BIER derived architecture and forwarding plane that allows to signal "source-routed" paths and replication points without per-path, per-replication-point state on the transit nodes. This document introduces the name "Tree Engineering" for BitStrings using this semantic. BIER-TE is therefore more similar to Segment Routing (SR, (<xref target="RFC8402"/>)) than RSVP-TE. Note that SR does not provide stateless replication point and receiver set signaling in its packet header. See <xref target="SR"/> for a more detailed discussion of BIER-TE and SR.</t> <t>BIER-TE can be used alone in use cases not requiring bandwidth or buffer resource reservations, such as high resilient services through dual transmission with path diversity or optimization of network capacity utilization through calculated paths/trees ("load balancing across non-ECMP paths"). Due to its stateless BIER approach, BIER-TE does not create per-flow/per-tree state on intermedia nodes.</t> <t>BIER-TE can also be combined with bandwidth and buffer management functions to support traffic engineering such as per-flow guaranteed bandwidth and guaranteed latency across BIER-TE steered paths / trees. Combinations of BIER or BIER-TE with such per-tree/per-flow resource guarantees are called BIER-TE. The following paragraphs summarize options and considerations.</t> <t>In <xref target="components"/> below, the BIER-TE architecture specifies the BIER-TE Controller as an entity calculating both the BIER-TE topology and desired paths/trees for overlay flows based on the desired policies. A Path Computation Engine (PCE, see <xref target="RFC4655"/>) that can calculate the BitString for BIER-TE is an instance of such a BIER-TE Controller. If the PCE can also perform resource management such as per-flow bandwidth reservations and optional latency guarantees, then it becomes a PCE for BIER-TE with traffic engineering.</t> <t>To support bandwidth guarantees in the forwarding plane, the ingres BIER-TE node (BFIR) may need to have a per-flow policer if ingressed traffic is not trusted to stay within its admitted traffic envelope. This is a well understood policy function that can be deployed without changes to BIER-TE.</t> <t>If latency guarantees as required as for example by Guaranteed Services (<xref target="RFC2212"/>), then additional per-hop latency control in the forwarding plane can be required. This can also be added to BIER-TE deployments without changes to BIER-TE. Per-hop stateless solutions for this such as in <xref target="I-D.qiang-detnet-large-scale-detnet"/> would allow to maintain the per-hop stateless design goal of BIER-TE and expand it into BIER-TE. Per-hop stateful solutions like per-flow, per-hop shaping may also be beneficial given how BIER-TE eliminates the need for per-flow, per-hop multicast replication and steering state.</t> <t>Mechanisms how to combine BIER-TE or BIER with other mechanisms to build BIER-TE are outside the scope of this document. See <xref target="I-D.eckert-teas-bier-te-framework"/>.</t></section>--><section anchor="introduction" numbered="true" toc="default"> <name>Introduction</name> <section anchor="boilerplate"title="Requirements Language"> <t> Thenumbered="true" toc="default"> <name>Requirements Language</name> <t>The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<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"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they appear in all capitals, as shownhere. </t> </section>here.</t> </section> <sectionanchor="introduction" title="Introduction"> <sectionanchor="examples"title="Basic Examples">numbered="true" toc="default"> <name>Basic Examples</name> <t>BIER-TE forwarding is best introduced with simple examples. These examples use formal terms defined later inthethis document (<xreftarget="adjacencies"/>),target="adjacencies" format="default"/> in <xref target="btft"/>), including forward_connected(),forward_routed()forward_routed(), and local_decap(). </t> <t>Consider the simple network in the BIER-TE overview example shown in <xref target="basic-example"/>, with six BFRs. p1...p15 are the bit positions used. All BFRs can act as a "Bit-Forwarding Ingress Router" (BFIR); BFR1, BFR3, BFR4, and BFR6 can also be BFERs. "Forward_connected()" is the name used for adjacencies that represent subnet adjacencies of the network. "Local_decap()" is the name used for the adjacency that decapsulates BIER-TE packets and passes their payload to higher-layer processing. </t> <figureanchor="basic-example" title="BIER-TE basic example">anchor="basic-example"> <name>BIER-TE Basic Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ BIER-TE Topology: Diagram: p5 p6 --- BFR3 --- p3/ p13 \p7 p15 BFR1 ---- BFR2 BFR5 ----- BFR6 p1 p2 p4\ p14 /p10 p11 p12 --- BFR4 --- p8 p9 (simplified) BIER-TE Bit Index Forwarding Tables(BIFT):(BIFTs): BFR1: p1 -> local_decap() p2 -> forward_connected() to BFR2 BFR2: p1 -> forward_connected() to BFR1 p5 -> forward_connected() to BFR3 p8 -> forward_connected() to BFR4 BFR3: p3 -> forward_connected() to BFR2 p7 -> forward_connected() to BFR5 p13 -> local_decap() BFR4: p4 -> forward_connected() to BFR2 p10 -> forward_connected() to BFR5 p14 -> local_decap() BFR5: p6 -> forward_connected() to BFR3 p9 -> forward_connected() to BFR4 p12 -> forward_connected() to BFR6 BFR6: p11 -> forward_connected() to BFR5 p15 -> local_decap()]]></artwork></figure> <t> Consider the simple network in the above BIER-TE overview example picture with 6 BFRs. p1...p15 are the bit positions used. All BFRs can act as an ingress BFR (BFIR), BFR1, BFR3, BFR4 and BFR6 can also be BFERs. Forward_connected() is the name for adjacencies that are representing subnet adjacencies of the network. Local_decap() is the name of the adjacency to decapsulate BIER-TE packets and pass their payload to higher layer processing. </t>]]></artwork> </figure> <t> Assume that a packet from BFR1 should be sent via BFR4 to BFR6. This requires a BitString (p2,p8,p10,p12,p15). When this packet is examined by BIER-TE on BFR1, the only bit position from the BitString that is also set in the BIFT is p2. This will cause BFR1 to send the only copy of the packet to BFR2. Similarly, BFR2 will forward to BFR4 because of p8, BFR4 to BFR5 because ofp10p10, and BFR5 to BFR6 because of p12.p15 p15 finally makes BFR6 receive and decapsulate the packet. </t> <t>To send a copy to BFR6 via BFR4 and also a copy to BFR3, the BitString needs to be (p2,p5,p8,p10,p12,p13,p15). When this packet is examined by BFR2, p5 causes one copy to be sent to BFR3 and p8 one copy to BFR4. When BFR3 receives the packet, p13 will cause it to receive and decapsulate the packet. </t> <t>If instead the BitString was (p2,p6,p8,p10,p12,p13,p15), the packet would be copied by BFR5 towards BFR3 because of p6 instead of being copied by BFR2 to BFR3 because of p5 in the prior case. Thisis showingdemonstrates the ability of theshownBIER-TETopologytopology, as shown in <xref target="basic-example"/>, to make the traffic pass across any possible path and be replicated where desired. </t> <t>BIER-TE has various optionsto minimizefor minimizing BP assignments, many of which are based on out-of-band knowledge about the required multicast traffic paths and bandwidth consumption in the network,such ase.g., frompre-deploymentpredeployment planning.</t> <t><xreftarget="basic-overlay"/>target="basic-overlay" format="default"/> shows a modified example, in which Rtr2 and Rtr5 are assumed not to support BIER-TE, so traffic has to be unicast encapsulated across them. Toemphasize non-L2, butexplicitly distinguish routed/tunneled forwarding of BIER-TEpackets,packets from Layer 2 forwarding (forward_connected()), these adjacencies are called"forward_routed"."forward_routed()" adjacencies. Otherwise, there is no difference in their processing over the aforementioned forward_connected() adjacencies.</t> <t>In addition, bits are saved in the following example by assuming that BFR1 only needs to be a BFIRbut-- not a BFER or a transit BFR.</t> <figureanchor="basic-overlay" title="BIER-TE basic overlay example">anchor="basic-overlay"> <name>BIER-TE Basic Overlay Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ BIER-TE Topology: Diagram: p1 p3 p7 ....> BFR3 <.... p5 ........ ........> BFR1 (Rtr2) (Rtr5) BFR6 ........ ........> p9 ....> BFR4 <.... p6 p2 p4 p8 (simplified) BIER-TE Bit Index Forwarding Tables(BIFT):(BIFTs): BFR1: p1 -> forward_routed() to BFR3 p2 -> forward_routed() to BFR4 BFR3: p3 -> local_decap() p5 -> forward_routed() to BFR6 BFR4: p4 -> local_decap() p6 -> forward_routed() to BFR6 BFR6: p7 -> forward_routed() to BFR3 p8 -> forward_routed() to BFR4 p9 -> local_decap()]]></artwork></figure>]]></artwork> </figure> <t>To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, the BitString is (p1,p5,p9).FromA packet from BFR1 via BFR4 to be received byBFR6,BFR6 uses the BitStringis(p2,p6,p9). A packet from BFR1 to be received by BFR3,BFR4 and from BFR3 to be received by BFR6 uses (p1,p2,p3,p4,p5,p9). A packet from BFR1 to be received by BFR3,BFR4 and from BFR4 to be received by BFR6 uses (p1,p2,p3,p4,p6,p9). A packet from BFR1 to be received by BFR4,andthen from BFR4 to be received byBFR6BFR6, and finally fromthereBFR6 to be received byBFR3BFR3, uses (p2,p3,p4,p6,p7,p9). A packet from BFR1 to be received by BFR3,andthen from BFR3 to be received by BFR6, and finally from BFR6thereto be received byBFR4BFR4, uses(p1,p3,p4,p5,p8,p9).</t>(p1,p3,p4,p5,p8,p9). </t> </section> <section anchor="topology"title="BIER-TEnumbered="true" toc="default"> <name>BIER-TE Topology andadjacencies">Adjacencies</name> <t>The key new component in BIER-TE compared to (non-TE) BIER is the BIER-TE topology as introduced through the two examples in <xreftarget="examples"/>.target="examples" format="default"/>. It is used to control where replication can or should happen and how to minimize the required number ofBPBPs for adjacencies. </t> <t> The BIER-TETopologytopology consists of the BIFTs of all theBFRBFRs and can also be expressed as a directed graph where the edges are the adjacencies between the BFRslabelledlabeled with the BP used for the adjacency. Adjacencies are naturally unidirectional. A BP can be reused across multiple adjacencies as long as this does not lead to undesired duplicates orloopsloops, as explained in <xreftarget="avoiding"/>.target="avoiding" format="default"/>. </t> <t>If the BIER-TE topology represents (a subset of) the underlying(layer(Layer 2) topology of the network as shown in the first example, this may be calleda "native"an "underlay" BIER-TE topology. A topology consisting only of"forward_routed""forward_routed()" adjacencies as shown in the second example may be called an "overlay" BIER-TE topology. A BIER-TE topology with both forward_connected() and forward_routed() adjacencies may be called a "hybrid" BIER-TE topology.</t> </section><!-- topology --><section anchor="comparison"title="Relationshipnumbered="true" toc="default"> <name>Relationship toBIER">BIER</name> <t>BIER-TE is designed so that its forwarding plane is a simple extension to the (non-TE) BIER forwarding plane, hence allowingforit to be added to BIER deployments where it can be beneficial.</t> <t>BIER-TE is also intended as an option to expand the BIER architecture into deployments where (non-TE) BIER may not be the best fit, such as statically provisioned networkswith needs forthat need path steering butwithout desire fordo not want distributed routing protocols.</t><t><list style="numbers"><ol spacing="normal" type="1"><li> <t>BIER-TE inherits the following aspects from BIER unchanged:<list style="numbers"> <t>The</t> <ol spacing="normal" type="%p%c"><li>The fundamental purpose of per-packet signaled replication and delivery via aBitString.</t> <t>TheBitString.</li> <li>The overallarchitecture consistingarchitecture, which consists of threelayers,layers: the flow overlay, the BIER(-TE)layerlayer, and the routingunderlay.</t> <t>Theunderlay.</li> <li>The supported encapsulations <xreftarget="RFC8296"/>.</t> <t>The semantictarget="RFC8296" format="default"/>.</li> <li>The semantics of all<xref target="RFC8296"/>BIER header elements <xref target="RFC8296" format="default"/> used by the BIER-TE forwardingplaneplane, other than the semantic of the BP in theBitString.</t> <t>TheBitString.</li> <li>The BIER forwarding plane, except for how bits have to be cleared duringreplication.</t> </list></t>replication.</li> </ol> </li> <li> <t>BIER-TE has the following key changes with respect to BIER:<list style="numbers"> <t>In</t> <ol spacing="normal" type="%p%c"><li>In BIER, bits in the BitString of a BIER packet header indicate aBFERBFER, and bits in the BIFT indicate the BIER controlplaneplane's calculatednext-hop towardnext hop towards that BFER. In BIER-TE, a bit in the BitString of a BIER packet header indicates an adjacency in the BIER-TE topology, and only the BFR that is the upstream of that adjacency has its BP populated with the adjacency in itsBIFT.</t> <t>InBIFT.</li> <li>In BIER, the implied reference options for the core part of the BIER layer control plane are the BIER extensions for distributed routing protocols.This includes ISIS/OSPFThese include IS-IS and OSPF extensions for BIER, as specified in <xreftarget="RFC8401"/>target="RFC8401" format="default"/> and <xreftarget="RFC8444"/>.</t> <t>Thetarget="RFC8444" format="default"/>, respectively.</li> <li>The reference option for the core part of the BIER-TE control plane is the BIER-TE controller. Nevertheless, both the BIER and BIER-TEBIFTsBIFTs' forwarding plane state could equally be populated by anymechanism.</t> <t>Assumingmechanism.</li> <li>Assuming the reference options for the control plane, BIER-TE replaces in-network autonomous pathcalculation bycalculations with explicit paths calculated by the BIER-TEcontroller.</t> </list></t>controller.</li> </ol> </li> <li> <t>The following elements/functions described in the BIER architecture are not required by the BIER-TE architecture:<list style="numbers"> <t>"Bit</t> <ol spacing="normal" type="%p%c"><li>"Bit Index Routing Tables" (BIRTs) are not required on BFRs for BIER-TE when using a BIER-TEcontrollercontroller, because the controller can directly populate the BIFTs. In BIER, BIRTs are populated by the distributed routing protocol support for BIER, allowing BFRs to populate their BIFTs locally from their BIRTs. Other BIER-TE control plane or management plane options may introduce requirements for BIRTs for BIER-TEBFRs.</t> <t>TheBFRs.</li> <li>The BIER-TE layer forwarding plane does not require BFRs to have a uniqueBP and therefore also noBP; see <xref target="leaf-bfer" format="default"/>. Therefore, BFRs may not have a uniqueBFR-id. SeeBFR-id; see <xreftarget="leaf-bfer"/>.</t> <t>Identificationtarget="bfr-id"/>.</li> <li>Identification of BFRs by the BIER-TE control plane is outside the scope of this specification. Whereas the BIER control plane uses BFR-ids in itsBFR to BFRBFR-to-BFR signaling, a BIER-TE controller may choose any form of identification deemedappropriate.</t> <t>BIER-TEappropriate.</li> <li>BIER-TE forwarding does not require the BFIR-id field of the BIER packetheader.</t> </list></t>header.</li> </ol> </li> <li> <t>Co-existence of BIER and BIER-TE in the same network requires the following:<list style="numbers"> <t>The</t> <ol spacing="normal" type="%p%c"><li>The BIER/BIER-TE packet header needs to allow the addressing of both BIER and BIER-TE BIFTs. Depending on the encapsulation option, the same SD may or may not be reusable across BIER and BIER-TE. See <xreftarget="encapsulation"/>.target="encapsulation" format="default"/>. In either case, a packet is alwaysonlyforwardedend-to-endonly end to end via BIER or via BIER-TE(ships("ships in thenights forwarding).</t> <t>BIER-TEnight" forwarding).</li> <li>BIER-TE deployments will have to assign BFR-ids to BFRs and insert them into the BFIR-id field of BIER packetheadersheaders, asBIER does,does BIER, whenever the deployment uses (unchanged) components developed for BIER that useBFR-id,BFR-ids, such as multicast flow overlays or BIER layer control plane elements. See also <xreftarget="bfr-id"/>.</t> </list></t> </list></t>target="bfr-id" format="default"/>.</li> </ol> </li> </ol> </section> <section anchor="fwd-comparison"title="Accelerated/Hardware forwarding comparison">numbered="true" toc="default"> <name>Accelerated Hardware Forwarding Comparison</name> <t>BIER-TE forwarding rules, especiallytheBitStringparsingparsing, are designed to be as close as possible to those ofBIER inBIER, with the expectation that this eases the programming of BIER-TE forwarding code and/or BIER-TE forwarding hardware on platforms supporting BIER. The pseudocode in <xreftarget="pseudocode"/>target="pseudocode" format="default"/> shows how existing (non-TE) BIER/BIFT forwarding can be modified to support the required BIER-TE forwarding functionality (<xreftarget="requirements"/>),target="requirements" format="default"/>), by using the BIER BIFT's "Forwarding Bit Mask" (F-BM):Onlyonly the clearing of bits to avoid sending duplicate packets to a BFR's neighbor is skipped in BIER-TEforwardingforwarding, because it is not necessary and could not be done when using a BIER F-BM.</t> <t>Whether to use BIER or BIER-TE forwarding is simply a choice of the mode of the BIFT indicated by the packet (BIER or BIER-TE BIFT). This is determined by the BFR configuration for theencapsulation,encapsulation; see <xreftarget="encapsulation"/>.</t>target="encapsulation" format="default"/>.</t> </section><!-- fwd-comparison --></section><!-- overview --><section anchor="components"title="Components">numbered="true" toc="default"> <name>Components</name> <t>BIER-TE can be thought of as beingconstituted fromcomposed of the same three layers as BIER:Thethe "multicast flow overlay", the "BIERlayer"layer", and the "routing underlay".The following picture<xref target="architecture"/> also shows how the"BIER layer"BIER layer isconstituted fromcomposed of the "BIER-TE forwarding plane" and the "BIER-TE control plane"representas represented by the "BIER-TEController".</t>controller". </t> <figureanchor="architecture" title="BIER-TE architecture">anchor="architecture"> <name>BIER-TE Architecture</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ <------BGP/PIM-----> |<-IGMP/PIM-> multicast flow <-PIM/IGMP->| overlay BIER-TE [BIER-TE Controller] <=> [BIER-TE Topology] control ^ ^ ^ plane / | \ BIER-TE control protocol | | |e.g.(e.g., YANG/NETCONF/RESTCONF | | |PCEP/...PCEP/...) v v v Src -> Rtr1 -> BFIR-----BFR-----BFER -> Rtr2 -> Rcvr |<----------------->| BIER-TE forwarding plane |<- BIER-TE domain->| |<--------------------->| Routing underlay]]></artwork></figure>]]></artwork> </figure> <section anchor="flow-overlay"title="Thenumbered="true" toc="default"> <name>The Multicast FlowOverlay">Overlay</name> <t>TheMulticast Flow Overlaymulticast flow overlay has the same role as that described for BIER in <xreftarget="RFC8279"/>, Section 4.3.target="RFC8279" sectionFormat="comma" section="4.3"/>. See also <xreftarget="engineered-bitstrings"/>.</t>target="engineered-bitstrings" format="default"/>.</t> <t>When a BIER-TE controller is used,then the signaling for the Multicast Flow Overlay mayit might also bepreferred to operatepreferable that multicast flow overlay signaling be performed through a central point of control. ForBGP basedBGP-based overlay flow services such as"Multicast VPN Using BIER" (<xref target="RFC8556"/>)"<xref target="RFC8556" format="title"/>" <xref target="RFC8556" format="default"/>, this can be achieved by making the BIER-TE controller operate as a BGP Route Reflector(<xref target="RFC4456"/>)<xref target="RFC4456" format="default"/> and combining it with signaling through BGP or a different protocol for the BIER-TEcontrollercontroller's calculated BitStrings. See<xref target="engineered-bitstrings"/>Sections <xref target="engineered-bitstrings" format="counter"/> and <xreftarget="bitstring-mappings"/>.</t>target="bitstring-mappings" format="counter"/>.</t> </section><!-- flow-overlay --><section anchor="control-plane"title="Thenumbered="true" toc="default"> <name>The BIER-TE ControlPlane">Plane</name> <t>In the (non-TE) BIER architecture <xreftarget="RFC8279"/>,target="RFC8279" format="default"/>, the BIERcontrol planelayer isnot explicitly separated fromsummarized in <xref target="RFC8279" sectionFormat="of" section="4.2"/>. This summary includes both theBIERfunctions of the BIER-layer control plane and forwarding plane,but instead their functions are summarized together in Section 4.2.without using those terms. Example standardized options for the BIER control plane includeISIS/OSPFIS-IS and OSPF extensions for BIER, as specified in <xreftarget="RFC8401"/>target="RFC8401" format="default"/> and <xreftarget="RFC8444"/>.</t>target="RFC8444" format="default"/>, respectively.</t> <t>For BIER-TE, the control planeincludesincludes, atminimuma minimum, the following functionality.</t><t><list style="hanging"> <t anchor="topology-control" hangText="1. BIER-TE<ol spacing="normal" type="1"><li> <t>BIER-TE topologycontrol:">Duringcontrol: During initial provisioning of the network and/or during modifications of its topology and/or services, the protocols and/or procedures to establish BIER-TEBIFTs: <list style="numbers"> <tBIFTs:</t> <ol spacing="normal" type="%p%c"> <li anchor="topology-control-1">Determine the desired BIER-TE topology foraBIER-TEsub-domains:subdomains: thenative and/or overlayadjacencies that are assigned to BPs. Topology discovery is discussed in <xreftarget="topology-discovery"/>target="topology-discovery" format="default"/>, and the various aspects of the BIER-TEcontrollerscontroller's determinationsaboutregarding the topology are discussed throughout <xreftarget="controller-ops"/></t> <t>Determinetarget="controller-ops" format="default"/>.</li> <li>Determine the per-BFR BIFT from the BIER-TE topology. This is achieved by simply extracting the adjacencies of the BFR from the BIER-TE topology and populating theBFRsBFR's BIFT withthem.</t> <t>Optionallythem.</li> <li>Optionally assign BFR-ids to BFIRs for later insertion into BIER headers on BFIRs asBFIR-id.BFIR-ids. Alternatively,BFIR-idBFIR-ids in BIER packet headers may be managed solely by the flow overlay layer and/or be unused. This is discussed in <xreftarget="bfr-id"/>.</t> <t>Install/updatetarget="bfr-id" format="default"/>.</li> <li>Install/update the BIFTs into the BFRsand optionallyand, optionally, BFR-ids into BFIRs. This is discussed in <xreftarget="topology-discovery"/>.</t> </list></t>target="topology-discovery" format="default"/>.</li> </ol> </li> <li> <tanchor="tree-control" hangText="2.anchor="tree-control"> BIER-TE treecontrol:">During operations of the network,control: During network operations, protocols and/or procedures to support creation/change/removal of overlay flows onBFIRs: <list style="numbers"> <t>ProcessBFIRs:</t> <ol spacing="normal" type="%p%c"><li>Process the BIER-TE requirements for the multicast overlay flow:BFIRBFIRs and BFERs of the flow as well as policies for the path selection of the flow. This is discussed in <xreftarget="te-considerations"/>.</t> <t>Determinetarget="te-considerations" format="default"/>.</li> <li>Determine the BitStringsand optionally Entropy. This isand, optionally, entropy. BitStrings are discussed in Sections <xref target="engineered-bitstrings" format="counter"/>, <xreftarget="engineered-bitstrings"/>, <xref target="te-considerations"/>target="te-considerations" format="counter"/>, and <xreftarget="bitstring-mappings"/>.</t> <t>Installtarget="bitstring-mappings" format="counter"/>. Entropy is discussed in <xref target="forward-ecmp"/>.</li> <li>Install state on the BFIR to impose the desired BIER packet header(s) for packets of the overlay flow. Different aspects of thisandpoint, as well as the nextpointpoint, are discussed throughout <xreftarget="bier-te-controller"/>target="bier-te-controller" format="default"/> and in <xreftarget="encapsulation"/>, but thetarget="encapsulation" format="default"/>. The mainresponsibility ofcomponent responsible for these two points iswiththeMulticast Flow Overlaymulticast flow overlay (<xreftarget="flow-overlay"/>),target="flow-overlay" format="default"/>), which is architecturally inherited fromBIER.</t> <t>InstallBIER.</li> <li>Install the necessary state on the BFERs to decapsulate the BIER packet header and properly dispatch itspayload.</t> </list></t> </list></t>payload.</li> </ol> </li> </ol> <section anchor="bier-te-controller"title="Thenumbered="true" toc="default"> <name>The BIER-TEController"> <t>[RFC-Editor: the following text has three references to anchors topology-control, topology-control-1 and tree-control. Unfortunately, XMLv2 does not offer any tagging that reasonable references are generated (i had this problem already in RFCs last year. Please make sure there are useful-to-read cross-references in the RFC in these three places after you convert to XMLv3.]</t>Controller</name> <t>This architecture describes the BIER-TE controlplaneplane, as shown in <xreftarget="architecture"/> to consisttarget="architecture" format="default"/>, as consisting of:<list style="symbols"> <t>A</t> <ul spacing="normal"> <li>A BIER-TEcontroller.</t> <t>BFR data-modelscontroller.</li> <li>BFR data models and protocols to communicate between the controller and BFRs in support of <xreftarget="topology-control">BIER-TEtarget="topology-control-1" format="none">BIER-TE topologycontrol</xref>,control</xref> (see the list under "BIER-TE topology control"), such as YANG/NETCONF/RESTCONF(<xref target="RFC7950"/>/<xref target="RFC6241"/>/<xref target="RFC8040"/>).</t> <t>BFR data-models<xref target="RFC7950" format="default"/> <xref target="RFC6241" format="default"/> <xref target="RFC8040" format="default"/>.</li> <li>BFR data models and protocols to communicate between the controller andBFIRBFIRs in support of <xreftarget="tree-control">BIER-TEtarget="tree-control" format="none">BIER-TE treecontrol</xref>,control</xref> (see <xref target="control-plane"/>, point 2.), such as BIER-TE extensions for <xreftarget="RFC5440"/>.</t> </list> </t>target="RFC5440" format="default"/>.</li> </ul> <t>The single, centralized BIER-TE controller is used in this document as the reference option for the BIER-TE controlplaneplane, but other options are equally feasible. The BIER-TE control plane could equally be implemented without automated configuration/protocols, by an operator via a CLI on the BFRs. In that case,operator configuredoperator-configured local policy on the BFIR would have to determine how to set the appropriate BIER header fields. The BIER-TE control plane could also be decentralized and/or distributed, but this document does not consider any additional protocols and/or procedureswhichthat would then be necessary to coordinate its (distributed/decentralized) entities to achieve theabove describedabove-described functionality.</t> <section anchor="topology-discovery"title="BIER-TEnumbered="true" toc="default"> <name>BIER-TE TopologydiscoveryDiscovery andcreation"> <t><xref target="topology-control-1">TheCreation</name> <t> <xref target="topology-control-1" format="none">The first itemoflisted for BIER-TE topology control</xref> (<xref target="control-plane"/>, point 1.a.) includes network topology discovery and BIER-TE topology creation. The latter describes the process by which aControllercontroller determines which routers are to be configured as BFRs and the adjacencies between them.</t> <t>In statically managed networks,such as ine.g., industrial environments, both discovery and creation can be a manual/offline process.</t> <t>In other networks, topology discovery may rely on such protocolsincludingas those that include extendinga "Link-State-Protocol" basedan IGP based on a link-state protocol into the BIER-TE controller itself, e.g., BGP-LS <xreftarget="RFC7752"/> (BGP-LS)target="RFC7752" format="default"/> or YANG topology <xreftarget="RFC8345"/> (YANG topology)target="RFC8345" format="default"/>, as well asBIER-TEmethods specificmethods,to BIER-TE -- forexampleexample, via <xreftarget="I-D.ietf-bier-te-yang"/>.target="BIER-TE-YANG" format="default"/>. These options are non-exhaustive.</t> <t>Dynamic creation of the BIER-TE topology can be as easy as mapping the network topology 1:1 to the BIER-TE topology by assigning a BP for every network subnet adjacency. In larger networks, it likely involves more complex policy and optimizationdecisionsdecisions, including how to minimize the number of BPs required and how to assign BPs across different BitStrings to minimize the number of duplicate packets across links when delivering an overlay flow toBFERBFERs using differentSIs/BitStrings.SIs:BitStrings. These topics are discussed in <xreftarget="controller-ops"/>.</t>target="controller-ops" format="default"/>.</t> <t>When the BIER-TE topologyishas been determined, the BIER-TEController thencontroller pushes theBitPositions/adjacenciesBPs/adjacencies to the BIFT of the BFRs. On eachBFRBFR, only thoseSI:BitPositions are populatedSIs:BPs that are adjacencies to other BFRs in the BIER-TEtopology.</t>topology are populated.</t> <t>Communications between the BIER-TEControllercontroller and BFRs for both BIER-TE topology control and BIER-TE tree controlisare ideally via standardized protocols anddata-modelsdata models such as NETCONF/RESTCONF/YANG/PCEP.Vendor-specificA vendor-specific CLI on the BFRs is also an option (as in many otherSDN"Software-Defined Network" (SDN) solutions lackingdefinitiondefinitions of standardized data models).</t> </section> <section anchor="engineered-bitstrings"title="Engineerednumbered="true" toc="default"> <name>Engineered Trees viaBitStrings">BitStrings</name> <t>In BIER, the same set ofBFERBFERs in a singlesub-domainsubdomain is always encoded as the same BitString. In BIER-TE, the BitString used to reach the same set ofBFERBFERs in the samesub-domainsubdomain can be different for different overlay flows because the BitString encodes the paths towards theBFER,BFERs, so the BitStrings from differentBFIRBFIRs to the same set ofBFERBFERs will often be different. Likewise, the BitString from the same BFIR to the same set ofBFERBFERs can be different for different overlay flowsfor policy reasonsif different policies should be applied to those overlay flows, such as shortest path trees, Steiner trees (minimum cost trees), diverse path trees forredundancyredundancy, and soon.</t>on. </t> <t>See also <xreftarget="I-D.ietf-bier-multicast-http-response"/>target="BIER-MCAST-OVERLAY" format="default"/> for an application leveraging BIER-TE engineered trees.</t> </section> <section anchor="changes-in-topo"title="Changesnumbered="true" toc="default"> <name>Changes in thenetwork topology">Network Topology</name> <t>If the network topology changes (not failure based) so that adjacencies that are assigned to bit positions are no longer needed, the BIER-TEControllercontroller canre-usereuse those bit positions for new adjacencies. First, these bit positions need to be removed from any BFIR flow state and BFR BIFTstate, thenstate. Then, they can be repopulated, first into the BIFT and then into the BFIR.</t> </section><!-- changes-in-topo --><section anchor="failures"title="Link/Nodenumbered="true" toc="default"> <name>Link/Node Failures andRecovery">Recovery</name> <t>Whenlinklinks or nodes fail or recover in the topology, BIER-TE could quickly respond withFRR"Fast Reroute" (FRR) procedures such as those described in <xreftarget="I-D.eckert-bier-te-frr"/>,target="BIER-TE-PROTECTION" format="default"/>, the details of which are out of scope for this document. It can also more slowly react by recalculating the BitStrings of affected multicast flows. This reaction is slower than the FRR procedure because the BIER-TEControllercontroller needs to receive link/node up/down indications, recalculate the desiredBitStringsBitStrings, and push them down into the BFIRs. With FRR, this is all performed locally on a BFR receiving the adjacency up/down notification.</t> </section><!-- failures --></section><!-- control-plane --></section><!-- XXX --><section anchor="forwarding-plane"title="Thenumbered="true" toc="default"> <name>The BIER-TE ForwardingPlane"> <t>[RFC-editor Q: "is constituted from" / "consists of" / "composed from..." ???]</t>Plane</name> <t>The BIER-TEForwarding Plane is constituted fromforwarding plane consists of the following components:<list style="numbers"> <t>On</t> <ol spacing="normal" type="1"><li>On a BFIR, imposition of the BIER header for packets from overlay flows. This is driven bya combination ofstate established by the BIER-TE controlplane and/orplane, the multicast flow overlay as explained in <xreftarget="flow-overlay"/>.</t> <t>Ontarget="flow-overlay" format="default"/>, or a combination of both.</li> <li>On BFRs (includingBFIRBFIRs andBFER),BFERs), forwarding/replication of BIER packets according to their SD, SI, "BitStringLength" (BSL),BitString and optionally EntropyBitString, and, optionally, entropy fields as explained in <xreftarget="forwarding"/>.target="forwarding" format="default"/>. Processing of other BIER headerfieldsfields, such asDSCPthe "Differentiated Services Code Point" (DSCP) field, is outside the scope of thisdocument.</t> <t>Ondocument.</li> <li>On BFERs, removal of the BIER header and dispatching of the payload according to state created by the BIER-TE control plane and/or overlaylayer.</t> </list> </t>layer.</li> </ol> <t>When the BIER-TEForwarding Planeforwarding plane receives a packet, it simply looks up the bit positions that are set in the BitString of the packet in the BIFT that was populated by the BIER-TEController.controller. For every BP that is set in theBitString,BitString andthathas one or more adjacencies in the BIFT, a copy is made according to thetypetypes of adjacencies for that BP in the BIFT. Before sending anycopy,copies, the BFR clears all BPs in the BitString of the packet for which the BFR has one or more adjacencies in the BIFT. Clearing these bitsinhibitsprevents packets from looping whenthe BitStringsa BitString erroneously includes a forwarding loop. When a forward_connected() adjacency has the "DoNotClear" (DNC) flag set,thenthis BP isre-setreset for the packet copied to that adjacency. See <xreftarget="forward-connected"/>.</t>target="forward-connected" format="default"/>.</t> </section><!-- forwarding-plane --><section anchor="routing-underlay"title="Thenumbered="true" toc="default"> <name>The RoutingUnderlay">Underlay</name> <t>For forward_connected() adjacencies, BIER-TEis sendingsends BIER packets to directly connected BIER-TE neighbors as L2(unicasted)(unicast) BIER packets without requiring a routing underlay. For forward_routed() adjacencies, BIER-TE forwarding encapsulates a copy of the BIER packet so that it can be delivered by the forwarding plane of the routing underlay to the routable destination address indicated in the adjacency. See <xreftarget="forward-routed"/>target="forward-routed" format="default"/> forthe adjacency definition.</t>details on forward_routed() adjacencies.</t> <t>BIER relies on the routing underlay to calculate paths towards BFERs and derive next-hop BFR adjacencies for those paths.ThisThese two steps commonlyreliesrely onBIER specificBIER-specific extensions to the routing protocols of the routing underlay but may also be established by a controller. In BIER-TE, thenext-hops ofnext hops for a packet are determined by the BitString through the BIER-TEController establishedcontroller-established adjacencies on the BFR for the BPs of the BitString. There is thus no need forBFR specificBFR-specific routing underlay extensions to forward BIER packets with BIER-TE semantics.</t> <t>Encapsulation parameters can be provisioned by the BIER-TE controller into the forward_connected() or forward_routed() adjacencies directly without relying on a routing underlay. </t> <t>If the BFR intends to support FRR for BIER-TE, then the BIER-TE forwarding plane needs to receive fast adjacency up/down notifications:Linklink up/down or neighbor up/down,e.g.e.g., fromBFD."Bidirectional Forwarding Detection" (BFD). Providing these notifications is considered to be part of the routing underlay in this document.</t> </section><!-- routing-underlay --><section anchor="te-considerations"title="Trafficnumbered="true" toc="default"> <name>Traffic EngineeringConsiderations">Considerations</name> <t>Traffic Engineering(<xref target="I-D.ietf-teas-rfc3272bis"/>)<xref target="TE-OVERVIEW" format="default"/> provides performance optimization of operational IP networks while utilizing network resources economically and reliably. The key elements needed to effectTETraffic Engineering are policy, pathsteeringsteering, and resource management. These elements require support at the control/controller level and within the forwarding plane.</t> <t>Policy decisions are made within the BIER-TE control plane, i.e., within BIER-TEControllers.controllers. Controllers use policy when composing BitStrings and BFR BIFT state. The mapping of user/IP traffic to specificBitStrings/BIER-TEBitStrings / BIER-TE flows is made based on policy. The specific details of BIER-TE policies and how a controller uses them are out of scopeoffor this document.</t> <t>Path steering is supported via the definition of a BitString. BitStrings used in BIER-TE are composed based on policy and resource management considerations. For example, when composing BIER-TE BitStrings, aControllercontroller must take into account the resources available at each BFR and for each BP when it is providing congestion-loss-free services such asRate ControlledRate-Controlled Service Disciplines <xreftarget="RCSD94"/>.target="RCSD94" format="default"/>. Resource availability could beprovidedprovided, forexampleexample, via routing protocolinformation,information but may also be obtained via a BIER-TE control protocol such as NETCONF or any other protocol commonly used by aControllercontroller to understand the resources of the network on which itoperates on.operates. The resource usage of the BIER-TE traffic admitted by the BIER-TE controller can be solely tracked on the BIER-TEControllercontroller based on local accounting as long as no forward_routed() adjacencies are used (see <xreftarget="forward-connected"/>target="forward-routed" format="default"/> for the definition of forward_routed() adjacencies). When forward_routed() adjacencies are used, the paths selected by the underlying routing protocol need to be tracked as well.</t> <t>Resource management has implicationsonfor the forwarding plane beyond theBIER-TE definedBIER-TE-defined steering ofpackets. Thispackets; this includes allocation of buffers to guarantee theworst caseworst-case requirementsoffor admitted RCSD traffic and potentially policing and/or rate-shaping mechanisms, typically done via various forms of queuing. This level of resource control, while optional, is important in networks that wish to support congestion management policies to control or regulate the offered traffic to deliver different levels of service and alleviate congestion problems, or those networks that wish to control latencies experienced by specific traffic flows.</t> </section><!-- te-considerations --></section><!-- components --><section anchor="forwarding"title="BIER-TE Forwarding">numbered="true" toc="default"> <name>BIER-TE Forwarding</name> <section anchor="btft"title="Thenumbered="true" toc="default"> <name>The BIER-TE Bit Index Forwarding Table(BIFT)">(BIFT)</name> <t>The BIER-TE BIFT istheequivalent to theBIER BIFT for(non-TE)BIER.BIER BIFT. It exists on every BFR running BIER-TE. For every BIERsub-domain"subdomain" (SD) in use for BIER-TE,itthe BIFT isa table as shownconstructed per the example shown in <xreftarget="adjacencies"/>. That exampletarget="adjacencies" format="default"/>. The BIFT in the figure assumes a BSL of 8bit positions"bit positions" (BPs) in the packets BitString. As in <xreftarget="RFC8279"/>target="RFC8279" format="default"/>, this BSL is purely usedfor theas an example and is not aBIER/BIER-TE supportedBSL supported by BIER/BIER-TE (minimum BSL is 64).</t> <t>A BIER-TE BIFTcomparesis compared to a BIER BIFT as shown in <xreftarget="RFC8279"/>target="RFC8279" format="default"/> as follows.</t> <t>In both BIER and BIER-TE, BIFT rows/entries are indexed in their respective BIER pseudocode (<xreftarget="RFC8279"/> Section 6.5)target="RFC8279" sectionFormat="comma" section="6.5"/>) and BIER-TE pseudocode (<xreftarget="pseudocode"/>)target="pseudocode" format="default"/>) by the BIFT-index derived from thepacketspacket's SI,BSLBSL, and the one bit position of the packets BitString (BP) addressing the BIFT row: BIFT-index = SI * BSL + BP - 1.BPBPs within a BitString are numbered from 1 toBSL, henceBSL -- hence, the - 1 offset when converting to a BIFT-index. This document also uses the notionSI:BP"SI:BP" to indicate BIFTrows,rows. <xreftarget="RFC8279"/>target="RFC8279" format="default"/> uses the equivalent notionSI:BitString,"SI:BitString", where the BitString is filled with only theBPBPs for the BIFT row.</t> <t>In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT-index + 1 and is populated on each BFR with the next-hop "BFR Neighbor" (BFR-NBR) towards that BFER.</t> <t>In BIER-TE, each BIFT-indexand thereforeand, therefore, SI:BP indicates oneoror, in the case of reuse of SI:BP, moreadjacenciesthan one adjacency between BFRs in thetopology andtopology. The SI:BP isonlypopulated withthose adjacencies forwarding entriesthe adjacency on the upstream BFRthat isof theupstream for these adjacencies.adjacency. The BIFTentryentries are empty on all other BFRs.</t> <t>In BIER, each BIFT row also requires a "Forwarding Bit Mask" (F-BM) entry for BIER forwarding rules. In BIER-TE forwarding, an F-BM is notrequired,required but can be used when implementing BIER-TE on forwardinghardwarehardware, derived from BIER forwarding, that must use an F-BM. This is discussed in the first variation of BIER-TE forwarding pseudocode shown in <xreftarget="pseudocode"/>.</t>target="pseudocode" format="default"/>.</t> <figureanchor="adjacencies" title="BIER-TE BIFTanchor="adjacencies"> <name>BIER-TE Bit Index Forwarding Table (BIFT) withdifferent adjacencies">Different Adjacencies</name> <artwork align="left"><![CDATA[------------------------------------------------------------------------------------------------------------------------------------- | BIFT-index | | Adjacencies: | | (SI:BP)|(FBM)||(F-BM)| <empty> or one or more per entry |===================================================================================================================================== | BIFT indices for Packets with SI=0 |------------------------------------------------------------------------------------------------------------------------------------- | 0 (0:1) | ... | forward_connected(interface,neighbor{,DNC}) |------------------------------------------------------------------------------------------------------------------------------------- | 1 (0:2) | ... | forward_connected(interface,neighbor{,DNC}) | | | ... | forward_connected(interface,neighbor{,DNC}) |------------------------------------------------------------------------------------------------------------------------------------- | ... | ... | ... |------------------------------------------------------------------------------------------------------------------------------------- | 4 (0:5) | ... | local_decap({VRF}) |------------------------------------------------------------------------------------------------------------------------------------- | 5 (0:6) | ... | forward_routed({VRF,}l3-neighbor) |------------------------------------------------------------------------------------------------------------------------------------- | 6 (0:7) | ... | <empty> |------------------------------------------------------------------------------------------------------------------------------------- | 7 (0:8) | ... | ECMP((adjacency1,...adjacencyN){,seed}) |------------------------------------------------------------------------------------------------------------------------------------ | BIFT indices for BitString/Packet with SI=1 |------------------------------------------------------------------------------------------------------------------------------------- | 9 (1:1) | | ... | | ...|...| ... |------------------------------------------------------------------ BIER-TE Bit Index Forwarding Table (BIFT)... | ------------------------------------------------------------------- ]]></artwork></figure> <t>The BIFT is configured for the BIER-TE data plane of a BFR by the BIER-TEControllercontroller through an appropriate protocol anddata-model.data model. The BIFT is then used to forward packets, according to therules specified inprocedures for the BIER-TEForwarding Procedures.</t>forwarding plane as specified in <xref target="forwarding-plane"/>.</t> <t>Note that aBIFT indexBIFT-index (SI:BP) may be populated in the BIFT of more than one BFR to save BPs. See <xreftarget="rings"/>target="rings" format="default"/> for an example of how a BIER-TE controller could assign BPs to (logical) adjacencies shared across multiple BFRs, <xreftarget="leaf-bfer"/>target="leaf-bfer" format="default"/> for an example of assigning the same BP to different adjacencies, and <xreftarget="reuse"/>target="reuse" format="default"/> for general guidelines regardingre-usethe reuse of BPs across different adjacencies.</t> <t>{VRF} indicates the Virtual Routing and Forwarding context into which the BIER payload is to be delivered. This is optional and depends on the multicast flow overlay.</t> </section><!-- btft --><section anchor="atypes"title="Adjacency Types">numbered="true" toc="default"> <name>Adjacency Types</name> <section anchor="forward-connected"title="Forward Connected">numbered="true" toc="default"> <name>Forward Connected</name> <t>A "forward_connected()" adjacency is an adjacency towards a directly connectedBFR neighborBFR-NBR using an interface address of that BFR on the connecting interface. A forward_connected() adjacency does not routepackets butpackets; only L2 forwards them to the neighbor.</t> <t>Packets sent to an adjacency with "DoNotClear" (DNC) set in the BIFTMUST NOT<bcp14>MUST NOT</bcp14> have the bit position for that adjacency cleared when the BFR creates a copy for it. The bit position will still be cleared for copies ofthea packet made towards other adjacencies. This can beusedused, forexampleexample, in ring topologies as explained in <xreftarget="rings"/>.</t>target="rings" format="default"/>.</t> <t>For protection against loopsfromcaused by misconfiguration (see <xreftarget="loops"/>),target="loops" format="default"/>), DNC is only permissible for forward_connected() adjacencies. No need or benefit of DNC for othertypetypes of adjacencies wasidentifiedidentified, andtheir risk wasassociated risks were not analyzed.</t> </section><!-- forward-connected --><section anchor="forward-routed"title="Forward Routed">numbered="true" toc="default"> <name>Forward Routed</name> <t>A "forward_routed()" adjacency is an adjacency towards a BFR that uses a (tunneling) encapsulationwhichthat will causethea packet to be forwarded by the routing underlaytowardtowards the adjacentBFR.BFR indicated via the l3-neighbor parameter of the forward_routed() adjacency. This can leverage any feasible encapsulation, such as MPLS or tunneling over IP/IPv6, as long as the BIER-TE packet can be identified as a payload. This identification caneitherrely on either the BIER/BIER-TE co-existence mechanisms described in <xreftarget="encapsulation"/>,target="encapsulation" format="default"/> orbyexplicit support for a BIER-TE payload type in the tunneling encapsulation.</t><t>forward_routed()<t>Forward_routed() adjacencies are necessary to pass BIER-TE traffic acrossnonrouters that are not BIER-TE capableroutersor to minimize the number of requiredBPBPs by tunneling over(BIER-TE capable)(BIER-TE-capable) routers on which neither replication norpath-steeringpath steering is desired, or simply to leverage the routing underlay's path redundancy and FRRof the routing underlaytowards the next BFR. They may also be useful to a multi-subnet adjacent BFRto leveragefor leveraging the routing underlay ECMPindependentindependently of BIER-TE ECMP (<xreftarget="forward-ecmp"/>).</t>target="forward-ecmp" format="default"/>).</t> </section><!-- forward-routed --><section anchor="forward-ecmp"title="ECMP"> <t>(non-TE)numbered="true" toc="default"> <name>ECMP</name> <t>(Non-TE) BIER ECMP is tied to the BIER BIFT processing semantic and is therefore not directly usable with BIER-TE.</t> <t>A BIER-TE"Equal Cost"Equal-Cost Multipath" (ECMP()) adjacency as shown in <xreftarget="adjacencies"/>target="adjacencies" format="default"/> for BIFT-index 7 has a list of two or morenon-ECMPnon-ECMP() adjacencies as parameters and an optional seed parameter. When a BIER-TE packet is copied onto such an ECMP() adjacency, animplementation specificimplementation-specific so-called hash function will select one out of the list's adjacencies to which the packet is forwarded. If the packet's encapsulation contains an entropy field, the entropy fieldSHOULD<bcp14>SHOULD</bcp14> be respected; two packets with the same value of the entropy fieldSHOULD<bcp14>SHOULD</bcp14> be sent on the same adjacency. The seed parameterallows topermits the design of hash functions that are easy to implement at high speed without running into polarization issues across multiple consecutive ECMP hops. See <xreftarget="ecmp"/>target="ecmp" format="default"/> formore explanations.</t>details.</t> </section><!-- forward-ecmp --><section anchor="forward-local"title="Local Decap(sulation)">numbered="true" toc="default"> <name>Local Decap(sulation)</name> <t>A "local_decap()" adjacency passes a copy of the payload of the BIER-TE packet to the protocol ("NextProto") within the BFR(IPv4/IPv6,(IP/IPv6, Ethernet,...) responsible for that payload according to the packet header fields. A local_decap() adjacency turns the BFR into a BFER for matching packets. Local_decap() adjacencies require the BFER to support routing or switching for NextProto to determine how to further process thepacket.</t>packets.</t> </section><!-- forward-local --></section><!-- atypes --><section anchor="encapsulation"title="Encapsulationnumbered="true" toc="default"> <name>Encapsulation / Co-existence withBIER">BIER</name> <t>Specifications for BIER-TE encapsulation are outside the scope of this document. This section gives explanations and guidelines.</t><t>Like <xref target="RFC8279"/>,<t>The handling of "Maximum Transmission Unit" (MTU) limitations is outside the scope of this document andinsteadis not discussed in <xref target="RFC8279" format="default"/> either. Instead, this process is part of the BIER-TE packet encapsulation and/or flowoverlay. Seeoverlay; forexampleexample, see <xreftarget="RFC8296"/>, Section 3.target="RFC8296" sectionFormat="comma" section="3"/>. It applies equally to BIER-TEas it does toand BIER.</t> <t>Because a BFR needs to interpret the BitString of a BIER-TE packet differently from a (non-TE) BIER packet, it is necessary to distinguish BIER packets from BIER-TE packets. IntheBIER encapsulation <xreftarget="RFC8296"/>,target="RFC8296" format="default"/>, the BIFT-id field of the packet indicates the BIFT of the packet. BIER and BIER-TE can therefore be run simultaneously, when the BIFT-id address space is shared across BIERBIFTBIFTs and BIER-TEBIFT.BIFTs. Partitioning the BIFT-id address space is subject to BIER-TE/BIER control plane procedures.</t> <t>When <xreftarget="RFC8296"/>target="RFC8296" format="default"/> is used for BIER with MPLS, BIFT-id address ranges can be dynamically allocated from MPLS label space only for the set of actually used SD:BSLBIFT.BIFTs. Thisallows toalsoallocatepermits the allocation of non-overlapping label ranges forBIFT-idBIFT-ids that are to be used with BIER-TE BIFTs.</t> <t>With MPLS, it is also possible to reuse the same SD space for both BIER-TE and BIER, so that the same SD has both a BIER BIFT with a corresponding range of BIFT-ids and disjoint BIER-TE BIFTs with a non-overlapping range of BIFT-ids.</t><t>When<t>Assume that a fixed mapping from BSL,SDSD, and SI to a BIFT-id isusedused, which does not explicitly partition the BIFT-id space between BIER andBIER-TE, suchBIER-TE -- for example, as proposed for non-MPLS forwarding with<xref target="RFC8296"/>BIER encapsulation <xref target="RFC8296" format="default"/> in <xreftarget="I-D.ietf-bier-non-mpls-bift-encoding"/> revision 04, section 5, thentarget="NON-MPLS-BIER-ENCODING" sectionFormat="comma" section="5"/>. In this case, it is necessary to allocate disjoint SDs to BIER and BIER-TE BIFTs so that both can be addressed by the BIFT-ids. The encoding proposed insection 6. of the same document<xref target="NON-MPLS-BIER-ENCODING" sectionFormat="of" section="6"/> does not statically encode the BSL or SD into the BIFT-id, butallows forthe encoding permits amapping,mapping and hence could provideforthe same freedom as when MPLS is being used(same(the same SD, or differentSDSDs forBIER/BIER-TE).</t> <t>forward_routed()BIER/BIER-TE). </t> <t>Forward_routed() requires an encapsulation that permitsto directdirecting unicast encapsulated BIER-TE packets to a specific interface address on a target BFR. With MPLS encapsulation, this can simply be done via a label stack with thataddressesaddress's label as the toplabel -label, followed by the label assigned to the (BSL,SD,SI) BitString. With non-MPLS encapsulation, some form of IP encapsulation would be required (forexampleexample, IP/GRE). </t> <t>The encapsulation used for forward_routed() adjacencies can equally support existing advanced adjacency information such as "loose source routes"via e.g.via, for example, MPLS label stacks or appropriate header extensions(e.g.(e.g., for IPv6).</t> </section><!-- encapsulation --><section anchor="pseudocode"title="BIER-TEnumbered="true" toc="default"> <name>BIER-TE ForwardingPseudocode">Pseudocode</name> <t> Thefollowing pseudocode, <xref target="simple-pseudocode-picture"/>,pseudocode for BIER-TEforwardingforwarding, as shown in <xref target="simple-pseudocode-picture" format="default"/>, is based on the (non-TE) BIER forwarding pseudocodeofprovided in <xreftarget="RFC8279"/>, section 6.5target="RFC8279" sectionFormat="comma" section="6.5"/>, with one modification.</t> <figureanchor="simple-pseudocode-picture" title="BIER-TEanchor="simple-pseudocode-picture"> <name>BIER-TE Forwarding Pseudocode forrequired functions, basedRequired Functions, Based on BIERPseudocode"> <artwork align="left"><![CDATA[Pseudocode</name> <sourcecode name="" type="pseudocode"><![CDATA[ void ForwardBitMaskPacket_withTE (Packet) { SI=GetPacketSI(Packet); Offset=SI*BitStringLength; for (Index = GetFirstBitPosition(Packet->BitString); Index ; Index = GetNextBitPosition(Packet->BitString, Index)) { F-BM = BIFT[Index+Offset]->F-BM; if (!F-BM) continue; [3] BFR-NBR = BIFT[Index+Offset]->BFR-NBR; PacketCopy = Copy(Packet); PacketCopy->BitString &= F-BM; [2] PacketSend(PacketCopy, BFR-NBR); // The following must not be done for BIER-TE: // Packet->BitString &= ~F-BM; [1] } }]]></artwork></figure>]]></sourcecode> </figure> <t>In step [2], the F-BM is used to clearbit(s)one or more bits in PacketCopy. This step exists in both BIER and BIER-TE, but the F-BMs need to be populated differently for BIER-TE than for BIER for the desired clearing.</t> <t>In BIER, multiple bits of a BitString can have the same BFR-NBR. When a received packets BitString has more than one of those bits set,the BIERBIER's replication logic has toavoid thatprevent more than one PacketCopyisfrom being sent to that BFR-NBR ([1]). Likewise, the PacketCopy sent to a BFR-NBR must clear all bits in its BitString that are not routed across a BFR-NBR. Thisprotects against BIERprevents BIER's replication logic from creating duplicates on any possible furtherBFR to create duplicatesBFRs ([2]).</t> <t>To solve both [1] and [2] for BIER, the F-BM of each bit index needs to have all bits set that this BFR wants to route across a BFR-NBR.[2] [2] clears all other bits inPacketCopy->BitString,PacketCopy->BitString, and [1] clears those bits fromPacket->BitStringPacket->BitString after the first PacketCopy.</t> <t>In BIER-TE, a BFR-NBR in this pseudocode is anadjacency,adjacency -- forward_connected(),forward_routed()forward_routed(), or local_decap(). There is no need for [2] to suppress duplicates in the same way that BIERdoesdoes, because in general, differentBPBPs would never have the same adjacency. If a BIER-TE controller actually finds some optimization in which this would be desirable, then the controller is also responsibleto ensurefor ensuring that only one of those bits is set in anyPacket->BitString,Packet->BitString, unless the controller explicitly wantsforduplicates to be created.</t> <t>The following points describe how theforwarding bit mask (F-BM)F-BM for each BP is configured in the BIFT and how this impacts the BitString of the packet being processed with that BIFT:<list style="numbers"> <t>The</t> <ol spacing="normal" type="1"><li>The F-BMs of all BIFT BPs without an adjacency have all their bits clear. This will cause [3] to skip further processing of such aBP.</t> <t>AllBP.</li> <li>All BIFT BPs with an adjacency (with the DNC flag clear) have an F-BM that has only those BPs set for which this BFR does not have an adjacency. This causes [2] to clear all bits fromPacketCopy->BitStringPacketCopy->BitString for which this BFR does have anadjacency.</t> <t>[1]adjacency.</li> <li>[1] is not performed for BIER-TE. All bit clearing required by BIER-TE is performed by[2].</t> </list></t>[2].</li> </ol> <t>ThisForwarding Pseudocodeforwarding pseudocode can support the required BIER-TE forwarding functions (see <xreftarget="requirements"/>),target="requirements" format="default"/>) -- forward_connected(),forward_routed()forward_routed(), andlocal_decap(),local_decap() -- butnotcannot support the recommended functionsDNC(DNC flag and multiple adjacencies perbit norbit) or the optionalfunction,function (i.e., ECMP()adjacencies.adjacencies). The DNC flag cannot be supported when using only [1] to mask bits.</t> <t>The modified and expandedForwarding Pseudocodeforwarding pseudocode in <xreftarget="pseudocode-picture"/>target="pseudocode-picture" format="default"/> specifies how to support all BIER-TE forwarding functions (required,recommendedrecommended, and optional):<list style="symbols"></t> <ol spacing="normal"> <li> <t>This pseudocode eliminates per-bitF-BM,F-BMs, therefore reducing the size of BIFT state byBSL^2*SISI*BSL<sup>2</sup> and eliminating the need for per-packet-copy BitString maskingoperationsoperations, except for adjacencies with the DNC flag set:<list style="symbols"> <t>AdjacentBits[SI]</t> <ol spacing="normal" type="%p%c"> <li>AdjacentBits[SI] are bit positions with a non-empty list of adjacencies in this BFR BIFT. This can be computed whenever the BIER-TEControllercontroller updates(add/removes)(adds/removes) adjacencies in theBIFT.</t> <t>TheBIFT.</li> <li>The BFR needs to create packet copies for these adjacent bits when they are set in the packets BitString. This set of bits is calculated inPktAdjacentBits.</t> <t>AllPktAdjacentBits.</li> <li>All bit positionstofor which the BFR creates copies have to be cleared in packet copies to avoid loops. This is done by masking the BitString of the packet with ~AdjacentBits[SI]. When an adjacency has DNC set, this bit position is set again only for the packet copy towards that bitposition.</t> </list></t> <t>BIFTposition.</li> </ol> </li> <li>BIFT entries may contain more than one adjacency in support of specificconfigurationsconfigurations, such as<xref target="hubnspoke"/>.a hub and multiple spokes (<xref target="hubnspoke" format="default"/>). The code therefore includes a loop over theseadjacencies.</t> <t>Theadjacencies.</li> <li>The ECMP() adjacency isshown.also shown in the figure. Its parameters are a seed anda ListOfAdjacencies"ListOfAdjacencies", from which one ispicked.</t> <t>Thepicked.</li> <li>The forward_connected(), forward_routed(), and local_decap() adjacencies are shown with theirparameters.</t> </list></t>parameters.</li> </ol> <figureanchor="pseudocode-picture" title="Completeanchor="pseudocode-picture"> <name>Complete BIER-TE Forwarding Pseudocode forrequired, recommendedRequired, Recommended, andoptional functions"> <artwork align="left"><![CDATA[Optional Functions</name> <sourcecode name="" type="pseudocode"><![CDATA[ void ForwardBitMaskPacket_withTE (Packet) { SI = GetPacketSI(Packet); Offset = SI * BitStringLength; // Determine adjacent bits in thePacketspackets BitString PktAdjacentBits = Packet->BitString & AdjacentBits[SI]; // Clear adjacent bits inPacketthe packet header to avoid loops Packet->BitString &= ~AdjacentBits[SI]; // Loop over PktAdjacentBits to create packet copies for (Index = GetFirstBitPosition(PktAdjacentBits); Index ; Index = GetNextBitPosition(PktAdjacentBits, Index)) { for adjacency in BIFT[Index+Offset]->Adjacencies { if(adjacency.type == ECMP(ListOfAdjacencies,seed) ) { I = ECMP_hash(sizeof(ListOfAdjacencies), Packet->Entropy,seed); adjacency = ListOfAdjacencies[I]; } PacketCopy = Copy(Packet); switch(adjacency.type) { case forward_connected(interface,neighbor,DNC): if(DNC) PacketCopy->BitString |= 1<<(Index-1); SendToL2Unicast(PacketCopy,interface,neighbor); case forward_routed({VRF,}l3-neighbor): SendToL3(PacketCopy,{VRF,}l3-neighbor); case local_decap({VRF},neighbor): DecapBierHeader(PacketCopy); PassTo(PacketCopy,{VRF,}Packet->NextProto); } } } }]]></artwork></figure>]]></sourcecode> </figure> </section><!-- pseudocode --><section anchor="requirements"title="BFRnumbered="true" toc="default"> <name>BFR Requirements for BIER-TEforwarding"> <t>BFRForwarding</name> <t>BFRs that support BIER-TE and BIERMUST<bcp14>MUST</bcp14> support a configuration that enables BIER-TE instead of (non-TE) BIER forwarding rules for allBIFTBIFTs of one or more BIERsub-domains.subdomains. Every BP in a BIER-TE BIFTMUST<bcp14>MUST</bcp14> supportto havehaving zero or one adjacency. BIER-TE forwardingMUST<bcp14>MUST</bcp14> support the adjacency types forward_connected() with the DNC flag not set,forward_routed()forward_routed(), and local_decap(). As explained in <xreftarget="pseudocode"/>,target="pseudocode" format="default"/>, these required BIER-TE forwarding functions can be implemented via the sameForwarding Pseudocodeforwarding pseudocode as that used for BIERforwardingforwarding, except for one modification (skipping one masking with an F-BM).</t> <t>BIER-TE forwardingSHOULD<bcp14>SHOULD</bcp14> support forward_connected() adjacencies witha setthe DNCflag,flag set, as this ishighlyvery usefulto savefor saving bits in rings (see <xreftarget="rings"/>).</t>target="rings" format="default"/>).</t> <t>BIER-TE forwardingSHOULD<bcp14>SHOULD</bcp14> support more than one adjacency on a bit. This allowsto savebits to be saved inhub and spokehub-and-spoke scenarios (see <xreftarget="hubnspoke"/>).</t>target="hubnspoke" format="default"/>).</t> <t>BIER-TE forwardingMAY<bcp14>MAY</bcp14> support ECMP() adjacencies to save bits in ECMPscenarios,scenarios; see <xreftarget="ecmp"/>target="ecmp" format="default"/> for an example. This is an optional requirement, because for ECMP deployments using BIER-TE one can also leverageECMP ofthe routing underlay ECMP viaforwarded_routedforward_routed() adjacencies and/or might prefer to have more explicit control of the path chosen via explicitBP/adjacenciesBPs/adjacencies for each ECMP path alternative.</t> </section> </section><!-- forwarding --><section anchor="controller-ops"title="BIER-TEnumbered="true" toc="default"> <name>BIER-TE Controller OperationalConsiderations">Considerations</name> <section anchor="bitpositions"title="Bitnumbered="true" toc="default"> <name>Bit PositionAssignments">Assignments</name> <t>This section describes how the BIER-TEControllercontroller can use the different BIER-TE adjacency types to define the bit positions of a BIER-TE domain.</t> <t>Because the size of the BitString limits the size of the BIER-TE domain, many of the options described here exist to support larger topologies with fewer bit positions.</t> <section anchor="p2p-links"title="P2P Links">numbered="true" toc="default"> <name>P2P Links</name> <t>On aP2P"point-to-point" (P2P) link that connects two BFRs, the same bit position can be used on both BFRs for the adjacency to the neighboring BFR. A P2P linkrequirestherefore requires only one bit position.</t> </section><!-- p2p-links --><section anchor="bfer"title="BFER">numbered="true" toc="default"> <name>BFERs</name> <t>Everynon-Leafnon-leaf BFER is given a unique bit position with a local_decap() adjacency.</t> </section><!-- bfer --><section anchor="leaf-bfer"title="Leaf BFERs"> <figure anchor="leaf-bfer-picture" title="Leaf vs. non-Leaf BFER Example"> <artwork align="left"><![CDATA[ BFR1(P) BFR2(P) BFR1(P) BFR2(P) | \ / | | | | X | | | | / \ | | | BFER1(PE) BFER2(PE) BFER1(PE)----BFER2(PE) ^ U-turn link Leaf BFER / Non-Leaf BFER / PE-router PE-router ]]></artwork></figure>numbered="true" toc="default"> <name>Leaf BFERs</name> <t>A leaf BFER is one where incoming BIER-TE packets never need to be forwarded to another BFR but are only sent to the BFER to exit the BIER-TE domain. For example, in networks whereProvider Edge"Provider Edge" (PE)routerrouters are spokes connected to Provider (P) routers, those PEs areLeaf BFERsleaf BFERs, unless there is a U-turn between two PEs.</t> <t>Consider how redundant disjoint traffic can reach BFER1/BFER2 as shown in <xreftarget="leaf-bfer-picture"/>: Whentarget="leaf-bfer-picture" format="default"/>: when BFER1/BFER2 areNon-Leaf BFERnon-leaf BFERs as shown on the right-hand side, one traffic copy would be forwarded to BFER1 from BFR1, but the other one could only reach BFER1 via BFER2, which makes BFER2 anon-Leafnon-leaf BFER. Likewise, BFER1 is anon-Leafnon-leaf BFER when forwarding traffic to BFER2. Note that the BFERsinon the left-handpictureside of the figure are only guaranteed to beleaf-BFERleaf BFERs byfittingcorrectly applying a routing configuration that prohibits transit trafficto passfrom passing through the BFERs, which is commonly applied in these topologies.</t> <figure anchor="leaf-bfer-picture"> <name>Leaf vs. Non-Leaf BFER Example</name> <artwork align="left" name="" type="" alt=""><![CDATA[ BFR1(P) BFR2(P) BFR1(P) BFR2(P) | \ / | | | | X | | | | / \ | | | BFER1(PE) BFER2(PE) BFER1(PE)----BFER2(PE) ^ U-turn link Leaf BFER / Non-leaf BFER / PE router PE router ]]></artwork> </figure> <t>In most situations,leaf-BFERleaf BFERs that are to be addressed via the same BitString can share a single bit position for their local_decap() adjacency in that BitString and therefore save bit positions. On a non-leaf BFER, a received BIER-TE packet may only need to transit theBFERBFER, or it may also need toalsobe decapsulated. Whether or not to decapsulate the packet therefore needs to be indicated by a unique bit position populated only on the BIFT of this BFER with a local_decap() adjacency. On aleaf-BFER,leaf BFER, packets never need to pass through; any packet received is therefore usually intended to be decapsulated. This can be expressed by a single, shared bit position that is populated with a local_decap() adjacency on allleaf-BFERleaf BFERs addressed by the BitString.</t> <t>The possibleexception fromexceptions to thisleaf-BFERleaf BFER bit position optimization scenario can be cases where the bit position on the prior BIER-TE BFR (which created the packet copy for theleaf-BFERleaf BFER in question) is populated with multiple adjacencies as anoptimization, suchoptimization -- for example, as described in Sections <xref target="lans" format="counter"/> and <xreftarget="lans"/> or <xref target="hubnspoke"/>.target="hubnspoke" format="counter"/>. With either of these two optimizations, the sender of the packet could only control explicitly whether the packet was to be decapsulated on theleaf-BFERleaf BFER in question, if theleaf-BFERleaf BFER has a unique bit position for its local_decap() adjacency.</t> <t>However, if the bit position is shared acrossleaf-BFER,a leaf BFER and packets are therefore decapsulated -- potentiallyunnecessarily,unnecessarily -- this may still be appropriate if the decapsulated payload of the BIER-TE packet indicates whether or not thepacket needspackets need to be further processed/received. This is typicallytruetrue, forexampleexample, if the payload is IPmulticastmulticast, because IP multicast on a BFER would know the membership state of the IP multicast payload and be able to discard it if thepacket waspackets were delivered unnecessarily by the BIER-TE layer. If the payload has no such membershipindication,indication and the BFIR wants to have explicit controlaboutregarding whichBFERBFERs are to receive and decapsulate a packet, then these two optimizationscan notcannot be used together with shared bitpositionsposition optimization forleaf-BFER.</t>a leaf BFER.</t> </section><!-- leaf-bfer --><section anchor="lans"title="LANs">numbered="true" toc="default"> <name>LANs</name> <t>In a LAN, the adjacency to each neighboring BFR is given a unique bit position. The adjacency of this bit position is a forward_connected() adjacency towards theBFRBFR, and this bit position is populated into the BIFT of all the other BFRs on that LAN.</t> <figureanchor="lan-picture" title="LAN Example">anchor="lan-picture"> <name>LAN Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ BFR1 |p1 LAN1-+-+---+-----+ p3| p4| p2| BFR3 BFR4 BFR7]]></artwork></figure>]]></artwork> </figure> <t>IfBandwidthbandwidth on the LAN is not an issue and most BIER-TE traffic should be copied to all neighbors on a LAN, then bit positions can be saved by assigning just a single bit position to the LAN and populating the bit position of the BIFTs of eachBFRsBFR on the LAN with a list of forward_connected() adjacencies to all other neighbors on the LAN.</t> <t>This optimization does not work in the case of BFRs redundantly connected to more than one LAN with thisoptimization because theseoptimization. These BFRs would receive duplicates and forward those duplicates into theoppositeother LANs.Adjacencies of suchSuch BFRsinto their LAN still need arequire separate bitposition.</t>positions for each LAN they connect to.</t> </section><!-- lans --><section anchor="hubnspoke"title="Hubnumbered="true" toc="default"> <name>Hub andSpoke">Spoke</name> <t>In a setup with a hub and multiple spokes connected via separatep2pP2P links to the hub, allp2pP2P adjacencies from the hub to thespokesspokes' links can share the same bit position. The bit position on the hub's BIFT is set up with a list of forward_connected() adjacencies, one for eachSpoke.</t>spoke.</t> <t>This option is similar to the bit position optimization in LANs:Redundantlyredundantly connected spokes need their own bit positions, unless they are themselvesLeaf-BFER.</t>leaf BFERs.</t> <t>This type of optimized BP could beusedused, forexampleexample, when all traffic is "broadcast" traffic (very dense receiverset)sets), such aslive-TVlive TV or many-to-manytelemetrytelemetry, includingsituation-awareness (SA).situational awareness. This BP optimization can then be used to explicitly steer different traffic flows across different ECMP paths inData-Centerdata-center or broadband-aggregation networks with minimal use of BPs.</t> </section><!-- hubnspoke --><section anchor="rings"title="Rings">numbered="true" toc="default"> <name>Rings</name> <t>In L3 rings, instead of assigning a single bit position for everyp2pP2P link in the ring, it is possible to save bit positions by setting the "DoNotClear" (DNC) flag on forward_connected() adjacencies.</t> <t>For theringsring shown in <xreftarget="ring-picture"/>,target="ring-picture" format="default"/>, a single bit position will suffice to forward traffic entering the ring at BFRa or BFRb all the way up toBFR1:</t>BFR1, as follows.</t> <t>On BFRa, BFRb, BFR30,... BFR3, the bit position is populated with a forward_connected() adjacency pointing to the clockwise neighbor on the ring and with DNC set. On BFR2, the adjacency also points to the clockwise neighbor BFR1, but without DNC set.</t> <t>Handling DNC this way ensures that copies forwarded from anyBFRBFRs in the ring to a BFR outside the ring will not have the ring bit position set, therefore minimizing thechance to createrisk of creating loops.</t> <figureanchor="ring-picture" title="Ring Example">anchor="ring-picture"> <name>Ring Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ v v | | L1 | L2 | L3 /-------- BFRa ---- BFRb --------------------\ | | \- BFR1 - BFR2 - BFR3 - ... - BFR29 - BFR30 -/ | | L4 | | p33| p15| BFRd BFRc]]></artwork></figure>]]></artwork> </figure> <t>Note that this example only permitsforpackets intended to make it all the way around the ring to enter it at BFRa andBFRb, andBFRb. Note also that packets will always travel clockwise. If packets should be allowed to enter the ring at anyring BFR,of the ring's BFRs, then one would have to use two ring bitpositions. Onepositions, one for each direction: clockwise and counterclockwise.</t> <t>Both would be set up to stop rotating on the same link,e.g.e.g., L1. When theingress ring BFRring's BFIR creates the clockwise copy, it will clear the counterclockwise bit position because the DNC bit only applies to the bit for which the replication isdone. Likewisedone (likewise for the clockwise bit position for the counterclockwisecopy.copy). As a result, thering ingress BFRring's BFIR will send a copy in both directions, serving BFRs on either side of the ring up to L1.</t> </section><!-- rings --><section anchor="ecmp"title="Equal Cost MultiPath (ECMP)"> <t>[RFC-Editor: A reviewer (Lars Eggert) noted that the infinite "to use" in the following sentence is not correct. The same was also noted for several other similar instances. The following URL seems to indicate though that this is a per-case decision, which seems undefined: https://writingcenter.gmu.edu/guides/choosing-between-infinitive-and-gerund-to-do-or-doing. What exactly should be done about this ?].</t>numbered="true" toc="default"> <name>Equal-Cost Multipath (ECMP)</name> <t>An ECMP() adjacency allowstothe use of just one BP to deliver packets to one of N adjacencies instead of one BP for each adjacency. In the common example case shown in <xreftarget="ecmp-picture"/>,target="ecmp-picture" format="default"/>, alink-bundlelink bundle of three links L1,L2,L3 connects BFR1 and BFR2, and only one BP is used instead of threeBPBPs to deliver packets from BFR1 to BFR2.</t> <figureanchor="ecmp-picture" title="ECMP Example">anchor="ecmp-picture"> <name>ECMP Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ --L1----- BFR1 --L2----- BFR2 --L3----- BIFT entry in BFR1: ------------------------------------------------------------------ | Index | Adjacencies | ================================================================== | 0:6 | ECMP({forward_connected(L1, BFR2), | | | forward_connected(L2, BFR2), | | | forward_connected(L3, BFR2)}, seed) | ------------------------------------------------------------------ BIFT entry in BFR2: ------------------------------------------------------------------ | Index | Adjacencies | ================================================================== | 0:6 | ECMP({forward_connected(L1, BFR1), | | | forward_connected(L2, BFR1), | | | forward_connected(L3, BFR1)}, seed) | ------------------------------------------------------------------]]></artwork></figure>]]></artwork> </figure> <t>This document does not standardize any ECMP algorithm because it is sufficient for implementations to document their freely chosen ECMP algorithm. <xreftarget="ecmp-algo-picture"/>target="ecmp-algo-picture" format="default"/> shows an example ECMPalgorithm,algorithm and would double as its documentation:Aa BIER-TE controller could determine which adjacency is chosen based on the seed and adjacencies parameters andtheon packet entropy.</t> <figureanchor="ecmp-algo-picture" title="ECMP algorithm Example">anchor="ecmp-algo-picture"> <name>ECMP Algorithm Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ forward(packet, ECMP(adj(0), adj(1),... adj(N-1), seed)): i = (packet(bier-header-entropy) XOR seed) % N forward packet to adj(i)]]></artwork></figure>]]></artwork> </figure> <t>In thefollowing example,example shown in <xref target="polarization-picture"/>, all traffic from BFR1 towards BFR10 is intended to be ECMPload splitload-split equally across the topology. This example is not meant as a likelysetup, but to illustratesetup; rather, it illustrates that ECMP can be used to share BPs not only across linkbundles,bundles but also across alternative paths across different transitBFR,BFRs, and it explains the use of the seed parameter.</t> <figureanchor="polarization-picture" title="Polarization Example">anchor="polarization-picture"> <name>Polarization Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ BFR1 (BFIR) /L11 \L12 / \ BFR2 BFR3 /L21 \L22 /L31 \L32 / \ / \ BFR4 BFR5 BFR6 BFR7 \ / \ / \ / \ / BFR8 BFR9 \ / \ / BFR10 (BFER) BIFT entry in BFR1: ------------------------------------------------------------------ | 0:6 | ECMP({forward_connected(L11, BFR2), | | | forward_connected(L12, BFR3)}, seed1) | ------------------------------------------------------------------ BIFT entry in BFR2: ------------------------------------------------------------------ | 0:7 | ECMP({forward_connected(L21, BFR4), | | | forward_connected(L22, BFR5)}, seed1) | ------------------------------------------------------------------ BIFT entry in BFR3: ------------------------------------------------------------------ | 0:7 | ECMP({forward_connected(L31, BFR6), | | | forward_connected(L32, BFR7)}, seed1) | ------------------------------------------------------------------ BIFT entry in BFR4, BFR5: ------------------------------------------------------------------ | 0:8 | forward_connected(Lxx, BFR8) |xx differs on BFR4/BFR5| ------------------------------------------------------------------ BIFT entry in BFR6, BFR7: ------------------------------------------------------------------ | 0:8 | forward_connected(Lxx, BFR9) |xx differs on BFR6/BFR7| ------------------------------------------------------------------ BIFT entry in BFR8, BFR9: ------------------------------------------------------------------ | 0:9 | forward_connected(Lxx, BFR10) |xx differs on BFR8/BFR9| ------------------------------------------------------------------]]></artwork></figure>]]></artwork> </figure> <t>Note that for the following discussion of ECMP, only the BIFTECMPECMP() adjacencies on BFR1, BFR2, and BFR3 are relevant. There-usereuse ofBPBPs acrossBFRBFRs in this example is further explained in <xreftarget="reuse"/>target="reuse" format="default"/> below.</t> <t> With thesetup ofECMP setup shown in the topology above, traffic would not be equally load-split. Instead, links L22 and L31 would see no traffic at all: BFR2 will only see traffic fromBFR1BFR1, for which the ECMP hash in BFR1 selected the first adjacency in the list of2two adjacencies given as parameters to theECMP. It isECMP: link L11-to-BFR2. BFR2performsagain performs ECMP with two adjacencies on that subset of traffic using the sameseed1,seed1 and will therefore again select the first of its two adjacencies: L21-to-BFR4.And thereforeTherefore, L22 and BFR5seessee notraffic. Likewisetraffic (likewise for L31 andBFR6.</t>BFR6).</t> <t>This issue in BFR2/BFR3 is calledpolarization."polarization". It results from there-usereuse of the same hash function across multiple consecutive hops in topologies like these. To resolve this issue, the ECMP() adjacency on BFR1 can be set up with a different seed2 than the ECMP() adjacencies on BFR2/BFR3. BFR2/BFR3 can use the same hash because packets will not sequentially pass across both of them. Therefore, they can also use the same BP0:7.</t>(i.e., 0:7).</t> <t>Note that ECMP solutions outside of BIER often hide the seed by auto-selecting it from local entropy such as unique local or next-hop identifiers. Allowing the BIER-TEControllercontroller to explicitly set the seed gives the BIER-TE controller the abilityfor itto controlsame/different paththe selection of the same path or different paths across multiple consecutive ECMP hops.</t> </section><!-- ecmp --><section anchor="routed"title="Forwardnumbered="true" toc="default"> <name>Forward Routedadjacencies">Adjacencies</name> <section anchor="reducing"title="Reducing bit positions">numbered="true" toc="default"> <name>Reducing Bit Positions</name> <t>Forward_routed() adjacencies can reduce the number of bit positions required when the path steering requirement is not hop-by-hop explicit pathselection,selection but rather is loose-hop selection. Forward_routed() adjacencies can alsoallow to operatepermit BIER-TE operation acrossintermediate hopintermediate-hop routers that do not support BIER-TE.</t><figure anchor="routed-picture" title="Forward Routed Adjacencies Example"> <artwork align="left"><![CDATA[ ............... ...BFR1--... ...--L1-- BFR2... ... .Routers. ...--L2--/ ...BFR4--... ...--L3-- BFR3... ... ...--L4--/ | ............... | LO Network Area 1 ]]></artwork></figure><t>Assume that the requirement in <xreftarget="routed-picture"/>target="routed-picture" format="default"/> is to explicitly steer traffic flows that have arrived at BFR1 or BFR4 via a path in the routing underlay "Network Area 1" to one of the followingthreenext three segments: (1) BFR2 via link L1, (2) BFR2 via link L2, or (3) via BFR3 and thennornot caring whether the packet is forwarded via L3 or L4.</t> <figure anchor="routed-picture"> <name>Forward Routed Adjacencies Example</name> <artwork align="left" name="" type="" alt=""><![CDATA[ ............... ...BFR1--... ...--L1-- BFR2... ... .Routers. ...--L2--/ ...BFR4--... ...--L3-- BFR3... ... ...--L4--/ | ............... | LO Network Area 1 ]]></artwork> </figure> <t>To enable this, both BFR1 and BFR4 are set up with aforward_routedforward_routed() adjacency bit position towards an address of BFR2 on link L1, another forward_routed() bit position towards an address of BFR2 on linkL2L2, and a third forward_routed() bit position towards a node address LO of BFR3.</t> </section><!-- reducing --><section anchor="without"title="Supporting nodesnumbered="true" toc="default"> <name>Supporting Nodes withoutBIER-TE">BIER-TE</name> <t>Forward_routed() adjacencies also enable incremental deployment of BIER-TE. Only the nodes through which BIER-TE traffic needs to be steered--- with or without replication--- need to support BIER-TE. Where they are not directly connected to each other,forward_routedforward_routed() adjacencies are used to pass overnonnodes that are not BIER-TEenabled nodes.</t>enabled.</t> </section><!-- without --></section><!-- routed --><section anchor="reuse"title="Reusenumbered="true" toc="default"> <name>Reuse ofbit positionsBit Positions (withoutDNC)"> <t>Bit positionsDNC)</name> <t>BPs can bere-usedreused across multiple BFRs to minimize the number ofBPBPs needed. This happens when adjacencies on multiple BFRs use the DNC flag as described above, but it can also be done for non-DNC adjacencies. This section only discusses this non-DNC case.</t> <t>Because a given BPareis cleared when passing a BFR with an adjacency for that BP,reuse of BPreusing BPs across multiple BFRs does not introduce any problems with duplicates or loops that do not also exist when every adjacency has a unique BP. Instead, the challenge when reusingBPBPs is whetherit allows to still achievethe desired Tree Engineeringgoals.</t> <t>BPgoals can still be achieved.</t> <t>A BP cannot be reused across two BFRs that would need to be passed sequentially for some path:Thethe first BFR will clear the BP, so those paths cannot be built. A BP can be set acrossBFRBFRs that would(A)only occur across (A) different paths or (B)acrossdifferent branches of the same tree.</t> <t>An example of (A) was given in <xreftarget="polarization-picture"/>,target="polarization-picture" format="default"/>, where BP 0:7, BP0:80:8, and BP 0:9 are each reused across multiple BFRs because a single packet/path would never be able to reach more than one BFR sharing the same BP.</t> <t>Assume that the example was changed: BFR1 has no ECMP() adjacency for BP0:6,0:6 but instead has BP 0:5 with forward_connected() to BFR2 and BP 0:6 with forward_connected() to BFR3. Packets with both BP 0:5 and BP 0:6 would now be able to reach both BFR2 andBFR3BFR3, and thestill existing re-usestill-existing reuse of BP 0:7 between BFR2 and BFR3 is a case of (B) wherereuse ofreusing a BP is perfect because it does not limit the set of useful pathchoices:</t>choices, as in the following example.</t> <t>If instead of reusing BP0:7,0:7 BFR3 used a separate BP 0:10 for its ECMP() adjacency, no useful additional path steering options would be enabled. If duplicates at BFR10wherewere undesirable, this would be done by not setting BP 0:5 and BP 0:6 for the same packet. If the duplicateswherewere desirable(e.g.:(e.g., resilient transmission), the additional BP 0:10 would also not render additional value.</t> <t>Reuse may also save BPs in larger topologies. Consider the topology shown in <xref target="scaling-picture2" format="default"/>.</t> <figureanchor="scaling-picture2" title="Reuseanchor="scaling-picture2"> <name>Reuse ofBP">BPs</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ area1 BFR1a BFR1b / \ .................................... . Core . .................................... | / \ / \ | BFR2a BFR2b BFR3a BFR3b BFR6a BFR6b /-------\ /---------\ /--------\ | area2 | | area3 | ... | area6 | | ring | | ring | | ring | \-------/ \---------/ \--------/ moreBFRBFRs moreBFRBFRs moreBFR ]]></artwork></figure> <t>Reuse may also save BPs in larger topologies. Consider the topology shown in <xref target="scaling-picture2"/>. ABFRs ]]></artwork> </figure> <t>A BFIR/sender(e.g.:(e.g., video headend) is attached to area 1, andareathe five areas 2...6 containreceivers/BFER.receivers/BFERs. Assume that each areahadhas a distribution ring, each with two BPs to indicate the direction (as explained before). These two BPs could be reused across the5five areas. Packets would be replicated through other BPsforfrom theCorecore to the desired subset of areas, and once a packet copy reaches the ring of the area, the two ring BPs come into play. This reuse is a case of (B), but it limits the topology choices:Packetspackets can only flow around the same direction in the rings of all areas. This may or may not be acceptable based on the desired path steering options:Ifif resilient transmission is the path engineering goal, then it is likely a goodoptimization,optimization; however, if the bandwidth of each ringwaswere to be optimized separately, it would not be a good limitation.</t> </section> <section anchor="bits-summary"title="Summarynumbered="true" toc="default"> <name>Summary of BPoptimizations"> <t>This sectionOptimizations</name> <t>In this section, we reviewed a range of techniques by which a BIER-TEControllercontroller can create a BIER-TE topology in a way that minimizes the number of necessary BPs.</t> <t>Without any optimization, a BIER-TEControllercontroller would attempt to map the network subnet topology 1:1 into the BIER-TEtopology andtopology, everysubnetadjacent neighborrequiresin the subnet would require a forward_connected()BPBP, and every BFERrequireswould require a local_decap() BP.</t> <t>The optimizations described in this document are then asfollows:<list style="symbols"> <t>P2Pfollows:</t> <ol spacing="normal"> <li>P2P links require only one BP (<xreftarget="p2p-links"/>).</t> <t>All leaf-BFERtarget="p2p-links" format="default"/>).</li> <li>All leaf BFERs can share a single local_decap() BP (<xreftarget="leaf-bfer"/>).</t> <t>Atarget="leaf-bfer" format="default"/>).</li> <li>A LAN with NBFRBFRs needs at most NBPBPs (one for each BFR). It only needs one BP for all thoseBFRBFRs that are not redundantly connected to multiple LANs (<xreftarget="lans"/>).</t> <t>Atarget="lans" format="default"/>).</li> <li>A hub withp2pP2P connections to multiplenon-leaf-BFERnon-leaf BFER spokes can share one BPtowith all of the spokes if traffic can be flooded to all of those spokes,e.g.:e.g., because of no bandwidth concerns or dense receiver sets (<xreftarget="hubnspoke"/>).</t> <t>Ringstarget="hubnspoke" format="default"/>).</li> <li>Rings ofBFRBFRs can be built with just twoBPBPs (one for eachdirection)direction), except forBFRBFRs with multiple ring connections--- similar to LANs (<xreftarget="rings"/>).</t> <t>ECMP()target="rings" format="default"/>).</li> <li>ECMP() adjacencies to N neighbors can replace NBPBPs with1one BP. Multihop ECMP can avoid polarization through different seeds of the ECMP algorithm (<xreftarget="ecmp"/>).</t> <t>Forward_routed()target="ecmp" format="default"/>).</li> <li>Forward_routed() adjacenciesallow to "tunnel"permit "tunneling" acrossnon-BIER-TE capableroutersand acrossthat are either BIER-TE capable or not BIER-TE capablerouterswhere notraffic-steeringtraffic steering or replications are required (<xreftarget="routed"/>).</t> <t>BPtarget="routed" format="default"/>).</li> <li>A BP can generally be reused across a set of nodes where it can be guaranteed that no path will ever need to traverse more than one node of the set. Depending on the scenario, this may limit the feasible path steering options (<xreftarget="reuse"/>).</t> </list></t>target="reuse" format="default"/>).</li> </ol> <t>Note thatthe describedthis list of optimizations is not exhaustive.EspeciallyFurther optimizations of BPs are possible, especially when both the set of required path steering choicesis limitedand theset ofpossible subsets of BFERs that should be able to receive trafficis limited, further optimizations of BParepossible.limited. Thehub and spokehub-and-spoke optimization is a simple example of suchtraffic pattern dependenttraffic-pattern-dependent optimizations.</t> </section> </section><!-- bitpositions --><section anchor="avoiding"title="Avoiding duplicatesnumbered="true" toc="default"> <name>Avoiding Duplicates andloops">Loops</name> <section anchor="loops"title="Loops">numbered="true" toc="default"> <name>Loops</name> <t>Whenever BIER-TE creates a copy of a packet, the BitString of that copy will have all bit positions cleared that are associated with adjacencies on the BFR. Thisinhibits looping of packets.prevents packets from looping. The onlyexceptionexceptions are adjacencies with DNC set.</t> <t>With DNC set, looping can happen. Consider in <xref target="ring-picture2" format="default"/> that link L4 from BFR3 is (inadvertently) plugged into the L1 interface of BFRa (instead of BFR2). This creates a loop where the ring's clockwise bit position is never cleared for copies of the packets traveling clockwise around the ring.</t> <figureanchor="ring-picture2" title="Miswiredanchor="ring-picture2"> <name>Miswired RingExample">Example</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ v v | | L1 | L2 | L3 /-------- BFRa ---- BFRb ---------------------\ | . | | ...... Wrong link wiring | | . | \- BFR1 - BFR2 BFR3 - ... - BFR29 - BFR30 -/ | | L4 | | p33| p15| BFRd BFRc]]></artwork></figure> <t>With DNC set, looping can happen. Consider in <xref target="ring-picture2"/> that link L4 from BFR3 is (inadvertently) plugged into the L1 interface of BFRa (instead of BFR2). This creates a loop where the rings clockwise bit position is never cleared for copies of the packets traveling clockwise around the ring.</t>]]></artwork> </figure> <t>To inhibit looping in the face of such physical misconfiguration, only forward_connected() adjacencies are permitted to have DNC set, and the link layer port unique unicast destination address of the adjacency(e.g. MAC(e.g., "Media Access Control" (MAC) address) protects against closing the loop. Link layers without port unique link layer addresses should not be used with the DNC flag set.</t> </section><!-- loops --><section anchor="duplicates"title="Duplicates"> <figure anchor="duplicates-picture" title="Duplicates Example"> <artwork align="left"><![CDATA[ BFIR1 / \ / p2 \ p3 BFR2 BFR3 \ p4 / p5 \ / BFER4 ]]></artwork></figure>numbered="true" toc="default"> <name>Duplicates</name> <t>Duplicates happen when the graph expressed by a BitString is not a tree but is redundantly connecting BFRs with each other. In <xreftarget="duplicates-picture"/>,target="duplicates-picture" format="default"/>, a BitString of p2,p3,p4,p5 would result in duplicate packetsto arrivearriving on BFER4. The BIER-TEControllercontroller must therefore ensuretothat onlycreateBitStrings that aretrees.</t>trees are created.</t> <figure anchor="duplicates-picture"> <name>Duplicates Example</name> <artwork align="left" name="" type="" alt=""><![CDATA[ BFIR1 / \ / p2 \ p3 BFR2 BFR3 \ p4 / p5 \ / BFER4 ]]></artwork> </figure> <t>When links are incorrectly physicallyre-connectedreconnected before the BIER-TEControllercontroller updates BitStrings in BFIRs, duplicates can happen. Like loops, these can be inhibited by link layer addressing in forward_connected() adjacencies.</t> <t>If interface or loopback addresses used in forward_routed() adjacencies are moved from one BFR to another, duplicatescanare equally likely to happen. Suchre-addressingreaddressing operations must be coordinated with the BIER-TEController.</t>controller.</t> </section><!-- duplicates --></section><!-- avoiding --><section anchor="mgmt-stuff"title="Managing SI, sub-domainsnumbered="true" toc="default"> <name>Managing SIs, Subdomains, andBFR-ids">BFR-ids</name> <t>When the number of bits required to represent the necessary hops in the topology andBFERBFERs exceeds the supportedBitStringLength"BitStringLength" (BSL), multiple SIs and/orsub-domainssubdomains must be used. This section discusseshow.</t>how this is done.</t> <t>BIER-TE forwarding does not require the concept ofBFR-id,BFR-ids, but routing underlay, flowoverlayoverlay, and BIER headers may. This section also discusses how BFR-ids can be assigned toBFIR/BFERBFIRs/BFERs for BIER-TE.</t> <section anchor="why"title="Why SInumbered="true" toc="default"> <name>Why SIs andsub-domains">Subdomains?</name> <t>For (non-TE) BIER and BIER-TE forwarding, the most important result of using multipleSISIs and/orsub-domainssubdomains is the same:Packetsmulticast flow overlay packets that need to be sent to BFERs in different SIs orsub-domainssubdomains requiredifferentmultiple BIERpackets:packets, each one with a BitString for a different(SI,sub-domain)(SI,subdomain) combination. Each such BitString uses oneBSL sizedBSL-sized SI block in the BIFT of thesub-domain.subdomain. We call this a BIFT:SI (block).</t><t>For BIER and BIER-TE forwarding themselves there is also no difference whether different SIs and/or sub-domains are chosen, but SI<t>SIs andsub-domainsubdomains have different purposes in the BIER architectureshared by BIER-TE.and also the BIER-TE architecture. This impacts how operatorsare managingmanage them andhowespecially how flow overlays will likely use them.</t> <t>By default, every possible BFIR/BFER in a BIER network would likely be given a BFR-id insub-domainsubdomain 0 (unless there are>> 64kBFIR/BFER).BFIRs/BFERs). </t> <t>If there are different flow services (or service instances) requiring replication to different subsets of BFERs, then it will likely not be possible to achieve the best replication efficiency for all of these service instances viasub-domainsubdomain 0. Ideal replication efficiency for NBFERBFERs exists in asub-domainsubdomain if they are split overnotno more than ceiling(N/BitStringLength)SI.</t>SIs.</t> <t>If service instances justify additional BIER:SI state in the network, additionalsub-domainssubdomains will be used:BFIR/BFERBFIRs/BFERs are assignedBFR-idBFR-ids in thosesub-domainssubdomains, and each service instance is configured to use the most appropriatesub-domain.subdomain. This results in improved replication efficiency for different services.</t> <t>Even if creation ofsub-domainssubdomains and assignment ofBFR-idBFR-ids toBFIR/BFERBFIRs/BFERs in thosesub-domainssubdomains is automated, it is not expected that individual service instances can deal withBFERBFERs in differentsub-domains.subdomains. A service instance may only support configuration of a singlesub-domainsubdomain it should rely on.</t> <t>To be able to easily reuse (and modify as little as possible) existing BIER proceduresincluding flow-overlay(including flow overlay and routingunderlay,underlay), when BIER-TE forwarding is added, we therefore reuseSISIs andsub-domainsubdomains logically in the same way as they are used in BIER:Allall necessaryBFIR/BFERBFIRs/BFERs for a service use a single BIER-TE BIFT and are split across as many SIs as necessary (see <xreftarget="bit-requirements"/>).target="bit-requirements" format="default"/>). Different services may use differentsub-domainssubdomains that primarily exist to provide more efficient replication(and(and, forBIER-TEBIER-TE, desirable path steering) for different subsets ofBFIR/BFER.</t>BFIRs/BFERs.</t> </section><!-- why --><section anchor="bit-requirements"title="Assigning bitsnumbered="true" toc="default"> <name>Assigning Bits for the BIER-TEtopology">Topology</name> <t>In BIER, BitStrings only need to carry bits forBFERs, whichBFERs; this leads to the modelthatwhere BFR-ids map 1:1 to each bit in a BitString.</t> <t>In BIER-TE, BitStrings need to carry bits to indicate not only the receiving BFER but also the intermediate hops/links across which the packet must be sent. The maximum number ofBFERBFERs that can be supported in a single BitString or BIFT:SI depends on the number of bits necessary to represent the desired topology between them.</t> <t>"Desired" topologybecausemeans that it depends on the physicaltopology,topology andonthe operator's desireof the operator to allow forto</t> <ol spacing="normal"> <li>permit explicit path steering across every single hop (which requires more bits),or reducingor</li> <li>reduce the number of required bits by exploiting optimizations such as unicast (forward_routed()),ECMP()ECMP(), or flood (DNC) over "uninteresting" sub-parts of thetopology - e.g.topology, e.g., partswherewhere, for path steering reasons, different trees do not need to take differentpaths due to path steering reasons.</t>paths.</li> </ol> <t>The total number of bits to describe the topology vs. the number of BFERs in a BIFT:SI can range widely based on the size of the topology and the amount of alternative paths in it. In a BIER-TE topology crafted by a BIER-TE expert, the higher the percentage of non-BFER bits, the higher thelikelihood,likelihood that those topology bits are not just BIER-TE overhead without additionalbenefit,benefit but insteadthat theywill allowto expressthe expression of desirable path steering alternatives.</t> </section> <section anchor="bfr-id"title="Assigning BFR-idnumbered="true" toc="default"> <name>Assigning BFR-ids withBIER-TE">BIER-TE</name> <t>BIER-TE forwarding does not usethe BFR-id,BFR-ids, nor does it requireforthat the BFIR-id field of the BIER headertobe set to a particular value. However, other parts of a BIER-TE deployment may need aBFR-id, specificallyBFR-id -- specifically, multicast flow overlay signaling and multicast flow overlay packetdisposition, anddisposition; in thatcasecase, BFRs need to also have BFR-ids for BIER-TE SDs.</t> <t>For example, for BIER overlay signaling, BFIRs need to have a BFR-id, because this BFIR BFR-id is carried in the BFIR-id field of the BIER header to indicate to the overlay signaling on the receiving BFER which BFIR originated the packet.</t> <t>In BIER, BFR-id = SI * BSL + BP, such that the SI and BP of a BFER can be calculated from the BFR-id and vice versa. This also means that every BFR with a BFR-id has a reserved BP in an SI, even if that is not necessary for BIER forwarding, because the BFR may never be a BFERbut(i.e., will only be aBFIR.</t>BFIR).</t> <t>In BIER-TE, for a non-leaf BFER, there is usually a single BP for that BFER with a local_decap() adjacency on the BFER. The BFR-id for such a BFER can therefore be determined using the same procedure asinthat used for (non-TE) BIER: BFR-id = SI * BSL + BP.</t> <t>As explained in <xreftarget="leaf-bfer"/>,target="leaf-bfer" format="default"/>, leaf BFERs do not need such a unique local_decap() adjacency. Likewise, BFIRs that are not also BFERs may not have a unique local_decap() adjacency either. For all those BFIRs and (leaf) BFERs, the controller needs to determine unique BFR-ids that do not collide with the BFR-ids derived from the non-leaf BFER local_decap() BPs.</t> <t>While this document defines no requirements on how to allocate suchBFR-id,BFR-ids, a simple option is to derive it from the (SI,BP) of an adjacency that is unique to the BFR in question. For aBFIRBFIR, this can be the first adjacency that is only populated on thisBFIR,BFIR; for aleaf-BFER,leaf BFER, this could be the first BP with an adjacency towards that BFER.</t> </section> <section anchor="bitstring-mappings"title="Mappingnumbered="true" toc="default"> <name>Mapping fromBFRBFRs to BitStrings withBIER-TE">BIER-TE</name> <t>In BIER, applications of the flow overlay on a BFIR can calculate the (SI,BP) of a BFER from the BFR-id of the BFER and can therefore easily determine the BitStrings for a BIER packet to a set of BFERs with known BFR-ids.</t> <t>InBIER-TEBIER-TE, this mapping needs to be equally supported for flow overlays. This section outlines two core options, based on what type of Tree Engineering the BIER-TE controller needs toperformsperform for a particular application.</t><t>"Independent branches": For<dl spacing="normal"> <dt>"Independent branches":</dt><dd>For a given flow overlay instance, the branches from a BFIR to every BFER are calculated by the BIER-TE controller to be independent of the branches to any other BFER. Shortest path trees are the most common examples of trees with independentbranches.</t> <t>"Interdependent branches": Whenbranches.</dd> <dt>"Interdependent branches":</dt><dd>When a BFER is added to or deleted from a particular distribution tree, the BIER-TE controller has to recalculate the branches to otherBFER,BFERs, because they may need to change. Steiner trees are examples of interdependent branchtrees.</t>trees.</dd> </dl> <t>If "independent branches" are used, the BIER-TEControllercontroller can signal to the BFIR flow overlay for every BFER an SI:BitString that represents the branch to that BFER. The flow overlay on theBIFRBFIR canthenthen, independently of thecontrollercontroller, calculate the SI:BitString for all desired BFERs byOR'ingORing their BitStrings. This allowsforflow overlay applications to operate independently of the controller wheneverit needsthey need to determine which subset of BFERsneedneeds to receive a particular packet.</t> <t>If "interdependent branches" are required,thean application would need toinquirequery the SI:BitString for a given set ofBFERBFERs whenever the set changes.</t> <t>Note that in either case (unlikeinthe scenario for BIER), the bits may need to change upon link/node failure/recovery, networkexpansion andexpansion, or network resource consumption by other traffic as part oftraffic engineeringachieving Traffic Engineering goals(e.g.: re-optimization(e.g., reoptimization oflower prioritylower-priority traffic flows). Interactions between such BFIR applications and the BIER-TEControllercontroller do therefore need to support dynamic updates to theSI:BitStrings.</t>SIs:BitStrings.</t> <t>Communications between the BFIR flow overlay and the BIER-TE controllerrequiresrequire some way to identify theBFER.BFERs. If BFR-ids are used in the deployment, as outlined in <xreftarget="bfr-id"/>,target="bfr-id" format="default"/>, then those are thenatural BFR identifier."natural" BFR-ids. If BFR-ids are not used, then any other unique identifier, such asthea BFR's BFR-prefixof the BFR (<xref target="RFC8279"/>)<xref target="RFC8279" format="default"/>, could be used.</t> </section><!-- bfr-id --><section anchor="assigning"title="Assigningnumbered="true" toc="default"> <name>Assigning BFR-ids forBIER-TE">BIER-TE</name> <t>It is not currently determined if a singlesub-domainsubdomain could or should be allowed to forward both (non-TE) BIER and BIER-TE packets. If this should be supported, there are two options:</t><t>A. BIER<ol spacing="normal" type="A"> <li>BIER and BIER-TE have differentBFR-idBFR-ids in the samesub-domain.subdomain. This allows higher replication efficiency for BIER becausetheir BFR-idthe BIER BFR-ids can be assigned sequentially, while the BitStrings for BIER-TE willhavealso have to assign the additional bits for thetopology.topology adjacencies. There is no relationship between a BFR BIER BFR-id and its BIER-TEBFR-id.</t> <t>B. BIERBFR-id.</li> <li>BIER and BIER-TE share the same BFR-id. The BFR-ids are assigned as explained above for BIER-TE and simply reused for BIER. The replication efficiency for BIER will be as low as that for BIER-TE in thisapproach.</t>approach.</li> </ol> </section><!-- assigning --><section anchor="allocation-example"title="Example bit allocations">numbered="true" toc="default"> <name>Example Bit Allocations</name> <section anchor="with-bier"title="With BIER">numbered="true" toc="default"> <name>With BIER</name> <t>Consider a network setup with a BSL of 256 for a network topology as shown in <xreftarget="scaling-picture"/>.target="scaling-picture" format="default"/>. The network has6six areas, each with 170 BFERs, connecting via a core with4four (core) BFRs. To address all BFERs with BIER,4four SIs are required. To send a BIER packet to allBFERBFERs in the network,4four copies need to be sent by the BFIR. On theBFIRBFIR, it does notmake a differencematter how the BFR-ids are allocated toBFERBFERs in the network, but it does matter for efficiency further down in thenetwork it does make a difference.</t>network.</t> <figureanchor="scaling-picture" title="Scalinganchor="scaling-picture"> <name>Scaling BIER-TEbitsBits byreuse">Reuse</name> <artworkalign="left"><![CDATA[align="left" name="" type="" alt=""><![CDATA[ area1 area2 area3 BFR1a BFR1b BFR2a BFR2b BFR3a BFR3b | \ / \ / | ................................ . Core . ................................ | / \ / \ | BFR4a BFR4b BFR5a BFR5b BFR6a BFR6b area4 area5 area6]]></artwork></figure>]]></artwork> </figure> <t>With random allocation ofBFR-idBFR-ids toBFER,BFERs, each receiving area would (most likely) have to receive all4four copies of the BIER packet because there would beBFR-idBFR-ids for each of the4four SIs in each of the areas. Only further towards each BFER would this duplication subside--- when each of the4four trees runs out of branches.</t> <t>If BFR-ids are allocated intelligently, then all theBFERBFERs in an area would be givenBFR-idBFR-ids with as fewas possibledifferentSIs.SIs as possible. Each area would only have to forward one or two packets instead of4.</t>four.</t> <t>Given how networks can grow over time, replication efficiency in an area will then also go down over time when BFR-ids are only allocated sequentially, network wide. An area that initially only hasBFR-idBFR-ids in one SI might end up with many SIs over a longer period of growth. Allocating SIs to areaswiththat initially have sufficiently many spare bits forgrowthsgrowth can helptoalleviate this issue.Or renumberAlternatively, BFERs can be renumbered after network expansion. In thisexampleexample, one may considerto use 6using six SIs andassignassigning one to each area.</t> <t>This example shows that intelligent BFR-id allocation within at leastsub-domainsubdomain 0 canevenbe helpful or even necessary in BIER.</t> </section><!-- with-bier --><section anchor="with-bier-te"title="With BIER-TE">numbered="true" toc="default"> <name>With BIER-TE</name> <t>InBIER-TEBIER-TE, one needs to determine a subset of the physical topology and attached BFERs so that the "desired" representation of this topology and theBFERBFERs fit into a single BitString. This process needs to be repeated until the whole topology is covered.</t> <t>Once bits/SIs are assigned to the topology and BFERs,BFR-id isBFR-ids are just a derived set of identifiers from theoperator/BIER-TE Controlleroperator / BIER-TE controller as explained above.</t><t>Every time that<t>Whenever differentsub-topologiessubtopologies have overlap, bits need to be repeated across the BitStrings, increasing the overall amount of bits required across allBitString/SIs.BitStrings/SIs. In the worst case, one assigns random subsets of BFERs to different SIs. This will result in an outcome much worse than in (non-TE) BIER:Itit maximizes the amount of unnecessary topology overlap acrossSISIs and therefore reduces the number ofBFERBFERs that can be reached across each individual SI. IntelligentBFER to SIBFER-to-SI assignment and selecting specific "desired" subtopologies can minimize this problem.</t> <t>To set up BIER-TE efficiently for the topologyofshown in <xreftarget="scaling-picture"/>,target="scaling-picture" format="default"/>, the following bit allocation method can be used. This method can easily be expanded to other, similarly structured larger topologies.</t> <t>Each area is allocated one or moreSIsSIs, depending on the number of future expected BFERs and the number of bits required for the topology in the area. In this example,6 SIs,six SIs are used, one per area.</t> <t>In addition, we use4four bits in eachSI: bia, bib, bea, beb: (b)itSI:</t> <dl spacing="normal"> <dt>bia:</dt><dd>(b)it (i)ngress(a), (b)it(a)</dd> <dt>bib:</dt><dd>(b)it (i)ngress(b), (b)it(b)</dd> <dt>bea:</dt><dd>(b)it (e)gress(a), (b)it(a)</dd> <dt>beb:</dt><dd>(b)it (e)gress(b). These(b)</dd> </dl> <t>These bits will be used to pass BIER packets from any BFIR via any combination of ingress area a/bBFRBFRs and egress area a/bBFRBFRs into a specific target area. These bits are then set up with the right forward_routed() adjacencies on theBFIRBFIRs and area edgeBFR:</t>BFRs as follows.</t> <t>On all BFIRs in anareaarea, j|j=1...6, bia in each BIFT:SI is populated with the sameforward_routed(BFRja),forward_routed(BFRja) and bib with forward_routed(BFRjb). On all area edgeBFR,BFRs, bea in BIFT:SI=k|k=1...6 is populated with forward_routed(BFRka) and beb in BIFT:SI=k with forward_routed(BFRkb).</t> <t>For BIER-TE forwarding of a packet to a subset of BFERs across all areas, a BFIR would create at most6six copies, withSI=1...SI=6,SI=1...SI=6. In each packet, thebits indicateBitString includes bits fortopologyone area andBFERthe BFERs in thattopologyarea, plus the four bits to indicate whether to pass this packet via the ingress area a or b border BFR and the egress area a or b border BFR, therefore allowing path steering for those two "unicast" legs: 1) BFIR to ingress area edge and 2) core to egress area edge. Replication only happens inside the egress areas. ForBFERBFERs that are in the same area asinthe BFIR, these four bits are not used.</t> </section><!-- with-bier-te --></section><!-- example --><section anchor="summary"title="Summary">numbered="true" toc="default"> <name>Summary</name> <t>BIER-TE can, like BIER, support multiple SIs within asub-domain.subdomain. This allowsto applyapplication of the mapping BFR-id = SI * BSL + BP. Thisallows to re-usealso permits the reuse of the BIER architecture concept ofBFR-id and therefore minimize BIER-TE specificBFR-ids and, therefore, minimization of BIER-TE-specific functions in possible BIER layer control plane mechanisms with BIER-TE, including flow overlay methods and BIER header fields.</t> <t>The number ofBFIR/BFERBFIRs/BFERs possible in asub-domainsubdomain is smaller than in BIER because BIER-TE uses additional bits for the topology.</t><t>Sub-domains (SDs)<t>Subdomains in BIER-TE can be usedlikeas they are in BIER to create more efficient replication to known subsets of BFERs.</t> <t>Assigning bits for BFERs intelligently into the right SI is more important in BIER-TE than in BIER because of replication efficiency and the overall amount of bits required.</t> </section><!-- example --></section><!-- mgmt-stuff --></section><!-- controller-ops --><section anchor="security"title="Security Considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>If "<xref target="RFC8296" format="title"/>" <xreftarget="RFC8296"/>target="RFC8296" format="default"/> is used,BIER-TE sharesits securityconsiderations.</t> <t>BIER-TE shares theconsiderations also apply to BIER-TE.</t> <t>The security considerations ofBIER,"<xref target="RFC8279" format="title"/>" <xreftarget="RFC8279"/>,target="RFC8279" format="default"/> also apply to BIER-TE, with the following overriding or additional considerations.</t> <t>BIER-TE forwarding explicitly supports unicast "tunneling" of BIER packets via forward_routed() adjacencies. The BIER domain security model is based on a subset of interfaces on a BFR that connect to other BFRs of the same BIER domain. For BIER-TE, this security model equally applies to such unicast "tunneled" BIER packets. Thisdoesnot onlyincludeincludes the need to filter received unicast "tunneled" BIER packets to prohibit the injection of such "tunneled" BIER packets from outside the BIERdomain,domain but alsoprohibitingthe need to prohibit forward_routed() adjacenciesto leakfrom leaking BIER packets from the BIER domain. ItSHOULD<bcp14>SHOULD</bcp14> be possible to configure interfaces to be part of a BIER domain solely for sending and receivingofunicast "tunneled" BIER packets even if the interfacecan notcannot send/receive BIER encapsulated packets.</t> <t>In BIER, the standardized methods for the routing underlays are IGPs with extensions to distribute BFR-ids and BFR-prefixes. <xreftarget="RFC8401"/>target="RFC8401" format="default"/> specifies the extensions forIS-ISIS-IS, and <xreftarget="RFC8444"/>target="RFC8444" format="default"/> specifies the extensions for OSPF. Attacking the protocols for the BIER routing underlay or (non-TE) BIER layer control plane, or the impairment of anyBFRBFRs in adomaindomain, may lead to successful attacks against theresults ofinformation that BIER-TE learns from the routingprotocol,protocol (routes, next hops, BFR-ids, ...), enabling DoS attacks against paths or the addressing(BFR-id,(BFR-ids, BFR-prefixes) used by BIER.</t> <t>The reference model for the BIER-TE layer control plane is a BIER-TE controller. When such a controller is used, the impairment of an individual BFR in a domain causes no impairment of the BIER-TE control plane on other BFRs. If a routing protocol is used to support forward_routed() adjacencies, then this is still an attack vector as in BIER, but only for BIER-TE forward_routed()adjacencies,adjacencies and not other adjacencies.</t> <t>Whereas IGP routing protocols are most often not well secured through cryptographic authentication and confidentiality, communications between controllers and routers such as those to be considered for the BIER-TEcontroller/control-planecontroller / control plane canbebe, andareare, much more commonly secured with those securityproperties,properties -- forexampleexample, by usingSecure SHell (SSH),"Secure Shell" (SSH) <xreftarget="RFC4253"/>target="RFC4253" format="default"/> for NETCONF(<xref target="RFC6242"/>),<xref target="RFC6242" format="default"/>; or viaTransport"Transport LayerSecuritySecurity" (TLS), such as <xreftarget="RFC8253"/>target="RFC8253" format="default"/> forPCEP,PCEP <xreftarget="RFC5440"/>,target="RFC5440" format="default"/> or <xreftarget="RFC7589"/>target="RFC7589" format="default"/> for NETCONF. BIER-TE controllersSHOULD<bcp14>SHOULD</bcp14> use security equal to or better than these mechanisms.</t> <t>When any of these security mechanisms/protocols are used for communications between a BIER-TE controller and BFRs, their security considerations apply to BIER-TE. In addition, the security considerations ofPCE,"<xref target="RFC4655" format="title"/>" <xreftarget="RFC4655"/>target="RFC4655" format="default"/> apply.</t> <t>The most important attack vector in BIER-TE is misconfiguration, either on theBFRBFRs themselves or via the BIER-TE controller. Forwarding entries with DNC could be set up to create persistent loops, in which packets only expire because of TTL. To minimize the impact of such attacks(or(or, morelikelylikely, unintentional misconfiguration by operators and/or bad BIER-TE controller software), the BIER-TE forwarding rules are defined to be as strict in clearing bits as possible. The clearing of all bits with an adjacency on a BFR prohibitsthata looping packetcreatesfrom creating additional packet amplification through the misconfigured loop on the packet's second time orfurthersubsequent times around the loop, because all relevant adjacency bits would have been cleared on the first round through the loop.InAs a result, looping packets can occur in BIER-TEhasto the same degreeof looping packetsas is possible with unintentional or malicious loops in the routing underlay withBIERBIER, or even with unicast traffic.</t> <t>Deployments where BIER-TE would likely be beneficial may include operational models where actual configuration changes from the controller are only required during non-production phases of the network'slife-cycle, such aslife cycle, e.g., in embedded networks or in manufacturing networks duringe.g.such activities as plantreworking/repairs.reworking or repairs. In thesetypetypes of deployments, configuration changes could be locked out when the network is in production state and could only be (re-)enabled through reverting the network/installationintoto non-production state. Such security designs would not only allow a deployment to provide additional layers of protection against configurationattacks,attacks butwould foremostwould, first and foremost, protect the active production process from such configuration attacks.</t> </section><!-- security --><section anchor="iana"title="IANA Considerations">numbered="true" toc="default"> <name>IANA Considerations</name> <t>This documentrequestshas noaction by IANA. </t>IANA actions.</t> </section><!-- iana --> <section anchor="ack" title="Acknowledgements"> <t>The authors would like to thank Greg Shepherd, Ijsbrand Wijnands, Neale Ranns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, Carsten Borman and Wolfgang Braun for their reviews and suggestions.</t> <t> Special thanks to Xuesong Geng for shepherding the document and for IESG review/suggestions by Alvaro Retana (responsible AD/RTG), Benjamin Kaduk (SEC), Tommy Pauly (TSV), Zaheduzzaman Sarker (TSV), Eric Vyncke (INT), Martin Vigoureux (RTG), Robert Wilton (OPS), Eric Kline (INT), Lars Eggert (GEN), Roman Danyliv (SEC), Ines Robles (RTGDIR), Robert Sparks (Gen-ART), Yingzhen Qu (RTGdir), Martin Duke (TSV).</t> </section> <!-- ack --> <section anchor="changes" title="Change log [RFC Editor: Please remove]"> <t>draft-ietf-bier-te-arch: <list> <t>13:</t> <t>Changed Gregs author association/email.</t> <t>Fixed Nits in -12 from Ben Kaduk.</t> <t>Fixed Alvaro's concerns: (1) Removed references to SR in Abstract/Overview (2) removed section 4.5.</t> <t>12:</t> <t>AD review Alvaro Retana.</t> <t>Various textual/editorial nits including adding () to all instances of forwarding adjacency name instances.</t> <t>3.1 Added new paragraph outlining possible use of BGP as RR in BIER-TE controller as core of multicast flow overlay component of BIER-TE.</t> <t>3.2 added xref's to relevant sections to the listed control plane points.</t> <t>4.1 rewrote paragraphs of 4.1 leading up to Figure 4. to eliminate any confusion in how the BIFT work and how it compares to the notions in rfc8279, as well as better linking it to the Pseudocode.</t> <t>Moved SR section into appendix.</t> <t>TSV review Martin Duke.</t> <t>Text/editorial nits.</t> <t>4.4 improved text describing handling of F-BM.</t> <t>RTGdir review Yingzhen Qu.</t> <t>Various text/editorial nits.</t> <t>Added notion that BitStrings represent loop free tree for packet to abstract and intro.</t> <t>Various text nit and editorial improvements.</t> <t>Fixed some BFR-id field -> BFIR-id field mistakes.</t> <t>Capitalized NETCONF/RESTCONF/YANG, added RFC references.</t> <t>Improved Figure 16 with explicitly two links into BFR3 and explanatory text.</t> <t>Gen-ART review Robert Sparks.</t> <t>Various textual nits, editorial improvements.</t> <t>3.2 Introduced terms "BIER-TE topology control" and "BIER-TE tree control" for the two functional components of the control plane. </t> <t>3.2.1 - 3.2 change introduces the open RFC-editor issue of appropriate xrfs (to be resolved by RFC-editor).</t> <t>3.3 Rewrote last paragraph to better describe loop prevention through clearing of bits in BitString.</t> <t>4.1 Fixed up text/formula describing mapping between bfr-id, SI:BP and SI,BSL and BP. Fix offset bug.</t> <t>5.3.6.2 Improved description paragraph explaining overlap of topology for different SI.</t> <t>5.3.7 Improved first summary paragraph.</t> <t>7. Rephrased applicability statement of control plane protocol security considerations to BIER-TE security.</t> <t>RTGDIR review Ines Robles.</t> <t>Fixed up adjacencies in Example 2 and explanation text to be explicit about which BFR not only passes, but also receives the packet.</t> <t>7. (security considerations). Added paragraph about forward_routed() and prohibiting BIER packet leaking in/out of domain.</t> <t>IESG review Roman Danyliv (SEC).</t> <t>Several textual/sentence nits/editorials.</t> <t>IESG review Lars Eggert (GEN).</t> <t>Various good editorial word fixed.</t> <t>Pointer to non-false-positive bloom filter work that looks like it happened after our IETF discussions documented in this doc, so will not add it to doc, but here is URL for folks interested: https://ieeexplore.ieee.org/document/8486415.</t> <t>Did not change "native" to a different word for inclusivity because of my worry there is no estavblished single replacement word, making reading/searching/understanding more difficult.</t> <t>IESG review Martin Vigeureux (RTG).</t> <t>Added back reference to RFC8402. Textual fixes.</t> <t>IESG review Eric Kline (INT).</t> <t>2.1 Fixed typo in BFR* explanations.</t> <t>4.3 Added explanatio about MTU handling.</t> <t>IESG review Eric Vyncke (INT).</t> <t>Fixed up initial text to introduce various abbreviations.</t> <t>2.4 refined wording to "with the _intent_ to easily build common forwarding planes...".</t> <t>4.2.3 refined text about entropy in ECMP - now taken text from rfc8279.</t> <t>IESG review Zaheduzzaman Sarker (TSV).</t> <t>5.1.7 Refined text explaining documentation of ECMP algorithm.</t> <t>5.3.6.2. fixed range of areas/SI over which to build the example large network BPs - removed explanation of the large network shown to be only used for sources in area 1 (IPTV), because it was a stale explanation.</t> <t>IESG review Ben Kaduk (round 2):</t> <t>4.4 Advanced pseudocode still had one wrong "~". Root cause seems to have been day 0 problem in pseudocode written for -01, "~" was inserted in the wrong one of two code lines. Also enhanced textual description and comments in pseudocode, changed variable name AdjacentBits to PktAdjacentBits to avoid confusion with AdjacentBits[SI].</t> <t>5.1.3 Rewrote last two paragraphs explaining the sharing of bit positions for lead-BFER hopefully better. Also detailled how it interacts with other optimizations and the type of payload BIER-TE packets may carry.</t> <t>4.4 (from Carsten Borman) changed spacing in pseudocode to be consistent. Fixed {VRF}, clarified pseudocode object syntax, typos.</t> <t>11: IESG review Ben Kaduk, summary:</t> <t>One discuss for bug in pseudocode. turned out to be one cahrcter typo.</t> <t>Added (non-TE) prefix in places where BIER by itsels had to be better disambiguated.</t> <t>enhanced text for hub-and-spoke to indicate we're only talking about hub to spoke traffic.</t> <t> long list ot language fixes/improvement (nits). Thanks a lot!.</t> <t>add suggestion to SHOULD use known confidentiality protocols between controller and BFR.</t> <t>10: AD review Alvaro Retana, summary:</t> <t>Note: rfcdiff shows more changes than actually exist because text moved around.</t> <t>Summary:<list style="numbers"> <t>restructuring: merged all controller sections under common controller ops main section, moved unfitting stuff out to other parts of doc. Split Intro section into Overview and Intro. Shortened Abstract, moved text into Overview, added sections overview.</t> <t>enhanced/rewrote: 2.3 Comparison with -> Relationship to BIER-TE</t> <t>enhanced/rewrote: 3.2 BIER-TE controller -> BIER-TE control plane, 3.2.1 BIER-TE controller, for consistency with rfc8279</t> <t>additional subsections for Alvaros asks</t> <t>added to: 3.3 BIER-TE forwarding plane (consistency with rfc8279)</t> <t>Enhanced description of 4.3/encap considerations to better explain how BIER/BIER-TE can run together.</t> </list></t> <t>Notation: Markers (a),(b),... at end of points are references from the review discussion with Alvaro to the changes made.</t> <t>Details:.</t> <t>Throughout text: changed term spelling to rfc8279 - bit positions, sub-domain, ... (i).</t> <t>Reset changed to clear, also DNR changed to DNC (Do Not Clear) (q).</t> <t>Abstract: Shortened. Removed name explanation note (Tree Engineering), (a).</t> <t>1. Introduction -> Overview: Moved important explanation paragraph from abstract to Introduction. Fixed text, (a).</t> <t> Added bullet point list explanation of structure of document (e).</t> <t> Renamed</middle> <back> <displayreference target="I-D.ietf-roll-ccast" to="CONSTRAINED-CAST"/> <references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8279.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8296.xml"/> </references> <references> <name>Informative References</name> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4253.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4456.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4655.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.5440.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6241.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.6242.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7589.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7752.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7950.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7988.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8040.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8253.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8345.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8401.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8402.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8444.xml"/> <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8556.xml"/> <!-- draft-ietf-teas-rfc3272bis (I-D Exists) (have toOverviewdo "long way" becausethat is now more factually correct.</t> <t>1.1. Fixed bug in example adding bit p15.(l).</t> <t>2. (New - Introduction): Moved section 1.1 - 1.3 (examples, comparison with BIER-TE) from Introduction into new "Overview" section. Primarily so that "requirements language" section (at end of Introduction)Adrian Farrel isnot in middle of document after all the Introduction.</t> <t>2.1 Removed discussion of encap, moved to 4.2.2 (m).</t> <t>2.2 enhanced paragraph suggesting native/overlay topology types, also sugest type hybrid (n).</t> <t>2.3 Overhauled comparison text BIER/BIER-TE, structured into common, different, not-required-by-te, integration-bier-bier-te. Changed title to "Relationship" to allow including last point. (f).</t> <t>2.4 moved Hardware forwarding comparison section into section 2 to allow coalescing of sections into section 5 about the controller operations (hardware forwarding was in the middle of it, wrong place). Shortened/improved third paragraph by pointing to BIFT as deciding element for selection between BIER/BIER-TE. Removed notion of experimentation (this now targets standard) (g).</t> <t>3. (Components): Aligned component name and descriptions better with RFC8279. Now describe exactly same three layers. BIER layer constituted from BIER-TE control plane and BIER-TE forwarding plane. BIER-TE controller is now simply component of BIER-TE control plane. (b).</t> <t>3.1. shortened/improved paragraph explaining use of SI:BP instead of also bfr-id as index into BIFT, rewrote paragraph talking about reuse of BPs(o).</t> <t>3.2. rewrote explanation of BIER-TE control plane in the style of RFC8729 Section 4.2 (BIER layer) with numbered points. Note that RFC8729 mixes control and forwarding plane bullet points (this doc does not). Merged text from old sections 2.2.1editor) --> <reference anchor="TE-OVERVIEW"> <front> <title>Overview and2.2.3 into list. (b).</t> <t>3.2.1. Expanded/improved explanationPrinciples ofBIER-TE Controller (b).</t> <t>3.2.1.1. Added subsection for topology discovery and creation (d).</t> <t>3.2.1.2. Added subsection for engineered BitStrings as key novel aspect not found in BIER. (X).</t> <t>3.3. Added numbered list for components of BIER-TE forwarding plane (completing the comparable text from RFC8729 Section 4.2).</t> <t>3.4 Alvaro does not mind additional example, fixed bugs.</t> <t>3.5 Removed notion about using IGP BIER extensions for BIER-TE, such as BIFT address ranges. After -10 making use of BIFT clearer, it now looksInternet Traffic Engineering</title> <author fullname="Adrian Farrel" surname="Farrel" initials="A" role="editor"> </author> <date month="September" day="11" year="2022" /> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-teas-rfc3272bis-21" /> </reference> <!-- draft-ietf-bier-multicast-http-response (Expired) (have toauthors as if use of IGP extensions would not be beneficial, as long as wedoneed to use the BIER-TE controller, e.g. unlike in BIER, a BFR could not learn from the IGP information what traffic to send towards a particular BIFT-ID, but instead that is the core of what the controller needs to provide.</t> <t>4.2.2 Improved text to explain requirement to identify BIER-TE in the tunnel encap and compress description of use-cases (m).</t> <t>4.2.3 enhanced ECMP text (p).</t> <t>4.3. rewrote most of Encapsulation Considerations to better explain to Alvaros question re sharing or not sharing SD via BIER/BIER-TE. Added reference to I-D.ietf-bier-non-mpls-bift-encoding as a very helpful example. (f).</t> <t>4.3 Renamed title to "...Co-Existence with BIER" as this is what it is about and to help finding it from abstract/intro ("co-exist") (j).</t> <t>4.4. Moved BIER-TE Forwarding Pseudocode here to coalesce text logically. Changed text to better compare with BIER pseudo forwarding code. Numerical list of how F-BM works for BIER-TE. Removed efficiency comparison with BIER (too difficult to provide sufficient justification, derails from focus of section) (j).</t> <t>4.6. (Requirements) Restructured: Removed notion of "basic" BIER-TE forwarding, simply referring to it now as "mandatory" BIER-TE forwarding. Cleaned up text to have requirements for different adjacencies in different paragraphs. (c).</t> <t>5. Created new main section "BIER-TE Controller operational considerations", coalesced old sections 4., 5., 7. into this new main section. No text changes. (k).</t> <t>5.1.9 Added new separate picture instead of referring to a picture later in text, adjusted text (r).</t> <t>5.3.2 Changed title to not include word "comparison" to avoid this being accounted against Alvaros concern about scattering comparison (IMHO text already has little comparison, so title was misleading) (h).</t> <t>co-authors internal review:</t> <t>4.4 Added xref to Figure 5.</t> <t>5.2.1 Duplicated ring picture, added visuals for described miswiring (s).</t> <t>5.2.2 replace "topology" with graph (wrong word).</t> <t>5.3.3 rewrote explanation of how to map BFR-id to SI:BP and assign them, clarified BFR-id is option. Retitled to better explain scope of section.</t> <t>5.3.4 Removed considerations in 5.3.4 for sharing BFR-id across BIER/BIER-TE (t), changed title to explain how BFIR/BIER-TE controller interactions need some form of identifying BFR but this does not have to be BFR-id.</t> <t>7. Added new security considerations (u).</t> <t></t> <t>09: Incorporated fixes for feedback from Shepherd (Xuesong Geng).</t> <t> Added references for Bloom Filters and Rate Controlled Service Disciplines.</t> <t> 1.1 Fixed numbering of example 1 topology explanation. Improved language on second example (less abbreviating"long way" toavoid confusion about meaning).</t> <t> 1.2 Improved explanation of BIER-TE topology, fixed terminologyfix Toerless Eckert's initial) --> <reference anchor="BIER-MCAST-OVERLAY"> <front> <title>Applicability ofgraphs (BIER-TE topology is a directed graph where the edges are the adjacencies).</t> <t> 2.4 Fixed and amended routing underlay explanations: detailed why no need for BFER routing underlay routing protocol extensions, but potential to re-useBIERrouting underlay routing protocol extensions for non-BFER related extensions.</t> <t> 3.1 Added explanation for VRF and its use in adjacencies.</t> <t>08: Incorporated (with hopefully acceptable fixes) for Lou suggested section 2.5, TE considerations.</t> <t> Fixes are primarily to the point to a) emphasize that BIER-TE does not depend on the routing underlay unless forward_routed() adjacencies are used, and b) that the allocation and tracking of resources does not explicitly have to be tied to BPs, because they are just steering labels. Instead, it would ideally come from per-hop resource management that can be maintained only via local accounting in the controller.</t> <t>07: Further reworking text for Lou.</t> <t> Renamed BIER-PE to BIER-TE standingMulticast Overlay for"Tree Engineering" after votes from BIER WG.</t> <t> Removed section 1.1 (introduced by version 06) because not considered necessary in this doc by Lou (for framework doc).</t> <t> Added [RFC editor pls. remove] Section to explain name change to future reviewers.</t> <t>06: Concern by Lou Berger re. BIER-TE as full traffic engineering solution.</t> <t> Changed title "Traffic Engineering" to "Path Engineering"</t> <t> Added intro section of relationship BIER-PE to traffic engineering.</t> <t> Changed "traffic engineering" term in text" to "path engineering", where appropriate</t> <t> Other:</t> <t> Shortened "BIER-TE Controller Host" to "BIER-TE Controller". Fixed up all instances of controllerAdaptive Streaming Services</title> <author initials="D." surname="Trossen" fullname="Dirk Trossen"> <organization>Huawei Technologies Duesseldorf GmbH</organization> </author> <author initials="A." surname="Rahman" fullname="Akbar Rahman"> <organization>InterDigital Communications, LLC</organization> </author> <author initials="C." surname="Wang" fullname="Chonggang Wang"> <organization>InterDigital Communications, LLC</organization> </author> <author initials="T." surname="Eckert" fullname="Toerless Eckert"> <organization>Futurewei Technologies Inc.</organization> </author> <date month="July" day="10" year="2021" /> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-bier-multicast-http-response-06" /> </reference> <!-- draft-eckert-bier-te-frr (Expired) (have to dothis.</t> <t>05: Review Jeffrey Zhang.</t> <t> Part 2:</t> <t> 4.3 added note about leaf-BFER being also a propery of routing setup.</t> <t> 4.7 Added missing details from example to avoid confusion with routed adjacencies, also compressed explanatory text and better justification why seed is explicitly configured by controller.</t> <t> 4.9 added section discussing generic reuse of BP methods.</t> <t> 4.10 added section summarizing BP optimizations of section 4.</t> <t> 6. Rewrote/compressed explanation of comparison BIER/BIER-TE forwarding difference. Explained benefit of BIER-TE per-BP forwarding being independent of forwarding for other BPs.</t> <t> Part 1:</t> <t> Explicitly ue forwarded_connected adjcency in ECMP adjcency examples"long way" toavoid confusion.</t> <t> 4.3 Add picture as example for leav vs. non-leaf BFR in topology. Improved description.</t> <t> 4.5 Exampe for traffic that can be broadcast -> for single BP in hub&spoke.</t> <t> 4.8.1 Simplified example picturefix Toerless Eckert's initial) --> <reference anchor="BIER-TE-PROTECTION"> <front> <title>Protection Methods forrouted adjacency, explanatory text.</t> <t> Review from Dirk Trossen:</t> <t> Fixed up explanationBIER-TE</title> <author initials="T." surname="Eckert" fullname="Toerless Eckert"> <organization>Huawei USA - Futurewei Technologies Inc.</organization> </author> <author initials="G." surname="Cauchie" fullname="Gregory Cauchie"> <organization>Bouygues Telecom</organization> </author> <author initials="W." surname="Braun" fullname="Wolfgang Braun"> <organization>University ofICC paper vs. bloom filter.</t> <t>04: spell check run.</t> <t> Addded remaining fixes for Sandys (Zhang Zheng) review:</t> <t> 4.7 Enhance ECMP explanations:</t> <t> example ECMP algorithm, highlight that doc does not standardize ECMP algorithm.</t> <t> Review from Dirk Trossen:</t> <t> 1. Added mentioningTuebingen</organization> </author> <author initials="M." surname="Menth" fullname="Michael Menth"> <organization>University ofprior work for traffic engineered paths with bloom filters.</t> <t> 2. Changed title from layers to components and added "BIER-TE control plane" to "BIER-TE Controller" to make it clearer, what it does.</t> <t> 2.2.3. Added reference to I-D.ietf-bier-multicast-http-response as an example solution.</t> <t> 2.3. clarified sentence about resetting BPs before sending copies (also forgotTuebingen</organization> </author> <date month="March" day="5" year="2018" /> </front> <seriesInfo name="Internet-Draft" value="draft-eckert-bier-te-frr-03" /> </reference> <!-- draft-ietf-roll-ccast (Expired) --> <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-roll-ccast.xml"/> <!-- draft-ietf-bier-te-yang (I-D Exists) (have tomention DNR here).</t> <t> 3.4. Added text saying this section will be removed unless IESG review finds enough redeeming value in this example given how -03 introduced section 1.1 with basic examples.</t> <t> 7.2. Removed explicit numbers 20%/80% for number of topology bits in BIER-TE, replaced with more vague (high/low) description, because wedonot have good reference material Added text saying this section will be removed unless IESG review finds enough redeeming value in this example given how -03 introduced section 1.1 with basic examples.</t> <t> many typos fixed. Thanks a lot.</t> <t>03: Last call textual changes by authors to improve readability:</t> <t> removed Wolfgang Braun as co-authors (as requested).</t> <t> Improved abstract"long way" tobe more explanatory. Removed mentioning of FRR (not concluded on so far).</t> <t> Added new text into Introduction section because the text was too difficult to jump into (too many forward pointers). This primarily consists of examples and the early introductionget correct capping ofthe BIER-TE Topology concept enabled by these examples.</t> <t> Amended comparison to SR.</t> <t> Changed syntax from [VRF] to {VRF} to indicate its optional"Hu" andto make idnits happy.</t> <t> Split references into normative / informative, added references.</t> <t>02: Refresh after IETF104 discussion: changed intended status back to standard. Reasoning:</t> <t> Tighter review of standards document == ensures arch will be better preparedfix erroneous "chenhuanan" forpossible adoption by other WGs (e.g. DetNet) or std. bodies.</t> <t> Requirement against the degree of existing implementations is self defined by the WG. BIER WG seems to think it is not necessary to apply multiple interoperating implementations against an architecture level document at this time to make it qualify to go to standards track. Also, the levels of support introduced in -01 rev. should allow all BIER forwarding engines to also be able to support the base level BIER-TE forwarding.</t> <t>01: Added note comparing BIER and SR to also hopefully clarify BIER-TE vs. BIER comparison re. SR.</t> <t> - added requirements section mandating only most basic BIER-TE forwarding features as MUST.</t> <t> - reworked comparison with BIER forwarding section to only summarize and point to pseudocode section.</t> <t> - reworked pseudocode section to have one pseudocode that mirrors the BIER forwarding pseudocode to make comparison easier and a second pseudocode that shows the complete set of BIER-TE forwarding options and simplification/optimization possible vs. BIER forwarding. Removed MyBitsOfInterest (was pure optimization).</t> <t> - Added captions to pictures.</t> <t> - Part of review feedback from Sandy (Zhang Zheng) integrated.</t> <t>00: Changed target state to experimental (WG conclusion), updated references, mod auth association.</t> <t> - Source now on https://www.github.com/toerless/bier-te-arch</t> <t> - Please open issues on the githubH. Chen --> <reference anchor="BIER-TE-YANG"> <front> <title>A YANG data model forchange/improvement requests to the document - in addition to posting them on the list (bier@ietf.). Thanks!.</t> </list> </t> <t>draft-eckert-bier-te-arch: <list> <t>06: Added overview of forwarding differences between BIER, BIER-TE.</t> <t>05: Author affiliation change only.</t> <t>04: Added comparison to Live-Live and BFIR to FRR section (Eckert).</t> <t>04: Removed FRR content into the new FRR draft [I-D.eckert-bier-te-frr] (Braun).</t> <t> - Linked FRR information to new draft in Overview/Introduction</t> <t> - Removed BTAFT/FRR from "Changes in the network topology"</t> <t> - Linked new draft in "Link/Node Failures and Recovery"</t> <t> - Removed FRR from "The BIER-TE Forwarding Layer"</t> <t> - Moved FRR sectionTree Engineering for Bit Index Explicit Replication (BIER-TE)</title> <author initials="Z." surname="Zhang" fullname="Zheng Zhang"> <organization>ZTE Corporation</organization> </author> <author initials="C." surname="Wang" fullname="Cui(Linda) Wang"> <organization>Individual</organization> </author> <author initials="R." surname="Chen" fullname="Ran Chen"> <organization>ZTE Corporation</organization> </author> <author initials="F." surname="Hu" fullname="fangwei hu"> <organization>Individual</organization> </author> <author initials="M." surname="Sivakumar" fullname="Mahesh Sivakumar"> <organization>Juniper networks</organization> </author> <author initials="H." surname="Chen" fullname="Huanan Chen"> <organization>China Telecom</organization> </author> <date month="May" day="1" year="2022" /> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-bier-te-yang-05" /> </reference> <!-- draft-ietf-bier-non-mpls-bift-encoding (Expired) (have tonew draft</t> <t> - Moved FRR parts of Pseudocode into new draft</t> <t> - Left only non FRR parts</t> <t> - removed FrrUpDown(..) and //FRR operations in ForwardBierTePacket(..)</t> <t> - New draft contains FrrUpDown(..) and ForwardBierTePacket(Packet) from bier-arch-03</t> <t> - Moved "BIER-TE and existing FRRdo "long way" tonew draft</t> <t> - Moved "BIER-TE and Segment Routing" section one level up</t> <t> - Thus, removed "Further considerations" that only contained this section</t> <t> - Added Changes for version 04</t> <t></t> <t>03: Updated the FRR section. Added examples for FRR key concepts. Added BIER-in-BIER tunneling as option for tunnels in backup paths. BIFT structure is expandedget "IJ. Wijnands" andcontains an additional match field to support full node protection with BIER-TE FRR.</t> <t>03: Updated FRR section. Explanation how BIER-in-BIER encapsulation provides P2MP protection for node failures even though the routing underlay does not provide P2MP.</t> <t>02: Changed the definition"M. Mishra") --> <reference anchor="NON-MPLS-BIER-ENCODING"> <front> <title>An Optional Encoding ofBIFT to be more inline with BIER. In revs. up to -01,theidea was that a BIFT has only entries for a single BitString, and every SI and sub-domain would be a separate BIFT. In BIER, each BIFT covers all SI. This is now also how we define itBIFT-id Field inBIER-TE.</t> <t>02: Added <xref target="mgmt-stuff"/> to explaintheuse of SI, sub-domains and BFR-id in BIER-TE and to give an example how to efficiently assign bits for a large topology requiring multiple SI.</t> <t>02: Added further detailed for rings - how to support input from all ring nodes.</t> <t>01: Fixed BFIR -> BFER for section 4.3.</t> <t>01: Added explanation of SI, difference tonon-MPLS BIERECMP, consideration for Segment Routing, unicast FRR, considerations for encapsulation, explanations of BIER-TE Controller and CLI.</t> <t>00: Initial version.</t> </list> </t> </section> <!-- changes --> </middle> <back> <references title="Normative References"> &RFC2119; &RFC8279; &RFC8174; &RFC8296; </references> <references title="Informative References"> &RFC4253; &RFC4456; &RFC4655; &RFC5440; &RFC6241; &RFC6242; &RFC7589; &RFC7752; &RFC7950; &RFC7988; &RFC8040; &RFC8253; &RFC8345; &RFC8401; &RFC8402; &RFC8444; &RFC8556; <!-- &RFC2205; &RFC2212; &RFC3209; <?rfc include="reference.I-D.eckert-teas-bier-te-framework"?> <?rfc include="reference.I-D.qiang-detnet-large-scale-detnet"?> --> <?rfc include="reference.I-D.ietf-teas-rfc3272bis"?> <?rfc include="reference.I-D.ietf-bier-multicast-http-response"?> <?rfc include="reference.I-D.eckert-bier-te-frr"?> <?rfc include="reference.I-D.ietf-roll-ccast"?> <?rfc include="reference.I-D.ietf-bier-te-yang"?> <?rfc include="reference.I-D.ietf-bier-non-mpls-bift-encoding"?>Encapsulation</title> <author fullname="IJsbrand Wijnands" surname="Wijnands" initials="IJ"></author> <author fullname="Mankamana Mishra" surname="Mishra" initials="M"></author> <author fullname="Xiaohu Xu" surname="Xu" initials="X"></author> <author fullname="Hooman Bidgoli" surname="Bidgoli" initials="H"></author> <date month="May" day="30" year="2021" /> </front> <seriesInfo name="Internet-Draft" value="draft-ietf-bier-non-mpls-bift-encoding-04" /> </reference> <reference anchor="ICC" target="https://ieeexplore.ieee.org/document/7511036"> <front> <title> Stateless multicast switching in software defined networks </title> <author initials="M. J." surname="Reed"/> <author initials="M." surname="Al-Naday"/> <author initials="N." surname="Thomos"/> <author initials="D." surname="Trossen"/> <author initials="G." surname="Petropoulos"/> <author initials="S." surname="Spirou"/> <date month="May" year="2016"/> </front><seriesInfo name="" value="IEEE<refcontent>IEEE International Conference on Communications (ICC), Kuala Lumpur,Malaysia, 2016"/>Malaysia</refcontent> <seriesInfo name="DOI" value="10.1109/ICC.2016.7511036"/> </reference> <reference anchor="RCSD94"target="https://dl.acm.org/doi/10.5555/2692227.2692232">target="https://content.iospress.com/articles/journal-of-high-speed-networks/jhs3-4-05"> <front> <title> Rate-Controlled Service Disciplines </title> <author initials="H." surname="Zhang"/> <author initials="D."surname="Domenico"/>surname="Ferrari"/> <datemonth="May"month="October" year="1994"/> </front><seriesInfo name="" value="Journal<refcontent>Journal ofHigh-SpeedHigh Speed Networks,1994"/>Volume 3, Issue 4, pp. 389-412</refcontent> <seriesInfo name="DOI" value="10.3233/JHS-1994-3405"/> </reference> <referenceanchor="Bloom70">anchor="Bloom70" target="https://dl.acm.org/doi/10.1145/362686.362692"> <front> <title>Space/time trade-offs in hash coding with allowable errors</title> <author initials="B. H." surname="Bloom" fullname="Burton H. Bloom"> <organization/> </author> <date month="July" year="1970"/> </front><seriesInfo name="Comm.<refcontent>Comm. ACM" value="13(7):422-6"/> <format type="PDF" target="https://dl.acm.org/doi/10.1145/362686.362692"/>13(7):422-6</refcontent> <seriesInfo name="DOI" value="10.1145/362686.362692"/> </reference><!-- TODO change reference below as soon as its available from tool chain--> <!-- <?rfc include="reference.I-D.eckert-bier-te-frr"?> --> <!----></references> </references> <section anchor="SR"title="BIER-TEnumbered="true" toc="default"> <name>BIER-TE and Segment Routing(SR)">(SR)</name> <t>SR(<xref target="RFC8402"/>)<xref target="RFC8402" format="default"/> aims to enable lightweight path steering via loose source routing.ComparedFor example, compared to its moreheavy-weight predecessorheavyweight predecessor, RSVP-TE, SR doesfor examplenot require per-path signaling to each of these hops.</t> <t>BIER-TE supports the same design philosophy for multicast. LikeinSR,it reliesBIER-TE</t> <ul spacing="normal"> <li>relies onsource-routing - via the definition ofsource routing (via aBitString. Like SR, it onlyBitString), and</li> <li>only requiresto considerconsideration of the "hops" either (1) on whicheitherreplication has tohappen,happen or (2) across which the traffic should be steered (even withoutreplication). Anyreplication).</li> </ul> <t>Any other hops can be skipped via the use of routed adjacencies.</t> <t>BIER-TEbit position (BP)"bit positions" (BPs) can be understood as the BIER-TE equivalent of "forwarding segments" in SR, but they have a different scope thanSRdo forwardingsegments.segments in SR. Whereas forwarding segments in SR are global or local, BPs in BIER-TE have a scope that isthe groupcomprised ofBFR(s)one or more BFRs that have adjacencies forthis BPthe BPs in theirBIFT. ThisBIFTs. These segments can be called"adjacency" scoped"adjacency-scoped" forwarding segments.</t> <t>Adjacency scope could be global, but then every BFR would need an adjacency forthis BP,a given BP -- forexampleexample, a forward_routed() adjacency with encapsulation to the global SRSID"Segment Identifier" (SID) of the destination. Such a BP would always result in ingressreplicationreplication, though (as in <xreftarget="RFC7988"/>).target="RFC7988" format="default"/>). The first BFR encountering this BP would directly replicatetotraffic on it. Only by using non-global adjacency scope for BPs can traffic be steered and replicated onnon-ingress BFR.</t>a non-BFIR.</t> <t>SR can naturally be combined with BIER-TE and can helptooptimize it. For example, instead of defining bit positions for non-replicating hops, it is equally possible to usesegment routingSR encapsulations(e.g.(e.g., SR-MPLS label stacks) for the encapsulation of"forward_routed""forward_routed()" adjacencies.</t> <t>Note that (non-TE) BIER itself can also be seento beas being similar to SR. BIER BPs act as global destinationNode-SIDsNode-SIDs, and the BIER BitString is simply a highly optimized mechanism to indicate multiple such SIDs and let the network take care of effectively replicating the packethop-by-hophop by hop to each destination Node-SID.WhatBIER does not allowis to indicatethe indication of intermediatehops, orhops or, in terms ofSRSR, the ability to indicate a sequence ofSIDSIDs to reach the destination.This is whatOn the other hand, BIER-TE and itsadjacency scoped BP enables.</t>adjacency-scoped BPs provide these capabilities.</t> </section> <section anchor="ack" numbered="false" toc="default"> <name>Acknowledgements</name> <t>The authors would like to thank <contact fullname="Greg Shepherd"/>, <contact fullname="IJsbrand Wijnands"/>, <contact fullname="Neale Ranns"/>, <contact fullname="Dirk Trossen"/>, <contact fullname="Sandy Zheng"/>, <contact fullname="Lou Berger"/>, <contact fullname="Jeffrey Zhang"/>, <contact fullname="Carsten Bormann"/>, and <contact fullname="Wolfgang Braun"/> for their reviews and suggestions.</t> <t> Special thanks to <contact fullname="Xuesong Geng"/> for shepherding this document. Special thanks also for IESG review/suggestions by <contact fullname="Alvaro Retana"/> (responsible AD/RTG), <contact fullname="Benjamin Kaduk"/> (SEC), <contact fullname="Tommy Pauly"/> (TSV), <contact fullname="Zaheduzzaman Sarker"/> (TSV), <contact fullname="Éric Vyncke"/> (INT), <contact fullname="Martin Vigoureux"/> (RTG), <contact fullname="Robert Wilton"/> (OPS), <contact fullname="Erik Kline"/> (INT), <contact fullname="Lars Eggert"/> (GEN), <contact fullname="Roman Danyliw"/> (SEC), <contact fullname="Ines Robles"/> (RTGDIR), <contact fullname="Robert Sparks"/> (Gen-ART), <contact fullname="Yingzhen Qu"/> (RTGDIR), and <contact fullname="Martin Duke"/> (TSV).</t> </section><!-- SR --></back> </rfc>