| rfc9262xml2.original.xml | rfc9262.xml | |||
|---|---|---|---|---|
| <?xml version="1.0" encoding="US-ASCII"?> | <?xml version="1.0" encoding="UTF-8"?> | |||
| <!-- This template is for creating an Internet Draft using xml2rfc, | ||||
| which is available here: http://xml.resource.org. --> | ||||
| <!DOCTYPE rfc SYSTEM "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"> | ||||
| <!ENTITY RFC4456 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4456.xml"> | ||||
| <!ENTITY RFC4655 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .4655.xml"> | ||||
| <!ENTITY RFC5440 SYSTEM "http://xml.resource.org/public/rfc/bibxml/reference.RFC | ||||
| .5440.xml"> | ||||
| <!ENTITY RFC7752 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"> | ||||
| <!DOCTYPE rfc [ | ||||
| <!ENTITY nbsp " "> | ||||
| <!ENTITY zwsp "​"> | ||||
| <!ENTITY nbhy "‑"> | ||||
| <!ENTITY 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 ipr="trust200902" docName="draft-ietf-bier-te-arch-13" category="std"> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft | |||
| <front> | -ietf-bier-te-arch-13" number="9262" submissionType="IETF" category="std" consen | |||
| <title abbrev="BIER-TE ARCH">Tree Engineering for Bit Index Expl | sus="true" obsoletes="" updates="" xml:lang="en" tocInclude="true" tocDepth="4" | |||
| icit Replication (BIER-TE)</title> | symRefs="true" sortRefs="true" version="3"> | |||
| <author role="editor" fullname="Toerless Eckert" initials="T.T.E | ||||
| ." 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> | ||||
| </postal> | ||||
| <email>tte+ietf@cs.fau.de</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Michael Menth" initials="M.M." surname="Menth" | ||||
| > | ||||
| <organization>University of Tuebingen</organization> | ||||
| <address> | ||||
| <email>menth@uni-tuebingen.de</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Gregory Cauchie" initials="G.C." surname="Cauc | ||||
| hie"> | ||||
| <organization>KOEVOO</organization> | ||||
| <address> | ||||
| <email>gregory@koevoo.tech</email> | ||||
| </address> | ||||
| </author> | ||||
| <date month="April" year="2022"/> | ||||
| <abstract> | ||||
| <t> This memo describes per-packet stateless strict and loose path | ||||
| steered replication and forwarding for "Bit Index Explicit Replication" (BIER, R | ||||
| FC8279) packets. It is called BIER Tree Engineering (BIER-TE) and is intended t | ||||
| o 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 indicate adj | <!-- xml2rfc v2v3 conversion 3.12.2 --> | |||
| acencies | <front> | |||
| of the network topology, as opposed to (non-TE) BIER in which BPs indicate | <title abbrev="BIER-TE ARCH">Tree Engineering for Bit Index Explicit Replica | |||
| "Bit-Forwarding Egress Routers" (BFER). A BIER-TE packets BitString therefore | tion (BIER-TE)</title> | |||
| indicates the | <seriesInfo name="RFC" value="9262"/> | |||
| edges of the (loop-free) tree that the packet is forwarded across by BIER-TE. | <author role="editor" fullname="Toerless Eckert" initials="T." surname="Ecke | |||
| BIER-TE can leverage BIER forwarding engines with little changes. | rt"> | |||
| Co-existence of BIER and BIER-TE forwarding in the same domain is possible, for | <organization abbrev="Futurewei">Futurewei Technologies Inc.</organization | |||
| example by using | > | |||
| separate BIER "sub-domains" (SDs). Except for the optional routed adjacencies, B | <address> | |||
| IER-TE does not | <postal> | |||
| require a BIER routing underlay, and can therefore operate without depending | <street>2330 Central Expy</street> | |||
| on an "Interior Gateway Routing protocol" (IGP).</t> | <city>Santa Clara</city> | |||
| </abstract> | <code>95050</code> | |||
| </front> | <region>CA</region> | |||
| <middle> | <country>United States of America</country> | |||
| </postal> | ||||
| <email>tte@cs.fau.de</email> | ||||
| </address> | ||||
| </author> | ||||
| <author fullname="Michael Menth" 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." surname="Cauchie"> | ||||
| <organization>KOEVOO</organization> | ||||
| <address> | ||||
| <postal> | ||||
| <country>France</country> | ||||
| </postal> | ||||
| <email>gregory@koevoo.tech</email> | ||||
| </address> | ||||
| </author> | ||||
| <section anchor="overview" title="Overview"> | <date month="October" year="2022"/> | |||
| <area>rtg</area> | ||||
| <workgroup>bier</workgroup> | ||||
| <t> BIER-TE is based on the (non-TE) BIER architecture, terminology and packet f | <keyword>BIER</keyword> | |||
| ormats as described | <keyword>BIER-TE</keyword> | |||
| in <xref target="RFC8279"/> and <xref target="RFC8296"/>. | <keyword>controller</keyword> | |||
| This document describes BIER-TE in the expectation that the reader is familiar | <keyword>ECMP</keyword> | |||
| with these two documents.</t> | <keyword>forwarding</keyword> | |||
| <keyword>traffic-engineering</keyword> | ||||
| <keyword>multicast</keyword> | ||||
| <keyword>pseudocode</keyword> | ||||
| <keyword>routing</keyword> | ||||
| <keyword>traffic-steering</keyword> | ||||
| <keyword>tree-steering</keyword> | ||||
| <t>BIER-TE introduces a new semantic for "bit positions" (BP). They indicate adj | <abstract> | |||
| acencies | <t> This memo describes per-packet stateless strict and loose path | |||
| steered replication and forwarding for "Bit Index Explicit Replication" (BIER) | ||||
| packets (RFC 8279); it is called "Tree Engineering for Bit Index Explicit Replic | ||||
| ation" (BIER-TE) and is intended to be used as the path steering mechanism for T | ||||
| raffic Engineering | ||||
| with BIER.</t> | ||||
| <t>BIER-TE introduces a new semantic for "bit positions" (BPs). These BPs | ||||
| indicate adjacencies | ||||
| of the network topology, as opposed to (non-TE) BIER in which BPs indicate | of the network topology, as opposed to (non-TE) BIER in which BPs indicate | |||
| "Bit-Forwarding Egress Routers" (BFER). A BIER-TE packets BitString therefore | "Bit-Forwarding Egress Routers" (BFERs). A BIER-TE "packets BitString" therefo | |||
| indicates the | re indicates the | |||
| edges of the (loop-free) tree that the packet is forwarded across by BIER-TE. | edges of the (loop-free) tree across which the packets are forwarded by BIER-TE. | |||
| With BIER-TE, the "Bit Index Forwarding Table" (BIFT) of each "Bit Forwarding Ro | BIER-TE can leverage BIER forwarding engines with little changes. | |||
| uter" (BFR) | Co-existence of BIER and BIER-TE forwarding in the same domain is possible -- fo | |||
| is only populated with BP that are adjacent to the BFR | r example, by using | |||
| in the BIER-TE Topology. Other BPs are empty in the BIFT. The BFR replicate | separate BIER "subdomains" (SDs). Except for the optional routed adjacencies, BI | |||
| and forwards BIER packets to adjacent BPs that are set in the packet. | ER-TE does not | |||
| require a BIER routing underlay and can therefore operate without depending | ||||
| on a routing protocol such as the "Interior Gateway Protocol" (IGP).</t> | ||||
| </abstract> | ||||
| </front> | ||||
| <middle> | ||||
| <section anchor="overview" numbered="true" toc="default"> | ||||
| <name>Overview</name> | ||||
| <t>"Tree Engineering for Bit Index Explicit Replication" (BIER-TE) is base | ||||
| d on the (non-TE) BIER architecture, terminology, and packet formats as describe | ||||
| d | ||||
| in <xref target="RFC8279" format="default"/> and <xref target="RFC8296" format=" | ||||
| default"/>. | ||||
| This document describes BIER-TE, with the expectation that the reader is familia | ||||
| r | ||||
| with these two documents.</t> | ||||
| <t>BIER-TE introduces a new semantic for "bit positions" (BPs). These BPs | ||||
| indicate adjacencies | ||||
| of the network topology, as opposed to (non-TE) BIER in which BPs indicate | ||||
| "Bit-Forwarding Egress Routers" (BFERs). A BIER-TE "packets BitString" therefo | ||||
| re indicates the | ||||
| edges of the (loop-free) tree across which the packets are forwarded by BIER-TE. | ||||
| With BIER-TE, the "Bit Index Forwarding Table" (BIFT) of each "Bit-Forwarding Ro | ||||
| uter" (BFR) | ||||
| is only populated with BPs that are adjacent to the BFR | ||||
| in the BIER-TE topology. Other BPs are empty in the BIFT. The BFR replicates | ||||
| and forwards BIER packets to adjacent BPs that are set in the packets. | ||||
| BPs are normally also cleared upon forwarding to avoid duplicates and loops. | BPs are normally also cleared upon forwarding to avoid duplicates and loops. | |||
| </t> | </t> | |||
| <t>BIER-TE can leverage BIER forwarding engines with little or no changes. | ||||
| <t>BIER-TE can leverage BIER forwarding engines with little or no changes. | It can also co-exist with BIER forwarding in the same domain -- for example, by | |||
| It can also co-exist with BIER forwarding in the same domain, for example by usi | using | |||
| ng | separate BIER subdomains. Except for the optional routed adjacencies, BIER-TE do | |||
| separate BIER sub-domains. Except for the optional routed adjacencies, BIER-TE d | es not | |||
| oes not | require a BIER routing underlay and can therefore operate without depending | |||
| require a BIER routing underlay, and can therefore operate without depending | on a routing protocol such as the "Interior Gateway Protocol" (IGP).</t> | |||
| on an "Interior Gateway Routing protocol" (IGP).</t> | <t>This document is structured as follows: | |||
| </t> | ||||
| <t>This document is structured as follows: | <ul spacing="normal"> | |||
| <list style="symbols"> | <li> | |||
| <t><xref target="introduction"/> introduces BIER-TE with two | <xref target="introduction" format="default"/> introduces BIER-TE with | |||
| forwarding examples, followed by an introduction of the new concepts of the | two | |||
| BIER-TE | forwarding examples, followed by an introduction to the new concepts of the | |||
| (overlay) topology and finally a summary of the relationship between BIER an | BIER-TE | |||
| d BIER-TE and a discussion of accelerated hardware forwarding.</t> | (overlay) topology, and finally a summary of the relationship between BIER a | |||
| <t><xref target="components"/> describes the components of the BIER-TE archi | nd BIER-TE and a discussion of accelerated hardware forwarding.</li> | |||
| tecture, | <li> | |||
| Flow overlay, BIER-TE layer with the BIER-TE control plane (including the B | <xref target="components" format="default"/> describes the components | |||
| IER-TE controller) and BIER-TE forwarding plane, and the routing underlay.</t> | of the BIER-TE architecture: the multicast | |||
| <t><xref target="forwarding"/> specifies the behavior of the BIER-TE forward | flow overlay, the BIER-TE layer with the BIER-TE control plane (including t | |||
| ing plane with the different type of adjacencies and possible variations of BIER | he BIER-TE controller), the BIER-TE forwarding plane, and the routing underlay.< | |||
| -TE forwarding pseudocode, and finally the mandatory and optional requirements.< | /li> | |||
| /t> | <li> | |||
| <t><xref target="controller-ops"/> describes operational considerations for | <xref target="forwarding" format="default"/> specifies the behavior of | |||
| the BIER-TE controller, foremost how the BIER-TE controller can optimize the use | the BIER-TE forwarding plane with the different types of adjacencies and possib | |||
| of BP by using specific type of BIER-TE adjacencies for different type of topol | le variations of BIER-TE forwarding pseudocode, and finally the mandatory and op | |||
| ogical situations, but also how to assign bits to avoid loops and duplicates (wh | tional requirements.</li> | |||
| ich in BIER-TE does not come for free), and finally how "Set Identifier" (SI), " | <li> | |||
| sub-domain" (SD) and BFR-ids can be managed by a BIER-TE controller, examples an | <xref target="controller-ops" format="default"/> describes operational | |||
| d summary.</t> | considerations for the BIER-TE controller, primarily how the BIER-TE controller | |||
| <t><xref target="SR"/> concludes the technology specific sections of the doc | can optimize the use of BPs by using specific types of BIER-TE adjacencies for | |||
| ument by further relating BIER-TE to Segment Routing (SR).</t> | different types of topological situations. It also describes how to assign bits | |||
| </list></t> | to avoid loops and duplicates (which, in BIER-TE, does not come "for free"). F | |||
| inally, it discusses how "Set Identifiers" (SIs), "subdomains" (SDs), and BFR-id | ||||
| <t>Note that related work, <xref target="I-D.ietf-roll-ccast"/> | s can be managed by a BIER-TE controller; examples and a summary are provided.</ | |||
| uses Bloom filters <xref target="Bloom70"/> to represent leaves or edges of the | li> | |||
| intended delivery tree. Bloom filters | <li> | |||
| <xref target="SR" format="default"/> concludes this document; details | ||||
| regarding the relationship between BIER-TE and "Segment Routing" (SR) are discus | ||||
| sed.</li> | ||||
| </ul> | ||||
| <t>Note that related work <xref target="I-D.ietf-roll-ccast" format="defau | ||||
| lt"/> | ||||
| uses Bloom filters <xref 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 e xplicit BitStrings, | in general can support larger trees/topologies with fewer addressing bits than e xplicit BitStrings, | |||
| but they introduce the heuristic risk of false positives and cannot clear bits i n | but they introduce the heuristic risk of false positives and cannot clear bits i n | |||
| the BitString during forwarding to avoid loops. For these reasons, BIER-TE | the BitStrings during forwarding to avoid loops. For these reasons, BIER-TE, lik | |||
| uses explicit BitStrings like BIER. The explicit BitStrings of BIER-TE can also | e BIER, | |||
| be seen as a special type of Bloom filter, and this is how related work <xref ta | uses explicit BitStrings. Explicit BitStrings as used by BIER-TE can also | |||
| rget="ICC"/> | be seen as a special type of Bloom filter, and this is how other related work <x | |||
| ref target="ICC" format="default"/> | ||||
| describes it.</t> | 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 introd | ||||
| uces 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 sta | ||||
| teless 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 reso | ||||
| urce 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 st | ||||
| ate on intermedia nodes.</t> | ||||
| <t>BIER-TE can also be combined with bandwidth and buffer management functions t | ||||
| o 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-fl | ||||
| ow resource | ||||
| guarantees are called BIER-TE. The following paragraphs summarize options and c | ||||
| onsiderations.</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 o | ||||
| verlay 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 Co | ||||
| ntroller. | ||||
| If the PCE can also perform resource management such as per-flow bandwidth reser | ||||
| vations and | ||||
| optional latency guarantees, then it becomes a PCE for BIER-TE with traffic eng | ||||
| ineering.</t> | ||||
| <t>To support bandwidth guarantees in the forwarding plane, the ingres BIER-TE n | ||||
| ode | ||||
| (BFIR) may need to have a per-flow policer if ingressed traffic is not trusted t | ||||
| o stay within | ||||
| its admitted traffic envelope. This is a well understood policy function that ca | ||||
| n be deployed | ||||
| without changes to BIER-TE.</t> | ||||
| <t>If latency guarantees as required as for example by Guaranteed Services (<xre | ||||
| f 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 so | ||||
| lutions for this | ||||
| such as in <xref target="I-D.qiang-detnet-large-scale-detnet"/> would allow to m | ||||
| aintain | ||||
| 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 th | ||||
| e 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="boilerplate" title="Requirements Language"> | ||||
| <t> | ||||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | ||||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL | ||||
| " | ||||
| in this document are to be interpreted as described in BCP 14 <xref target="RFC | ||||
| 2119"/> | ||||
| <xref target="RFC8174"/> when, and only when, they appear in all capitals, as s | ||||
| hown here. | ||||
| </t> | ||||
| </section> | </section> | |||
| </section> | <section anchor="introduction" numbered="true" toc="default"> | |||
| <name>Introduction</name> | ||||
| <section anchor="introduction" title="Introduction"> | <section anchor="boilerplate" numbered="true" toc="default"> | |||
| <name>Requirements Language</name> | ||||
| <section anchor="examples" title="Basic Examples"> | <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", | |||
| "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", | ||||
| <t>BIER-TE forwarding is best introduced with simple examples. These examples | "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", | |||
| use formal terms defined later in the document (<xref target="adjacencies"/>), | "<bcp14>SHOULD NOT</bcp14>", | |||
| including forward_connected(), forward_routed() and local_decap(). | "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
| "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document | ||||
| are to be interpreted as described in BCP 14 | ||||
| <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only | ||||
| when, they appear in all capitals, as shown here.</t> | ||||
| </section> | ||||
| <section anchor="examples" numbered="true" toc="default"> | ||||
| <name>Basic Examples</name> | ||||
| <t>BIER-TE forwarding is best introduced with simple examples. These exa | ||||
| mples | ||||
| use formal terms defined later in this document (<xref target="adjacencies" form | ||||
| at="default"/> in <xref target="btft"/>), | ||||
| including forward_connected(), forward_routed(), and local_decap(). | ||||
| </t> | </t> | |||
| <t>Consider the simple network in the BIER-TE overview example shown in | ||||
| <figure anchor="basic-example" title="BIER-TE basic example"> | <xref target="basic-example"/>, with six BFRs. p1...p15 are the bit positi | |||
| <artwork align="left"><![CDATA[ | ons 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 pac | ||||
| kets and | ||||
| passes their payload to higher-layer processing. | ||||
| </t> | ||||
| <figure anchor="basic-example"> | ||||
| <name>BIER-TE Basic Example</name> | ||||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| BIER-TE Topology: | BIER-TE Topology: | |||
| Diagram: | Diagram: | |||
| p5 p6 | p5 p6 | |||
| --- BFR3 --- | --- BFR3 --- | |||
| p3/ p13 \p7 p15 | p3/ p13 \p7 p15 | |||
| BFR1 ---- BFR2 BFR5 ----- BFR6 | BFR1 ---- BFR2 BFR5 ----- BFR6 | |||
| p1 p2 p4\ p14 /p10 p11 p12 | p1 p2 p4\ p14 /p10 p11 p12 | |||
| --- BFR4 --- | --- BFR4 --- | |||
| p8 p9 | p8 p9 | |||
| (simplified) BIER-TE Bit Index Forwarding Tables (BIFT): | (simplified) BIER-TE Bit Index Forwarding Tables (BIFTs): | |||
| BFR1: p1 -> local_decap() | BFR1: p1 -> local_decap() | |||
| p2 -> forward_connected() to BFR2 | p2 -> forward_connected() to BFR2 | |||
| BFR2: p1 -> forward_connected() to BFR1 | BFR2: p1 -> forward_connected() to BFR1 | |||
| p5 -> forward_connected() to BFR3 | p5 -> forward_connected() to BFR3 | |||
| p8 -> forward_connected() to BFR4 | p8 -> forward_connected() to BFR4 | |||
| BFR3: p3 -> forward_connected() to BFR2 | BFR3: p3 -> forward_connected() to BFR2 | |||
| p7 -> forward_connected() to BFR5 | p7 -> forward_connected() to BFR5 | |||
| skipping to change at line 264 ¶ | skipping to change at line 193 ¶ | |||
| BFR4: p4 -> forward_connected() to BFR2 | BFR4: p4 -> forward_connected() to BFR2 | |||
| p10 -> forward_connected() to BFR5 | p10 -> forward_connected() to BFR5 | |||
| p14 -> local_decap() | p14 -> local_decap() | |||
| BFR5: p6 -> forward_connected() to BFR3 | BFR5: p6 -> forward_connected() to BFR3 | |||
| p9 -> forward_connected() to BFR4 | p9 -> forward_connected() to BFR4 | |||
| p12 -> forward_connected() to BFR6 | p12 -> forward_connected() to BFR6 | |||
| BFR6: p11 -> forward_connected() to BFR5 | BFR6: p11 -> forward_connected() to BFR5 | |||
| p15 -> local_decap() | p15 -> local_decap() | |||
| ]]></artwork> | ||||
| ]]></artwork></figure> | </figure> | |||
| <t> | ||||
| <t> | Assume that a packet from BFR1 should be sent via BFR4 to BFR6. This requires | |||
| 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> | ||||
| <t> | ||||
| Assume 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 | 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 | 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 | 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 | to BFR2. Similarly, BFR2 will forward to BFR4 because of p8, BFR4 to BFR5 | |||
| because of p10 and BFR5 to BFR6 because of p12. p15 finally makes BFR6 receive | because of p10, and BFR5 to BFR6 because of p12. p15 finally makes BFR6 re ceive | |||
| and decapsulate the packet. | and decapsulate the packet. | |||
| </t> | </t> | |||
| <t>To send a copy to BFR6 via BFR4 and also a copy to BFR3, the BitStrin | ||||
| <t>To send a copy to BFR6 via BFR4 and also a copy to BFR3, the BitString needs | g needs | |||
| to be (p2,p5,p8,p10,p12,p13,p15). When this packet is examined by | 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. | 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 | When BFR3 receives the packet, p13 will cause it to receive and decapsulate | |||
| the packet. | the packet. | |||
| </t> | </t> | |||
| <t>If instead the BitString was (p2,p6,p8,p10,p12,p13,p15), the packet | ||||
| <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 | 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. This is showing the ability of the | BFR2 to BFR3 because of p5 in the prior case. This demonstrates the ability of t | |||
| shown | he | |||
| BIER-TE Topology to make the traffic pass across any possible path and be | BIER-TE topology, as shown in <xref target="basic-example"/>, to make the traffi | |||
| c pass across any possible path and be | ||||
| replicated where desired. | replicated where desired. | |||
| </t> | </t> | |||
| <t>BIER-TE has various options for minimizing BP assignments, | ||||
| <t>BIER-TE has various options to minimize BP assignments, | ||||
| many of which are based on out-of-band knowledge about the required multicast tr affic | many of which are based on out-of-band knowledge about the required multicast tr affic | |||
| paths and bandwidth consumption in the network, such as from pre-deployment plan | paths and bandwidth consumption in the network, e.g., from predeployment plannin | |||
| ning.</t> | g.</t> | |||
| <t><xref target="basic-overlay" format="default"/> shows a modified exam | ||||
| <t><xref target="basic-overlay"/> shows a modified example, in which Rtr2 and Rt | ple, in which Rtr2 and Rtr5 are | |||
| r5 are | ||||
| assumed not to support BIER-TE, so traffic has to be unicast encapsulated across | assumed not to support BIER-TE, so traffic has to be unicast encapsulated across | |||
| them. To emphasize non-L2, but routed/tunneled forwarding of BIER-TE packets, | them. To explicitly distinguish routed/tunneled forwarding of BIER-TE packets | |||
| these adjacencies are called "forward_routed". Otherwise, there is no difference | from Layer 2 forwarding (forward_connected()), these adjacencies are called "for | |||
| ward_routed()" adjacencies. Otherwise, there is no difference | ||||
| in their processing over the aforementioned forward_connected() adjacencies.</t> | in their processing over the aforementioned forward_connected() adjacencies.</t> | |||
| <t>In addition, bits are saved in the following example by assuming that | ||||
| <t>In addition, bits are saved in the following example by assuming that BFR1 on | BFR1 only | |||
| ly | needs to be a BFIR -- not a BFER or a transit BFR.</t> | |||
| needs to be BFIR but not BFER or transit BFR.</t> | <figure anchor="basic-overlay"> | |||
| <name>BIER-TE Basic Overlay Example</name> | ||||
| <figure anchor="basic-overlay" title="BIER-TE basic overlay example"> | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| <artwork align="left"><![CDATA[ | ||||
| BIER-TE Topology: | BIER-TE Topology: | |||
| Diagram: | Diagram: | |||
| p1 p3 p7 | p1 p3 p7 | |||
| ....> BFR3 <.... p5 | ....> BFR3 <.... p5 | |||
| ........ ........> | ........ ........> | |||
| BFR1 (Rtr2) (Rtr5) BFR6 | BFR1 (Rtr2) (Rtr5) BFR6 | |||
| ........ ........> p9 | ........ ........> p9 | |||
| ....> BFR4 <.... p6 | ....> BFR4 <.... p6 | |||
| p2 p4 p8 | p2 p4 p8 | |||
| (simplified) BIER-TE Bit Index Forwarding Tables (BIFT): | (simplified) BIER-TE Bit Index Forwarding Tables (BIFTs): | |||
| BFR1: p1 -> forward_routed() to BFR3 | BFR1: p1 -> forward_routed() to BFR3 | |||
| p2 -> forward_routed() to BFR4 | p2 -> forward_routed() to BFR4 | |||
| BFR3: p3 -> local_decap() | BFR3: p3 -> local_decap() | |||
| p5 -> forward_routed() to BFR6 | p5 -> forward_routed() to BFR6 | |||
| BFR4: p4 -> local_decap() | BFR4: p4 -> local_decap() | |||
| p6 -> forward_routed() to BFR6 | p6 -> forward_routed() to BFR6 | |||
| BFR6: p7 -> forward_routed() to BFR3 | BFR6: p7 -> forward_routed() to BFR3 | |||
| p8 -> forward_routed() to BFR4 | p8 -> forward_routed() to BFR4 | |||
| p9 -> local_decap() | p9 -> local_decap() | |||
| ]]></artwork> | ||||
| ]]></artwork></figure> | </figure> | |||
| <t>To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, | ||||
| <t>To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, | the BitString is (p1,p5,p9). A packet from BFR1 via BFR4 to be received by BFR6 | |||
| the BitString is (p1,p5,p9). From BFR1 via BFR4 to be received by BFR6, | uses the BitString (p2,p6,p9). A packet from BFR1 to be received by BFR3,BFR4 | |||
| the BitString is (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 | 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 | 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, | uses (p1,p2,p3,p4,p6,p9). A | |||
| and from BFR4 to be received by BFR6 and from there to be received by BFR3 uses | packet from BFR1 to be received by BFR4, then from BFR4 to be | |||
| (p2,p3,p4,p6,p7,p9). | received by BFR6, and finally from BFR6 to be received by BFR3, uses | |||
| A packet from BFR1 to be received by BFR3, and from BFR3 to be received by BFR6 | (p2,p3,p4,p6,p7,p9). A packet from BFR1 to be received by BFR3, | |||
| there to be received by BFR4 uses (p1,p3,p4,p5,p8,p9).</t> | then from BFR3 to be received by BFR6, and finally from BFR6 to be | |||
| received by BFR4, uses (p1,p3,p4,p5,p8,p9). | ||||
| </section> | ||||
| <section anchor="topology" title="BIER-TE Topology and adjacencies"> | ||||
| <t>The key new component in BIER-TE compared to (non-TE) BIER is the BIER-TE top | ||||
| ology | ||||
| as introduced through the two examples in <xref target="examples"/>. | ||||
| It is used to control where replication can or should happen and how to | ||||
| minimize the required number of BP for adjacencies. | ||||
| </t> | </t> | |||
| </section> | ||||
| <t> | <section anchor="topology" numbered="true" toc="default"> | |||
| The BIER-TE Topology consists of the BIFTs of all the BFR and | <name>BIER-TE Topology and Adjacencies</name> | |||
| <t>The key new component in BIER-TE compared to (non-TE) BIER is the BIE | ||||
| R-TE topology | ||||
| as introduced through the two examples in <xref target="examples" format="defaul | ||||
| t"/>. | ||||
| It is used to control where replication can or should happen and how to | ||||
| minimize the required number of BPs for adjacencies. | ||||
| </t> | ||||
| <t> | ||||
| The BIER-TE topology consists of the BIFTs of all the BFRs and | ||||
| can also be expressed as a directed graph where the edges are the adjacencies | can also be expressed as a directed graph where the edges are the adjacencies | |||
| between the BFRs labelled with the BP used for the adjacency. Adjacencies are | between the BFRs labeled with the BP used for the adjacency. Adjacencies are | |||
| naturally unidirectional. BP can be reused across multiple adjacencies as long | naturally unidirectional. A BP can be reused across multiple adjacencies as lon | |||
| as this does not | g as this does not | |||
| lead to undesired duplicates or loops as explained in <xref target="avoiding"/>. | lead to undesired duplicates or loops, as explained in <xref target="avoiding" f | |||
| ormat="default"/>. | ||||
| </t> | </t> | |||
| <t>If the BIER-TE topology represents (a subset of) the underlying (Laye | ||||
| <t>If the BIER-TE topology represents (a subset of) the underlying (layer 2) | r 2) | |||
| topology of the network as shown in the first example, this may be called a "nat | topology of the network as shown in the first example, this may be called an "un | |||
| ive" | derlay" | |||
| BIER-TE topology. A topology consisting only of "forward_routed" adjacencies as | BIER-TE topology. A topology consisting only of "forward_routed()" adjacencies a | |||
| s | ||||
| shown in the second example may be called an "overlay" BIER-TE topology. | shown in the second example may be called an "overlay" BIER-TE topology. | |||
| A BIER-TE topology with both forward_connected() and forward_routed() adjacencie s | A BIER-TE topology with both forward_connected() and forward_routed() adjacencie s | |||
| may be called a "hybrid" BIER-TE topology.</t> | may be called a "hybrid" BIER-TE topology.</t> | |||
| </section> | ||||
| </section> | <section anchor="comparison" numbered="true" toc="default"> | |||
| <!-- topology --> | <name>Relationship to BIER</name> | |||
| <t>BIER-TE is designed so that its forwarding plane is a simple extensio | ||||
| <section anchor="comparison" title="Relationship to BIER"> | n to the (non-TE) BIER forwarding plane, hence allowing it to be added to BIER d | |||
| eployments where it can be beneficial.</t> | ||||
| <t>BIER-TE is designed so that its forwarding plane is a simple extension to the | <t>BIER-TE is also intended as an option to expand the BIER architecture | |||
| (non-TE) BIER forwarding plane, hence allowing for it to be added to BIER deplo | into deployments where (non-TE) BIER may not be the best fit, such as statical | |||
| yments where it can be beneficial.</t> | ly provisioned networks that need path steering but do not want distributed rout | |||
| <t>BIER-TE is also intended as an option to expand the BIER architecture into de | ing protocols.</t> | |||
| ployments where (non-TE) BIER may not be the best fit, such as statically provi | <ol spacing="normal" type="1"><li> | |||
| sioned networks with needs for path steering but without desire for distributed | <t>BIER-TE inherits the following aspects from BIER unchanged: | |||
| routing protocols.</t> | </t> | |||
| <ol spacing="normal" type="%p%c"><li>The fundamental purpose of per- | ||||
| <t><list style="numbers"> | packet signaled replication and delivery via a BitString.</li> | |||
| <t>BIER-TE inherits the following aspects from BIER unchanged: | <li>The overall architecture, which consists of three layers: the | |||
| <list style="numbers"> | flow overlay, the BIER(-TE) layer, and the routing underlay.</li> | |||
| <t>The fundamental purpose of per-packet signaled replication and delivery v | <li>The supported encapsulations <xref target="RFC8296" format="de | |||
| ia a BitString.</t> | fault"/>.</li> | |||
| <t>The overall architecture consisting of three layers, flow overlay, BIER(- | <li>The semantics of all BIER header elements <xref target="RFC829 | |||
| TE) layer and routing underlay.</t> | 6" format="default"/> used by the BIER-TE forwarding plane, other than the seman | |||
| <t>The supported encapsulations <xref target="RFC8296"/>.</t> | tic of the BP in the BitString.</li> | |||
| <t>The semantic of all <xref target="RFC8296"/> header elements used by the | <li>The BIER forwarding plane, except for how bits have to be clea | |||
| BIER-TE forwarding plane other than the semantic of the BP in the BitString.</t> | red during replication.</li> | |||
| <t>The BIER forwarding plane, except for how bits have to be cleared during | </ol> | |||
| replication.</t> | </li> | |||
| </list></t> | <li> | |||
| <t>BIER-TE has the following key changes with respect to BIER: | ||||
| <t>BIER-TE has the following key changes with respect to BIER: | </t> | |||
| <list style="numbers"> | <ol spacing="normal" type="%p%c"><li>In BIER, bits in the BitString | |||
| <t>In BIER, bits in the BitString of a BIER packet header indicate a BFER | of a BIER packet header indicate a BFER, | |||
| and bits in the BIFT indicate the BIER control plane calculated next-hop | and bits in the BIFT indicate the BIER control plane's calculated next h | |||
| toward that BFER. In BIER-TE, a bit in the BitString of a BIER packet | op | |||
| 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 | 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 | BFR that is the upstream of that adjacency has its BP populated with | |||
| the adjacency in its BIFT.</t> | the adjacency in its BIFT.</li> | |||
| <li>In BIER, the implied reference options for the core part of th | ||||
| <t>In BIER, the implied reference options for the core part of the BIER laye | e | |||
| r | BIER layer | |||
| control plane are the BIER extensions for distributed routing protocols. | control plane are the BIER extensions for distributed routing protocols. | |||
| This includes ISIS/OSPF extensions for BIER, <xref target="RFC8401"/> | These include IS-IS and OSPF extensions for BIER, as specified in <xref t | |||
| and <xref target="RFC8444"/>.</t> | arget="RFC8401" format="default"/> | |||
| and <xref target="RFC8444" format="default"/>, respectively.</li> | ||||
| <t>The reference option for the core part of the BIER-TE control plane is | <li>The reference option for the core part of the BIER-TE control | |||
| the BIER-TE controller. Nevertheless, both the BIER and BIER-TE BIFTs for | plane is | |||
| warding | the BIER-TE controller. Nevertheless, both the BIER and BIER-TE BIFTs' fo | |||
| plane state could equally be populated by any mechanism.</t> | rwarding | |||
| <t>Assuming the reference options for the control plane, BIER-TE replaces i | plane state could equally be populated by any mechanism.</li> | |||
| n-network autonomous path calculation by explicit paths calculated by the BIER-T | <li>Assuming the reference options for the control plane, BIER-TE | |||
| E controller.</t> | replaces in-network autonomous path calculations with explicit paths calculated | |||
| </list></t> | by the BIER-TE controller.</li> | |||
| </ol> | ||||
| <t>The following elements/functions described in the BIER architecture are not r | </li> | |||
| equired by the BIER-TE architecture: | <li> | |||
| <list style="numbers"> | <t>The following elements/functions described in the BIER architectu | |||
| <t>"Bit Index Routing Tables" (BIRTs) are not required on BFRs for BIER-TE w | re are not required by the BIER-TE architecture: | |||
| hen using a BIER-TE controller because the controller can directly populate the | </t> | |||
| BIFTs. In BIER, BIRTs are populated by the distributed routing protocol support | <ol spacing="normal" type="%p%c"><li>"Bit Index Routing Tables" (BIR | |||
| for BIER, allowing BFRs to populate their BIFTs locally from their BIRTs. Other | Ts) are not required on BFRs for BIER-TE when using a BIER-TE controller, becaus | |||
| BIER-TE control plane or management plane options may introduce requirements fo | e the controller can directly populate the BIFTs. In BIER, BIRTs are populated b | |||
| r BIRTs for BIER-TE BFRs.</t> | y the distributed routing protocol support for BIER, allowing BFRs to populate t | |||
| <t>The BIER-TE layer forwarding plane does not require BFRs to have a unique | heir BIFTs locally from their BIRTs. Other BIER-TE control plane or management | |||
| BP and therefore also no unique BFR-id. See <xref target="leaf-bfer"/>.</t> | plane options may introduce requirements for BIRTs for BIER-TE BFRs.</li> | |||
| <t>Identification of BFRs by the BIER-TE control plane is outside the scope | <li>The BIER-TE layer forwarding plane does not require BFRs to ha | |||
| of this specification. Whereas the BIER control plane uses BFR-ids in its BFR to | ve a unique BP; see <xref target="leaf-bfer" format="default"/>. Therefore, BFRs | |||
| BFR signaling, a BIER-TE controller may choose any form of identification deeme | may not have a unique BFR-id; see <xref target="bfr-id"/>.</li> | |||
| d appropriate.</t> | <li>Identification of BFRs by the BIER-TE control plane is outside | |||
| <t>BIER-TE forwarding does not require the BFIR-id field of the BIER packet | the scope of this specification. Whereas the BIER control plane uses BFR-ids in | |||
| header.</t> | its BFR-to-BFR signaling, a BIER-TE controller may choose any form of identific | |||
| </list></t> | ation deemed appropriate.</li> | |||
| <li>BIER-TE forwarding does not require the BFIR-id field of the B | ||||
| <t>Co-existence of BIER and BIER-TE in the same network requires the following: | IER packet header.</li> | |||
| <list style="numbers"> | </ol> | |||
| <t>The BIER/BIER-TE packet header needs to allow addressing both BIER and BIER-T | </li> | |||
| E BIFTs. Depending on the encapsulation option, the same SD may or may not be re | <li> | |||
| usable across BIER and BIER-TE. See <xref target="encapsulation"/>. | <t>Co-existence of BIER and BIER-TE in the same network requires the | |||
| In either case, a packet is always only forwarded end-to-end via BIER or via BIE | following: | |||
| R-TE (ships in the nights forwarding).</t> | </t> | |||
| <ol spacing="normal" type="%p%c"><li>The BIER/BIER-TE packet header | ||||
| <t>BIER-TE deployments will have to assign BFR-ids to BFRs and insert them into | needs to allow the addressing of both BIER and BIER-TE BIFTs. Depending on the e | |||
| the BFIR-id field of BIER packet headers as BIER does, whenever the deployment u | ncapsulation option, the same SD may or may not be reusable across BIER and BIER | |||
| ses (unchanged) components developed for BIER that use BFR-id, such as multicast | -TE. See <xref target="encapsulation" format="default"/>. | |||
| flow overlays or BIER layer control plane elements. See also <xref target="bfr- | In either case, a packet is always forwarded only end to end via BIER or via BIE | |||
| id"/>.</t> | R-TE ("ships in the night" forwarding).</li> | |||
| <li>BIER-TE deployments will have to assign BFR-ids to BFRs and in | ||||
| </list></t> | sert them into the BFIR-id field of BIER packet headers, as does BIER, whenever | |||
| the deployment uses (unchanged) components developed for BIER that use BFR-ids, | ||||
| </list></t> | such as multicast flow overlays or BIER layer control plane elements. See also < | |||
| xref target="bfr-id" format="default"/>.</li> | ||||
| </section> | </ol> | |||
| </li> | ||||
| <section anchor="fwd-comparison" title="Accelerated/Hardware forwarding comp | </ol> | |||
| arison"> | </section> | |||
| <section anchor="fwd-comparison" numbered="true" toc="default"> | ||||
| <t>BIER-TE forwarding rules, especially the BitString parsing are designed to be | <name>Accelerated Hardware Forwarding Comparison</name> | |||
| as close | <t>BIER-TE forwarding rules, especially BitString parsing, are designed | |||
| as possible to those of BIER in the expectation that this eases the programming | to be as close | |||
| of BIER-TE forwarding | as possible to those of BIER, with the expectation that this eases the programmi | |||
| ng of BIER-TE forwarding | ||||
| code and/or BIER-TE forwarding hardware on platforms supporting BIER. | code and/or BIER-TE forwarding hardware on platforms supporting BIER. | |||
| The pseudocode in <xref target="pseudocode"/> shows how existing | The pseudocode in <xref target="pseudocode" format="default"/> shows how existin g | |||
| (non-TE) BIER/BIFT forwarding can be modified to support the required BIER-TE fo rwarding | (non-TE) BIER/BIFT forwarding can be modified to support the required BIER-TE fo rwarding | |||
| functionality (<xref target="requirements"/>), by using BIER BIFT's "Forwarding | functionality (<xref target="requirements" format="default"/>), by using the BIE | |||
| Bit Mask" (F-BM): | R BIFT's "Forwarding Bit Mask" (F-BM): | |||
| Only the clearing of bits to avoid duplicate | only the clearing of bits to avoid sending duplicate | |||
| packets to a BFR's neighbor is skipped in BIER-TE forwarding because it is not n | packets to a BFR's neighbor is skipped in BIER-TE forwarding, because it is not | |||
| ecessary | necessary | |||
| and could not be done when using BIER F-BM.</t> | 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 m | ||||
| <t>Whether to use BIER or BIER-TE forwarding is simply a choice of the mode | ode | |||
| of the BIFT indicated by the packet (BIER or BIER-TE BIFT). This is determined | of the BIFT indicated by the packet (BIER or BIER-TE BIFT). This is determined | |||
| by the BFR configuration for the encapsulation, see <xref target="encapsulation" | by the BFR configuration for the encapsulation; see <xref target="encapsulation" | |||
| />.</t> | format="default"/>.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- fwd-comparison --> | ||||
| </section> | </section> | |||
| <!-- overview --> | ||||
| <section anchor="components" title="Components"> | <section anchor="components" numbered="true" toc="default"> | |||
| <name>Components</name> | ||||
| <t>BIER-TE can be thought of being constituted from the same three | <t>BIER-TE can be thought of as being composed of the same three | |||
| layers as BIER: The "multicast flow overlay", the "BIER layer" and | layers as BIER: the "multicast flow overlay", the "BIER layer", and | |||
| the "routing underlay". The following picture also shows how the "BIER layer" | the "routing underlay". <xref target="architecture"/> also shows how the BIER l | |||
| is constituted from the "BIER-TE forwarding plane" and the "BIER-TE control plan | ayer | |||
| e" | is composed of the "BIER-TE forwarding plane" and the "BIER-TE control plane" as | |||
| represent by the "BIER-TE Controller".</t> | represented by the "BIER-TE controller". | |||
| </t> | ||||
| <figure anchor="architecture" title="BIER-TE architecture"> | <figure anchor="architecture"> | |||
| <artwork align="left"><![CDATA[ | <name>BIER-TE Architecture</name> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| <------BGP/PIM-----> | <------BGP/PIM-----> | |||
| |<-IGMP/PIM-> multicast flow <-PIM/IGMP->| | |<-IGMP/PIM-> multicast flow <-PIM/IGMP->| | |||
| overlay | overlay | |||
| BIER-TE [BIER-TE Controller] <=> [BIER-TE Topology] | BIER-TE [BIER-TE Controller] <=> [BIER-TE Topology] | |||
| control ^ ^ ^ | control ^ ^ ^ | |||
| plane / | \ BIER-TE control protocol | plane / | \ BIER-TE control protocol | |||
| | | | e.g. YANG/NETCONF/RESTCONF | | | | (e.g., YANG/NETCONF/RESTCONF | |||
| | | | PCEP/... | | | | PCEP/...) | |||
| v v v | v v v | |||
| Src -> Rtr1 -> BFIR-----BFR-----BFER -> Rtr2 -> Rcvr | Src -> Rtr1 -> BFIR-----BFR-----BFER -> Rtr2 -> Rcvr | |||
| |<----------------->| | |<----------------->| | |||
| BIER-TE forwarding plane | BIER-TE forwarding plane | |||
| |<- BIER-TE domain->| | |<- BIER-TE domain->| | |||
| |<--------------------->| | |<--------------------->| | |||
| Routing underlay | Routing underlay | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <section anchor="flow-overlay" title="The Multicast Flow Overlay"> | <section anchor="flow-overlay" numbered="true" toc="default"> | |||
| <name>The Multicast Flow Overlay</name> | ||||
| <t>The Multicast Flow Overlay has the same role as described for BIER | <t>The multicast flow overlay has the same role as that described for BI | |||
| in <xref target="RFC8279"/>, Section 4.3. See also <xref target="engineered-bits | ER | |||
| trings"/>.</t> | in <xref target="RFC8279" sectionFormat="comma" section="4.3"/>. See also <xref | |||
| target="engineered-bitstrings" format="default"/>.</t> | ||||
| <t>When a BIER-TE controller is used, then the signaling for the Multicast Flow | <t>When a BIER-TE controller is used, it might also be preferable that | |||
| Overlay may | multicast flow overlay signaling be performed through a central point of control | |||
| also be preferred to operate through a central point of control. For BGP based | . For BGP-based | |||
| overlay flow services such as "Multicast VPN Using BIER" (<xref target="RFC8556" | overlay flow services such as "<xref target="RFC8556" format="title"/>" <xref ta | |||
| />) this | rget="RFC8556" format="default"/>, this | |||
| can be achieved by making the BIER-TE controller operate as a BGP Route | can be achieved by making the BIER-TE controller operate as a BGP Route | |||
| Reflector (<xref target="RFC4456"/>) and combining it with signaling through BGP | Reflector <xref target="RFC4456" format="default"/> and combining it with signal | |||
| or a different protocol for the BIER-TE controller calculated BitStrings. | ing through BGP | |||
| See <xref target="engineered-bitstrings"/> and <xref target="bitstring-mappings" | or a different protocol for the BIER-TE controller's calculated BitStrings. | |||
| />.</t> | See Sections <xref target="engineered-bitstrings" format="counter"/> and <x | |||
| ref target="bitstring-mappings" format="counter"/>.</t> | ||||
| </section> | </section> | |||
| <!-- flow-overlay --> | ||||
| <section anchor="control-plane" title="The BIER-TE Control Plane"> | ||||
| <t>In the (non-TE) BIER architecture <xref target="RFC8279"/>, the BIER control | <section anchor="control-plane" numbered="true" toc="default"> | |||
| plane is not explicitly separated from the BIER forwarding plane, | <name>The BIER-TE Control Plane</name> | |||
| but instead their functions are summarized together in Section 4.2. | <t>In the (non-TE) BIER architecture <xref target="RFC8279" format="defa | |||
| ult"/>, the BIER layer is summarized in <xref target="RFC8279" sectionFormat="of | ||||
| " section="4.2"/>. This summary includes both the functions | ||||
| of the BIER-layer control plane and forwarding plane, without using those terms. | ||||
| Example standardized options for the BIER control plane include | Example standardized options for the BIER control plane include | |||
| ISIS/OSPF extensions for BIER, <xref target="RFC8401"/> and <xref target="RFC844 | IS-IS and OSPF extensions for BIER, as specified in <xref target="RFC8401" forma | |||
| 4"/>.</t> | t="default"/> and <xref target="RFC8444" format="default"/>, respectively.</t> | |||
| <t>For BIER-TE, the control plane includes, at a minimum, the following | ||||
| <t>For BIER-TE, the control plane includes at minimum the following functionalit | functionality.</t> | |||
| y.</t> | ||||
| <t><list style="hanging"> | ||||
| <t anchor="topology-control" hangText="1. BIER-TE topology control:">During | ||||
| initial provisioning of the network and/or during modifications of its topology | ||||
| and/or services, the protocols and/or procedures to establish BIER-TE BIFTs: | ||||
| <list style="numbers"> | ||||
| <t anchor="topology-control-1">Determine the desired BIER-TE topology fo | ||||
| r a BIER-TE sub-domains: the native and/or overlay adjacencies that are assigned | ||||
| to BPs. Topology discovery is discussed in <xref target="topology-discovery"/> | ||||
| and the various aspects of the BIER-TE controllers determinations about the topo | ||||
| logy are discussed throughout <xref target="controller-ops"/></t> | ||||
| <t>Determine the per-BFR BIFT from the BIER-TE topology. This is achieve | ||||
| d by simply extracting the adjacencies of the BFR from the BIER-TE topology and | ||||
| populating the BFRs BIFT with them.</t> | ||||
| <t>Optionally assign BFR-ids to BFIRs for later insertion into BIER head | ||||
| ers on BFIRs as BFIR-id. Alternatively, BFIR-id in BIER packet headers may be ma | ||||
| naged solely by the flow overlay layer and/or be unused. This is discussed in <x | ||||
| ref target="bfr-id"/>.</t> | ||||
| <t>Install/update the BIFTs into the BFRs and optionally BFR-ids into BF | ||||
| IRs. This is discussed in <xref target="topology-discovery"/>.</t> | ||||
| </list></t> | ||||
| <t anchor="tree-control" hangText="2. BIER-TE tree control:">During operatio | ||||
| ns of the network, protocols and/or procedures to support creation/change/remova | ||||
| l of overlay flows on BFIRs: | ||||
| <list style="numbers"> | ||||
| <t>Process the BIER-TE requirements for the multicast overlay flow: BFIR | ||||
| and BFERs of the flow as well as policies for the path selection of the flow. T | ||||
| his is discussed in <xref target="te-considerations"/>.</t> | ||||
| <t>Determine the BitStrings and optionally Entropy. This is discussed in | ||||
| <xref target="engineered-bitstrings"/>, <xref target="te-considerations"/> and | ||||
| <xref target="bitstring-mappings"/>.</t> | ||||
| <t>Install state on the BFIR to impose the desired BIER packet header(s) | ||||
| for packets of the overlay flow. Different aspects of this and the next point a | ||||
| re discussed throughout <xref target="bier-te-controller"/> and in <xref target= | ||||
| "encapsulation"/>, but the main responsibility of these two points is with the M | ||||
| ulticast Flow Overlay (<xref target="flow-overlay"/>), which is architecturally | ||||
| inherited from BIER.</t> | ||||
| <t>Install the necessary state on the BFERs to decapsulate the BIER pack | ||||
| et header and properly dispatch its payload.</t> | ||||
| </list></t> | ||||
| </list></t> | ||||
| <section anchor="bier-te-controller" title="The BIER-TE Controller"> | ||||
| <t>[RFC-Editor: the following text has three references to anchors topology-cont | ||||
| rol, topology-control-1 and tree-control. Unfortunately, XMLv2 does not offer an | ||||
| y tagging that reasonable references are generated (i had this problem already i | ||||
| n 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> | ||||
| <t>This architecture describes the | <ol spacing="normal" type="1"><li> | |||
| BIER-TE control plane as shown in <xref target="architecture"/> to consist of: | ||||
| <list style="symbols"> | ||||
| <t>A BIER-TE controller.</t> | ||||
| <t>BFR data-models and protocols to communicate between controller and B | ||||
| FRs | ||||
| in support of <xref target="topology-control">BIER-TE topology contro | ||||
| l</xref>, | ||||
| such as YANG/NETCONF/RESTCONF (<xref target="RFC7950"/>/<xref target= | ||||
| "RFC6241"/>/<xref target="RFC8040"/>).</t> | ||||
| <t>BFR data-models and protocols to communicate between controller and B | ||||
| FIR in support of | ||||
| <xref target="tree-control">BIER-TE tree control</xref>, such as BIER | ||||
| -TE extensions | ||||
| for <xref target="RFC5440"/>.</t> | ||||
| </list> | ||||
| </t> | ||||
| <t>The single, centralized BIER-TE controller is used in this document as refere | <t>BIER-TE topology control: During initial provisioning of the networ | |||
| nce option for the BIER-TE control plane but other options are equally feasible. | k and/or during modifications of its topology and/or services, the protocols and | |||
| /or procedures to establish BIER-TE BIFTs:</t> | ||||
| <ol spacing="normal" type="%p%c"> | ||||
| <li anchor="topology-control-1">Determine the desired BIER-TE topo | ||||
| logy for BIER-TE subdomains: the adjacencies that are assigned to BPs. Topology | ||||
| discovery is discussed in <xref target="topology-discovery" format="default"/>, | ||||
| and the various aspects of the BIER-TE controller's determinations regarding the | ||||
| topology are discussed throughout <xref target="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 topolo | ||||
| gy and populating the BFR's BIFT with them.</li> | ||||
| <li>Optionally assign BFR-ids to BFIRs for later insertion into BI | ||||
| ER headers on BFIRs as BFIR-ids. Alternatively, BFIR-ids in BIER packet headers | ||||
| may be managed solely by the flow overlay layer and/or be unused. This is discus | ||||
| sed in <xref target="bfr-id" format="default"/>.</li> | ||||
| <li>Install/update the BIFTs into the BFRs and, optionally, BFR-id | ||||
| s into BFIRs. This is discussed in <xref target="topology-discovery" format="def | ||||
| ault"/>.</li> | ||||
| </ol> | ||||
| </li> | ||||
| <li> | ||||
| <t anchor="tree-control"> | ||||
| BIER-TE tree control: | ||||
| During network operations, protocols and/or procedures to support cr | ||||
| eation/change/removal of overlay flows on BFIRs:</t> | ||||
| <ol spacing="normal" type="%p%c"><li>Process the BIER-TE requirement | ||||
| s for the multicast overlay flow: BFIRs and BFERs of the flow as well as policie | ||||
| s for the path selection of the flow. This is discussed in <xref target="te-cons | ||||
| iderations" format="default"/>.</li> | ||||
| <li>Determine the BitStrings and, optionally, entropy. | ||||
| BitStrings are discussed in Sections <xref target="engineered-bitstrings" f | ||||
| ormat="counter"/>, <xref target="te-considerations" format="counter"/>, and <xre | ||||
| f target="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 he | ||||
| ader(s) for packets of the overlay flow. Different aspects of this point, as wel | ||||
| l as the next point, are discussed throughout <xref target="bier-te-controller" | ||||
| format="default"/> and in <xref target="encapsulation" format="default"/>. The m | ||||
| ain component responsible for these two points is the multicast flow overlay (<x | ||||
| ref target="flow-overlay" format="default"/>), which is architecturally inherite | ||||
| d from BIER.</li> | ||||
| <li>Install the necessary state on the BFERs to decapsulate the BI | ||||
| ER packet header and properly dispatch its payload.</li> | ||||
| </ol> | ||||
| </li> | ||||
| </ol> | ||||
| <section anchor="bier-te-controller" numbered="true" toc="default"> | ||||
| <name>The BIER-TE Controller</name> | ||||
| <t>This architecture describes the | ||||
| BIER-TE control plane, as shown in <xref target="architecture" format="default"/ | ||||
| >, as consisting of: | ||||
| </t> | ||||
| <ul spacing="normal"> | ||||
| <li>A BIER-TE controller.</li> | ||||
| <li>BFR data models and protocols to communicate between the control | ||||
| ler and BFRs | ||||
| in support of <xref target="topology-control-1" format="none">BIER-TE | ||||
| topology control</xref> (see the list under "BIER-TE topology control"), | ||||
| such as YANG/NETCONF/RESTCONF <xref target="RFC7950" format="default" | ||||
| /> <xref target="RFC6241" format="default"/> <xref target="RFC8040" format="defa | ||||
| ult"/>.</li> | ||||
| <li>BFR data models and protocols to communicate between the control | ||||
| ler and BFIRs in support of | ||||
| <xref target="tree-control" format="none">BIER-TE tree control</xref> | ||||
| (see <xref target="control-plane"/>, point 2.), such as BIER-TE extensions | ||||
| for <xref 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 control plane, but other options are eq | ||||
| ually feasible. | ||||
| The BIER-TE control plane could equally be implemented without automated configu ration/protocols, | The BIER-TE control plane could equally be implemented without automated configu ration/protocols, | |||
| by an operator via CLI on the BFRs. | by an operator via a CLI on the BFRs. | |||
| In that case, operator configured local policy on the BFIR would have to | In that case, operator-configured local policy on the BFIR would have to | |||
| determine how to set the appropriate BIER header fields. The BIER-TE control pl ane could also be decentralized | determine how to set the appropriate BIER header fields. The BIER-TE control pl ane could also be decentralized | |||
| and/or distributed, but this document does not consider any additional protocols and/or procedures | and/or distributed, but this document does not consider any additional protocols and/or procedures | |||
| which would then be necessary to coordinate its (distributed/decentralized) enti | that would then be necessary to coordinate its (distributed/decentralized) entit | |||
| ties to achieve the above described functionality.</t> | ies to achieve the above-described functionality.</t> | |||
| <section anchor="topology-discovery" numbered="true" toc="default"> | ||||
| <section anchor="topology-discovery" title="BIER-TE Topology discovery and | <name>BIER-TE Topology Discovery and Creation</name> | |||
| creation"> | <t> | |||
| <xref target="topology-control-1" format="none">The first item listed for BIER-T | ||||
| <t><xref target="topology-control-1">The first item of BIER-TE topology control< | E topology control</xref> (<xref target="control-plane"/>, point 1.a.) | |||
| /xref> | ||||
| includes network topology discovery and BIER-TE topology creation. The latter de scribes | includes network topology discovery and BIER-TE topology creation. The latter de scribes | |||
| the process by which a Controller determines which routers are to be configured as BFRs and the | the process by which a controller determines which routers are to be configured as BFRs and the | |||
| adjacencies between them.</t> | adjacencies between them.</t> | |||
| <t>In statically managed networks, e.g., industrial environments, bo | ||||
| <t>In statically managed networks, such as in industrial environments, both disc | th discovery and creation can be a manual/offline process.</t> | |||
| overy and creation can be a manual/offline process.</t> | <t>In other networks, topology discovery may rely on such protocols | |||
| as those that include extending an IGP based on a link-state protocol into the B | ||||
| <t>In other networks, topology discovery may rely on protocols including extendi | IER-TE controller itself, e.g., BGP-LS <xref target="RFC7752" format="default"/> | |||
| ng a "Link-State-Protocol" based IGP into the BIER-TE controller itself, <xref t | or YANG topology <xref target="RFC8345" format="default"/>, as well as methods | |||
| arget="RFC7752"/> (BGP-LS) or <xref target="RFC8345"/> (YANG topology) as well a | specific to BIER-TE -- for example, via <xref target="BIER-TE-YANG" format="defa | |||
| s BIER-TE specific methods, for example via <xref target="I-D.ietf-bier-te-yang" | ult"/>. These options are non-exhaustive.</t> | |||
| />. These options are non-exhaustive.</t> | <t>Dynamic creation of the BIER-TE topology can be as easy as mappin | |||
| g the network topology 1:1 to the BIER-TE topology by assigning a BP for every n | ||||
| <t>Dynamic creation of the BIER-TE topology can be as easy as mapping the networ | etwork subnet adjacency. In larger networks, it likely involves more complex pol | |||
| k topology 1:1 to the BIER-TE topology by assigning a BP for every network subne | icy and optimization decisions, including how to minimize the number of BPs requ | |||
| t adjacency. In larger networks, it likely involves more complex policy and opti | ired and how to assign BPs across different BitStrings to minimize the number of | |||
| mization decisions including how to minimize the number of BPs required and how | duplicate packets across links when delivering an overlay flow to BFERs using d | |||
| to assign BPs across different BitStrings to minimize the number of duplicate pa | ifferent SIs:BitStrings. These topics are discussed in <xref target="controller- | |||
| ckets across links when delivering an overlay flow to BFER using different SIs/B | ops" format="default"/>.</t> | |||
| itStrings. These topics are discussed in <xref target="controller-ops"/>.</t> | <t>When the BIER-TE topology has been determined, the BIER-TE contro | |||
| ller pushes | ||||
| <t>When the BIER-TE topology is determined, the BIER-TE Controller then pushes | the BPs/adjacencies to the BIFT of the BFRs. On each BFR, only those SIs:BPs | |||
| the BitPositions/adjacencies to the BIFT of the BFRs. On each BFR only those SI: | that are adjacencies to other BFRs in the BIER-TE topology are populated.</t> | |||
| BitPositions | <t>Communications between the BIER-TE controller and BFRs for both B | |||
| are populated that are adjacencies to other BFRs in the BIER-TE topology.</t> | IER-TE topology | |||
| control and BIER-TE tree control are ideally via standardized protocols and data | ||||
| <t>Communications between the BIER-TE Controller and BFRs for both BIER-TE topol | models such | |||
| ogy | as NETCONF/RESTCONF/YANG/PCEP. A vendor-specific CLI on the BFRs is also an opt | |||
| control and BIER-TE tree control is ideally via standardized protocols and data- | ion (as in many other "Software-Defined Network" (SDN) | |||
| models such | solutions lacking definitions of standardized data models).</t> | |||
| as NETCONF/RESTCONF/YANG/PCEP. Vendor-specific CLI on the BFRs is also an optio | </section> | |||
| n (as in many other SDN | <section anchor="engineered-bitstrings" numbered="true" toc="default"> | |||
| solutions lacking definition of standardized data models).</t> | <name>Engineered Trees via BitStrings</name> | |||
| <t>In BIER, the same set of BFERs in a single subdomain is always en | ||||
| </section> | coded as the same BitString. | |||
| In BIER-TE, the BitString used to reach the same set of BFERs in the same subdom | ||||
| <section anchor="engineered-bitstrings" title="Engineered Trees via BitStr | ain can be | |||
| ings"> | different for different overlay flows because the BitString encodes the paths to | |||
| wards the BFERs, | ||||
| <t>In BIER, the same set of BFER in a single sub-domain is always encoded as the | so the BitStrings from different BFIRs to the same set of BFERs will often be di | |||
| same BitString. | fferent. Likewise, the BitString from | |||
| In BIER-TE, the BitString used to reach the same set of BFER in the same sub-dom | the same BFIR to the same set of BFERs can be different for different | |||
| ain can be | overlay flows if different policies should be applied to those overlay | |||
| different for different overlay flows because the BitString encodes the paths to | flows, such as shortest path trees, Steiner | |||
| wards the BFER, | trees (minimum cost trees), diverse path trees for redundancy, and so on. | |||
| so the BitStrings from different BFIR to the same set of BFER will often be diff | </t> | |||
| erent. | <t>See also <xref target="BIER-MCAST-OVERLAY" format="default"/> for | |||
| Likewise, the BitString from the same BFIR to the same set of BFER can be differ | an application | |||
| ent for different overlay | ||||
| flows for policy reasons such as shortest path trees, Steiner trees (minimum cos | ||||
| t trees), | ||||
| diverse path trees for redundancy and so on.</t> | ||||
| <t>See also <xref target="I-D.ietf-bier-multicast-http-response"/> for an applic | ||||
| ation | ||||
| leveraging BIER-TE engineered trees.</t> | leveraging BIER-TE engineered trees.</t> | |||
| </section> | ||||
| <section anchor="changes-in-topo" numbered="true" toc="default"> | ||||
| <name>Changes in the Network Topology</name> | ||||
| <t>If the network topology changes (not failure based) so that adjac | ||||
| encies | ||||
| that are assigned to bit positions are no longer needed, the BIER-TE controller | ||||
| can | ||||
| reuse those bit positions for new adjacencies. First, these bit positions | ||||
| need to be removed from any BFIR flow state and BFR BIFT state. Then, they | ||||
| can be repopulated, first into the BIFT and then into the BFIR.</t> | ||||
| </section> | ||||
| </section> | <section anchor="failures" numbered="true" toc="default"> | |||
| <name>Link/Node Failures and Recovery</name> | ||||
| <section anchor="changes-in-topo" title="Changes in the network topology"> | <t>When links or nodes fail or recover in the topology, BIER-TE coul | |||
| d quickly | ||||
| <t>If the network topology changes (not failure based) so that adjacencies | respond with "Fast Reroute" (FRR) procedures such as those described in <xref ta | |||
| that are assigned to bit positions are no longer needed, the BIER-TE Controller | rget="BIER-TE-PROTECTION" format="default"/>, the details of which are out of sc | |||
| can | ope for this document. It can also more slowly react by | |||
| re-use those bit positions for new adjacencies. First, these bit positions | ||||
| need to be removed from any BFIR flow state and BFR BIFT state, then they | ||||
| can be repopulated, first into BIFT and then into the BFIR.</t> | ||||
| </section> | ||||
| <!-- changes-in-topo --> | ||||
| <section anchor="failures" title="Link/Node Failures and Recovery"> | ||||
| <t>When link or nodes fail or recover in the topology, BIER-TE could quickly | ||||
| respond with FRR procedures such as <xref target="I-D.eckert-bier-te-frr"/>, the | ||||
| details of which are out of scope for this document. It can also more slowly re | ||||
| act by | ||||
| recalculating the BitStrings of affected multicast flows. This reaction is | recalculating the BitStrings of affected multicast flows. This reaction is | |||
| slower than the FRR procedure because the BIER-TE Controller needs to receive | slower than the FRR procedure because the BIER-TE controller needs to receive | |||
| link/node up/down indications, recalculate the desired BitStrings and push | link/node up/down indications, recalculate the desired BitStrings, and push | |||
| them down into the BFIRs. With FRR, this is all performed locally on a BFR | them down into the BFIRs. With FRR, this is all performed locally on a BFR | |||
| receiving the adjacency up/down notification.</t> | receiving the adjacency up/down notification.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- failures --> | ||||
| </section> | </section> | |||
| <!-- control-plane --> | ||||
| </section> | </section> | |||
| <!-- XXX --> | ||||
| <section anchor="forwarding-plane" title="The BIER-TE Forwarding Plane"> | <section anchor="forwarding-plane" numbered="true" toc="default"> | |||
| <name>The BIER-TE Forwarding Plane</name> | ||||
| <t>[RFC-editor Q: "is constituted from" / "consists of" / "composed from..." ??? | <t>The BIER-TE forwarding plane consists of the following components: | |||
| ]</t> | </t> | |||
| <t>The BIER-TE Forwarding Plane is constituted from the following components: | <ol spacing="normal" type="1"><li>On a BFIR, imposition of the BIER head | |||
| <list style="numbers"> | er for packets from overlay flows. This is driven by state established by the BI | |||
| <t>On a BFIR, imposition of the BIER header for packets from overlay flo | ER-TE control plane, the multicast flow overlay as explained in <xref target="fl | |||
| ws. This is driven by a combination of state established by the BIER-TE control | ow-overlay" format="default"/>, or a combination of both.</li> | |||
| plane and/or the multicast flow overlay as explained in <xref target="flow-overl | <li>On BFRs (including BFIRs and BFERs), forwarding/replication of BIE | |||
| ay"/>.</t> | R packets according to their SD, SI, "BitStringLength" (BSL), BitString, and, op | |||
| <t>On BFRs (including BFIR and BFER), forwarding/replication of BIER pac | tionally, entropy fields as explained in <xref target="forwarding" format="defau | |||
| kets according to their SD, SI, "BitStringLength" (BSL), BitString and optionall | lt"/>. Processing of other BIER header fields, such as the "Differentiated Servi | |||
| y Entropy fields as explained in <xref target="forwarding"/>. Processing of othe | ces Code Point" (DSCP) field, is outside the scope of this document.</li> | |||
| r BIER header fields such as DSCP is outside the scope of this document.</t> | <li>On BFERs, removal of the BIER header and dispatching of the payloa | |||
| <t>On BFERs, removal of the BIER header and dispatching of the payload a | d according to state created by the BIER-TE control plane and/or overlay layer.< | |||
| ccording to state created by the BIER-TE control plane and/or overlay layer.</t> | /li> | |||
| </list> | </ol> | |||
| </t> | <t>When the BIER-TE forwarding plane receives a packet, it simply looks | |||
| <t>When the BIER-TE Forwarding Plane receives a packet, it simply looks | ||||
| up the bit positions that are set in the BitString of the packet in the | up the bit positions that are set in the BitString of the packet in the | |||
| BIFT that was populated by the BIER-TE Controller. | BIFT that was populated by the BIER-TE controller. | |||
| For every BP that is set in the BitString, and that has one or | For every BP that is set in the BitString and has one or | |||
| more adjacencies in the BIFT, a copy is made according to the type | more adjacencies in the BIFT, a copy is made according to the types | |||
| of adjacencies for that BP in the BIFT. Before sending any copy, the | of adjacencies for that BP in the BIFT. Before sending any copies, the | |||
| BFR clears all BPs in the BitString of the packet for which 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 bits inhibits | BFR has one or more adjacencies in the BIFT. Clearing these bits prevents | |||
| packets from looping when the BitStrings erroneously includes a forwarding loop. | packets from looping when a BitString erroneously includes a forwarding loop. | |||
| When a forward_connected() adjacency has the "DoNotClear" (DNC) flag | When a forward_connected() adjacency has the "DoNotClear" (DNC) flag | |||
| set, then this BP is re-set for the packet copied to that adjacency. | set, this BP is reset for the packet copied to that adjacency. | |||
| See <xref target="forward-connected"/>.</t> | See <xref target="forward-connected" format="default"/>.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- forwarding-plane --> | ||||
| <section anchor="routing-underlay" title="The Routing Underlay"> | ||||
| <t>For forward_connected() adjacencies, BIER-TE is sending BIER packets to direc | <section anchor="routing-underlay" numbered="true" toc="default"> | |||
| tly connected | <name>The Routing Underlay</name> | |||
| BIER-TE neighbors as L2 (unicasted) BIER packets without requiring a | <t>For forward_connected() adjacencies, BIER-TE sends BIER packets to di | |||
| rectly connected | ||||
| BIER-TE neighbors as L2 (unicast) BIER packets without requiring a | ||||
| routing underlay. For forward_routed() adjacencies, BIER-TE forwarding encapsula tes | routing underlay. For forward_routed() adjacencies, BIER-TE forwarding encapsula tes | |||
| a copy of the BIER packet so that it can be delivered by the forwarding plane | 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 adj acency. | of the routing underlay to the routable destination address indicated in the adj acency. | |||
| See <xref target="forward-routed"/> for the adjacency definition.</t> | See <xref target="forward-routed" format="default"/> for details on forward_rout | |||
| ed() adjacencies.</t> | ||||
| <t>BIER relies on the routing underlay to calculate paths towards BFERs and deri | <t>BIER relies on the routing underlay to calculate paths towards BFERs | |||
| ve | and derive next-hop BFR adjacencies for those paths. These two steps commonly re | |||
| next-hop BFR adjacencies for those paths. This commonly relies on BIER specific | ly on BIER-specific extensions to the routing protocols of the routing underlay | |||
| extensions | but may also be established | |||
| to the routing protocols of the routing underlay but may also be established | by a controller. In BIER-TE, the next hops for a packet are determined by the Bi | |||
| by a controller. In BIER-TE, the next-hops of a packet are determined by the Bit | tString | |||
| String | through the BIER-TE controller-established adjacencies on the BFR for the BPs of | |||
| through the BIER-TE Controller established adjacencies on the BFR for the BPs of | the BitString. | |||
| the BitString. | There is thus no need for BFR-specific routing underlay extensions to forward BI | |||
| There is thus no need for BFR specific routing underlay extensions to forward BI | ER packets with | |||
| ER packets with | ||||
| BIER-TE semantics.</t> | BIER-TE semantics.</t> | |||
| <t>Encapsulation parameters can be provisioned by the BIER-TE controller | ||||
| <t>Encapsulation parameters can be provisioned by the BIER-TE controller into | into | |||
| the forward_connected() or forward_routed() adjacencies directly without relying on a routing underlay. | the forward_connected() or forward_routed() adjacencies directly without relying on a routing underlay. | |||
| </t> | </t> | |||
| <t>If the BFR intends to support FRR for BIER-TE, then the BIER-TE | ||||
| <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: | forwarding plane needs to receive fast adjacency up/down notifications: | |||
| Link up/down or neighbor up/down, e.g. from BFD. Providing these notifications | link up/down or neighbor up/down, e.g., from "Bidirectional Forwarding Detection " (BFD). Providing these notifications | |||
| is considered to be part of the routing underlay in this document.</t> | is considered to be part of the routing underlay in this document.</t> | |||
| </section> | ||||
| </section> | <section anchor="te-considerations" numbered="true" toc="default"> | |||
| <!-- routing-underlay --> | <name>Traffic Engineering Considerations</name> | |||
| <t>Traffic Engineering <xref target="TE-OVERVIEW" format="default"/> | ||||
| <section anchor="te-considerations" title="Traffic Engineering Consideration | ||||
| s"> | ||||
| <t>Traffic Engineering (<xref target="I-D.ietf-teas-rfc3272bis"/>) | ||||
| provides performance optimization of operational IP networks while utilizing | provides performance optimization of operational IP networks while utilizing | |||
| network resources economically and | network resources economically and | |||
| reliably. The key elements needed to effect TE are policy, path steering | reliably. The key elements needed to effect Traffic Engineering are policy, pat h steering, | |||
| and resource management. These elements require support at the | and resource management. These elements require support at the | |||
| control/controller level and within the forwarding plane.</t> | control/controller level and within the forwarding plane.</t> | |||
| <t>Policy decisions are made within the BIER-TE control plane, i.e., wit | ||||
| <t>Policy decisions are made within the BIER-TE control plane, i.e., within | hin | |||
| BIER-TE Controllers. Controllers use policy when composing BitStrings | BIER-TE controllers. Controllers use policy when composing BitStrings | |||
| and BFR BIFT state. The mapping of user/IP traffic to specific | and BFR BIFT state. The mapping of user/IP traffic to specific | |||
| BitStrings/BIER-TE flows is made based on policy. The specific details of | BitStrings / BIER-TE flows is made based on policy. The specific details of | |||
| BIER-TE policies and how a controller uses them are out of scope of this | BIER-TE policies and how a controller uses them are out of scope for this | |||
| document.</t> | document.</t> | |||
| <t>Path steering is supported via the definition of a BitString. BitStr | ||||
| <t>Path steering is supported via the definition of a BitString. BitStrings | ings | |||
| used in BIER-TE are composed based on policy and resource management | used in BIER-TE are composed based on policy and resource management | |||
| considerations. For example, when composing BIER-TE BitStrings, a Controller mu st take | considerations. For example, when composing BIER-TE BitStrings, a controller mu st take | |||
| into account the resources available at each BFR and for each BP | into account the resources available at each BFR and for each BP | |||
| when it is providing congestion-loss-free services such as | when it is providing congestion-loss-free services such as | |||
| Rate Controlled Service Disciplines <xref target="RCSD94"/>. Resource availabil | Rate-Controlled Service Disciplines <xref target="RCSD94" format="default"/>. R | |||
| ity | esource availability | |||
| could be provided for example via routing protocol information, but | could be provided, for example, via routing protocol information but | |||
| may also be obtained via a BIER-TE control protocol such as NETCONF or | may also be obtained via a BIER-TE control protocol such as NETCONF or | |||
| any other protocol commonly used by a Controller to understand the resources | any other protocol commonly used by a controller to understand the resources | |||
| of the network it operates on. The | of the network on which it operates. The | |||
| resource usage of the BIER-TE traffic admitted by the BIER-TE controller | resource usage of the BIER-TE traffic admitted by the BIER-TE controller | |||
| can be solely tracked on the BIER-TE Controller based on local accounting | can be solely tracked on the BIER-TE controller based on local accounting | |||
| as long as no forward_routed() adjacencies are used (see <xref target="forward-c | as long as no forward_routed() adjacencies are used (see <xref target="forward-r | |||
| onnected"/> for the definition | outed" format="default"/> for the definition | |||
| of forward_routed() adjacencies). When forward_routed() adjacencies are used, | 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> | the paths selected by the underlying routing protocol need to be tracked as well .</t> | |||
| <t>Resource management has implications for the forwarding plane beyond | ||||
| <t>Resource management has implications on the forwarding plane beyond | the BIER-TE-defined steering of packets; this includes allocation of | |||
| the BIER-TE defined steering of packets. This includes allocation of | buffers to guarantee the worst-case requirements for admitted RCSD traffic | |||
| buffers to guarantee the worst case requirements of admitted RCSD traffic | ||||
| and potentially policing and/or rate-shaping mechanisms, typically done | and potentially policing and/or rate-shaping mechanisms, typically done | |||
| via various forms of queuing. This level of resource control, | via various forms of queuing. This level of resource control, | |||
| while optional, is important in networks that wish to | while optional, is important in networks that wish to | |||
| support congestion management policies to control or regulate the offered | support congestion management policies to control or regulate the offered | |||
| traffic to deliver different levels of service and alleviate congestion | traffic to deliver different levels of service and alleviate congestion | |||
| problems, or those networks that wish to control latencies experienced by | problems, or those networks that wish to control latencies experienced by | |||
| specific traffic flows.</t> | specific traffic flows.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| <!-- te-considerations --> | ||||
| </section> | ||||
| <!-- components --> | ||||
| <section anchor="forwarding" title="BIER-TE Forwarding"> | ||||
| <section anchor="btft" title="The BIER-TE Bit Index Forwarding Table (BIFT)" | <section anchor="forwarding" numbered="true" toc="default"> | |||
| > | <name>BIER-TE Forwarding</name> | |||
| <section anchor="btft" numbered="true" toc="default"> | ||||
| <t>The BIER-TE BIFT is the equivalent to the BIER BIFT for (non-TE) BIER. It | <name>The BIER-TE Bit Index Forwarding Table (BIFT)</name> | |||
| exists on every BFR running BIER-TE. For every BIER sub-domain (SD) in use for B | <t>The BIER-TE BIFT is equivalent to the (non-TE) BIER BIFT. It | |||
| IER-TE, | exists on every BFR running BIER-TE. For every BIER "subdomain" (SD) in use for | |||
| it is a table as shown shown in <xref target="adjacencies"/>. That example | BIER-TE, | |||
| BIFT assumes a BSL of 8 bit positions (BPs) in the packets BitString. | the BIFT is constructed per the example shown in <xref target="adjacencies" form | |||
| As in <xref target="RFC8279"/> this BSL is purely used for the example and not a | at="default"/>. The | |||
| BIER/BIER-TE | BIFT in the figure assumes a BSL of 8 "bit positions" (BPs) in the packets BitSt | |||
| supported BSL (minimum BSL is 64).</t> | ring. | |||
| As in <xref target="RFC8279" format="default"/>, this BSL is purely used as an e | ||||
| <t>A BIER-TE BIFT compares to a BIER BIFT as shown in <xref target="RFC8279"/> a | xample and is not a BSL supported by BIER/BIER-TE | |||
| s | (minimum BSL is 64).</t> | |||
| <t>A BIER-TE BIFT is compared to a BIER BIFT as shown in <xref target="R | ||||
| FC8279" format="default"/> as | ||||
| follows.</t> | follows.</t> | |||
| <t>In both BIER and BIER-TE, BIFT rows/entries are indexed in their resp | ||||
| <t>In both BIER and BIER-TE, BIFT rows/entries are indexed in their respective B | ective BIER pseudocode | |||
| IER pseudocode | (<xref target="RFC8279" sectionFormat="comma" section="6.5"/>) and BIER-TE pseud | |||
| (<xref target="RFC8279"/> Section 6.5) and BIER-TE pseudocode (<xref target="pse | ocode (<xref target="pseudocode" format="default"/>) | |||
| udocode"/>) | by the BIFT-index derived from the packet's SI, BSL, and the one bit position of | |||
| by the BIFT-index derived from the packets SI, BSL and the one bit position of t | the | |||
| he | ||||
| packets BitString (BP) addressing the BIFT row: BIFT-index = SI * BSL + BP - 1. | packets BitString (BP) addressing the BIFT row: BIFT-index = SI * BSL + BP - 1. | |||
| BP within a BitString are numbered from 1 to BSL, hence the - 1 offset when conv | BPs within a BitString are numbered from 1 to BSL -- hence, the - 1 offset when | |||
| erting | converting | |||
| to a BIFT-index. This document also uses the notion SI:BP to indicate BIFT rows, | to a BIFT-index. This document also uses the notion "SI:BP" to indicate BIFT row | |||
| <xref target="RFC8279"/> uses the equivalent notion SI:BitString, where the BitS | s. | |||
| tring is | <xref target="RFC8279" format="default"/> uses the equivalent notion "SI:BitStri | |||
| filled with only the BP for the BIFT row.</t> | ng", where the BitString is | |||
| filled with only the BPs for the BIFT row.</t> | ||||
| <t>In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT-index + 1 | <t>In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT-inde | |||
| x + 1 | ||||
| and is populated on each BFR with the next-hop "BFR Neighbor" (BFR-NBR) towards that BFER.</t> | and is populated on each BFR with the next-hop "BFR Neighbor" (BFR-NBR) towards that BFER.</t> | |||
| <t>In BIER-TE, each BIFT-index and, therefore, SI:BP indicates one or, i | ||||
| n the case of reuse of SI:BP, more than one adjacency between BFRs in the topolo | ||||
| gy. The SI:BP | ||||
| is populated with the adjacency on the upstream BFR of the adjacency. The BIFT | ||||
| entries are empty on all other BFRs.</t> | ||||
| <t>In BIER, each BIFT row also requires a "Forwarding Bit Mask" (F-BM) e | ||||
| ntry | ||||
| for BIER forwarding rules. In BIER-TE forwarding, an F-BM is not required but ca | ||||
| n be used | ||||
| when implementing BIER-TE on forwarding hardware, derived from BIER forwarding, | ||||
| that | ||||
| must use an F-BM. This is discussed in the first variation of BIER-TE forwarding | ||||
| pseudocode shown in | ||||
| <xref target="pseudocode" format="default"/>.</t> | ||||
| <t>In BIER-TE, each BIFT-index and therefore SI:BP indicates one or more adjacen | <figure anchor="adjacencies"> | |||
| cies | <name>BIER-TE Bit Index Forwarding Table (BIFT) with Different Adjacencies</name | |||
| between BFRs in the topology and is only populated with those adjacencies forwa | > | |||
| rding | ||||
| entries on the BFR that is the upstream for these adjacencies. The BIFT entry ar | ||||
| e | ||||
| 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, F-BM is not required, but can | ||||
| be used | ||||
| when implementing BIER-TE on forwarding hardware derived from BIER forwarding, t | ||||
| hat | ||||
| must use F-BM. This is discussed in the first BIER-TE forwarding pseudocode in | ||||
| <xref target="pseudocode"/>.</t> | ||||
| <figure anchor="adjacencies" title="BIER-TE BIFT with different adjacencies"> | ||||
| <artwork align="left"><![CDATA[ | <artwork align="left"><![CDATA[ | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | BIFT-index | | Adjacencies: | | | BIFT-index | | Adjacencies: | | |||
| | (SI:BP) |(FBM)| <empty> or one or more per entry | | | (SI:BP) |(F-BM)| <empty> or one or more per entry | | |||
| ================================================================== | =================================================================== | |||
| | BIFT indices for Packets with SI=0 | | | BIFT indices for Packets with SI=0 | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 0 (0:1) | ... | forward_connected(interface,neighbor{,DNC}) | | | 0 (0:1) | ... | forward_connected(interface,neighbor{,DNC}) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 1 (0:2) | ... | forward_connected(interface,neighbor{,DNC}) | | | 1 (0:2) | ... | forward_connected(interface,neighbor{,DNC}) | | |||
| | | ... | forward_connected(interface,neighbor{,DNC}) | | | | ... | forward_connected(interface,neighbor{,DNC}) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | ... | ... | ... | | | ... | ... | ... | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 4 (0:5) | ... | local_decap({VRF}) | | | 4 (0:5) | ... | local_decap({VRF}) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 5 (0:6) | ... | forward_routed({VRF,}l3-neighbor) | | | 5 (0:6) | ... | forward_routed({VRF,}l3-neighbor) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 6 (0:7) | ... | <empty> | | | 6 (0:7) | ... | <empty> | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 7 (0:8) | ... | ECMP((adjacency1,...adjacencyN){,seed}) | | | 7 (0:8) | ... | ECMP((adjacency1,...adjacencyN){,seed}) | | |||
| ----------------------------------------------------------------- | ------------------------------------------------------------------- | |||
| | BIFT indices for BitString/Packet with SI=1 | | | BIFT indices for BitString/Packet with SI=1 | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| | 9 (1:1) | | ... | | | 9 (1:1) | | ... | | |||
| | ... |... | ... | | | ... | ... | ... | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| BIER-TE Bit Index Forwarding Table (BIFT) | ||||
| ]]></artwork></figure> | ]]></artwork></figure> | |||
| <t>The BIFT is configured for the BIER-TE data plane of a BFR by the BIE | ||||
| <t>The BIFT is configured for the BIER-TE data plane of a BFR by the BIER-TE | R-TE | |||
| Controller through an appropriate protocol and data-model. The BIFT is then | controller through an appropriate protocol and data model. The BIFT is then | |||
| used to forward packets, according to the rules | used to forward packets, according to the procedures for the BIER-TE forwarding | |||
| specified in the BIER-TE Forwarding Procedures.</t> | plane as specified in <xref target="forwarding-plane"/>.</t> | |||
| <t>Note that a BIFT-index (SI:BP) may be populated in the BIFT of more | ||||
| <t>Note that a BIFT index (SI:BP) may be populated in the BIFT of more | than one BFR to save BPs. See <xref target="rings" format="default"/> for an exa | |||
| than one BFR to save BPs. See <xref target="rings"/> for an example of how a BIE | mple of how a BIER-TE controller | |||
| R-TE controller | ||||
| could assign BPs to (logical) adjacencies shared across multiple BFRs, | could assign BPs to (logical) adjacencies shared across multiple BFRs, | |||
| <xref target="leaf-bfer"/> for an example of assigning the same BP to different | <xref target="leaf-bfer" format="default"/> for an example of assigning the same | |||
| adjacencies, and <xref target="reuse"/> for general guidelines regarding re-use | BP to different | |||
| of BPs across different adjacencies.</t> | adjacencies, and <xref target="reuse" format="default"/> for general guidelines | |||
| regarding the reuse of BPs across different adjacencies.</t> | ||||
| <t>{VRF} indicates the Virtual Routing and Forwarding context into which | <t>{VRF} indicates the Virtual Routing and Forwarding context into which | |||
| the BIER payload is to be delivered. This is optional and depends | the BIER payload is to be delivered. This is optional and depends | |||
| on the multicast flow overlay.</t> | on the multicast flow overlay.</t> | |||
| </section> | ||||
| </section> | <section anchor="atypes" numbered="true" toc="default"> | |||
| <!-- btft --> | <name>Adjacency Types</name> | |||
| <section anchor="forward-connected" numbered="true" toc="default"> | ||||
| <section anchor="atypes" title="Adjacency Types"> | <name>Forward Connected</name> | |||
| <t>A "forward_connected()" adjacency is an adjacency towards a directl | ||||
| <section anchor="forward-connected" title="Forward Connected"> | y connected | |||
| BFR-NBR using an interface address of that BFR on the connecting | ||||
| <t>A "forward_connected()" adjacency is towards a directly connected | interface. A forward_connected() adjacency does not route packets; | |||
| BFR neighbor using an interface address of that BFR on the connecting | only L2 forwards them to the neighbor.</t> | |||
| interface. A forward_connected() adjacency does not route packets | <t>Packets sent to an adjacency with "DoNotClear" (DNC) set in the | |||
| but only L2 forwards them to the neighbor.</t> | BIFT <bcp14>MUST NOT</bcp14> have the bit position for that adjacency cleared wh | |||
| en the | ||||
| <t>Packets sent to an adjacency with "DoNotClear" (DNC) set in the | ||||
| BIFT MUST NOT have the bit position for that adjacency cleared when the | ||||
| BFR creates a copy for it. The bit position will still be cleared for | BFR creates a copy for it. The bit position will still be cleared for | |||
| copies of the packet made towards other adjacencies. This can be | copies of a packet made towards other adjacencies. This can be | |||
| used for example in ring topologies as explained in <xref target="rings"/>.</t> | used, for example, in ring topologies as explained in <xref target="rings" forma | |||
| t="default"/>.</t> | ||||
| <t>For protection against loops from misconfiguration (see <xref target="loops"/ | <t>For protection against loops caused by misconfiguration (see <xref | |||
| >), | target="loops" format="default"/>), | |||
| DNC is only permissible for forward_connected() adjacencies. No need or benefit | DNC is only permissible for forward_connected() adjacencies. No need or benefit | |||
| of DNC for other type of adjacencies was identified and their risk was not analy | of DNC for other types of adjacencies was identified, and associated risks were | |||
| zed.</t> | not analyzed.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- forward-connected --> | ||||
| <section anchor="forward-routed" title="Forward Routed"> | ||||
| <t>A "forward_routed()" adjacency is an adjacency towards a BFR that | <section anchor="forward-routed" numbered="true" toc="default"> | |||
| uses a (tunneling) encapsulation which will cause the packet to be | <name>Forward Routed</name> | |||
| forwarded by the routing underlay toward the adjacent BFR. This can | <t>A "forward_routed()" adjacency is an adjacency towards a BFR that | |||
| uses a (tunneling) encapsulation that will cause a packet to be | ||||
| forwarded by the routing underlay towards the adjacent 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, | 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 identificatio n | as long as the BIER-TE packet can be identified as a payload. This identificatio n | |||
| can either rely on the BIER/BIER-TE co-existence mechanisms described in | can rely on either the BIER/BIER-TE co-existence mechanisms described in | |||
| <xref target="encapsulation"/>, or by explicit support for a BIER-TE payload typ | <xref target="encapsulation" format="default"/> or explicit support for a BIER-T | |||
| e | E payload type | |||
| in the tunneling encapsulation.</t> | in the tunneling encapsulation.</t> | |||
| <t>Forward_routed() adjacencies are necessary to pass BIER-TE traffic | ||||
| across | ||||
| routers that are not BIER-TE capable or to minimize the number of required BPs b | ||||
| y | ||||
| tunneling over (BIER-TE-capable) routers on which neither replication nor | ||||
| path steering is desired, or simply to leverage the routing underlay's path redu | ||||
| ndancy and FRR towards the next BFR. They may also be useful to a | ||||
| multi-subnet adjacent BFR for leveraging the routing underlay ECMP | ||||
| independently of BIER-TE ECMP (<xref target="forward-ecmp" format="default"/>).< | ||||
| /t> | ||||
| </section> | ||||
| <t>forward_routed() adjacencies are necessary to pass BIER-TE traffic across | <section anchor="forward-ecmp" numbered="true" toc="default"> | |||
| non BIER-TE capable routers or to minimize the number of required BP by | <name>ECMP</name> | |||
| tunneling over (BIER-TE capable) routers on which neither replication nor | <t>(Non-TE) BIER ECMP is tied to the BIER BIFT processing semantic and | |||
| path-steering is desired, or simply to leverage path redundancy and FRR of the | is therefore | |||
| routing underlay towards the next BFR. They may also be useful to a | ||||
| multi-subnet adjacent BFR to leverage the routing underlay ECMP | ||||
| independent of BIER-TE ECMP (<xref target="forward-ecmp"/>).</t> | ||||
| </section> | ||||
| <!-- forward-routed --> | ||||
| <section anchor="forward-ecmp" title="ECMP"> | ||||
| <t>(non-TE) BIER ECMP is tied to the BIER BIFT processing semantic and is theref | ||||
| ore | ||||
| not directly usable with BIER-TE.</t> | not directly usable with BIER-TE.</t> | |||
| <t>A BIER-TE "Equal-Cost Multipath" (ECMP()) adjacency as shown in <xr | ||||
| <t>A BIER-TE "Equal Cost Multipath" (ECMP()) adjacency as shown in <xref target= | ef target="adjacencies" format="default"/> | |||
| "adjacencies"/> | for BIFT-index 7 has a list of two or more non-ECMP() adjacencies as parameters | |||
| for BIFT-index 7 has a list of two or more non-ECMP adjacencies as parameters an | and an optional | |||
| d an optional | ||||
| seed parameter. When a BIER-TE packet is copied | seed parameter. When a BIER-TE packet is copied | |||
| onto such an ECMP() adjacency, an implementation specific so-called hash functio n | onto such an ECMP() adjacency, an implementation-specific so-called hash functio n | |||
| will select one out of the list's adjacencies to which the packet is forwarded. | 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 field SHOUL | If the packet's encapsulation contains an entropy field, the entropy field <bcp1 | |||
| D | 4>SHOULD</bcp14> | |||
| be respected; two packets with the same value of the entropy field SHOULD be sen | be respected; two packets with the same value of the entropy field <bcp14>SHOULD | |||
| t on | </bcp14> be sent on | |||
| the same adjacency. The seed parameter allows to design | the same adjacency. The seed parameter permits the design of | |||
| hash functions that are easy to implement at high speed without running into | hash functions that are easy to implement at high speed without running into | |||
| polarization issues across multiple consecutive ECMP hops. See <xref target="ecm | polarization issues across multiple consecutive ECMP hops. See <xref target="ecm | |||
| p"/> | p" format="default"/> | |||
| for more explanations.</t> | for details.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- forward-ecmp --> | ||||
| <section anchor="forward-local" title="Local Decap(sulation)"> | ||||
| <t>A "local_decap()" adjacency passes a copy of the payload of | <section anchor="forward-local" numbered="true" toc="default"> | |||
| the BIER-TE packet to the protocol ("NextProto") within the BFR (IPv4/IPv6, Ethe | <name>Local Decap(sulation)</name> | |||
| rnet,...) responsible for | <t>A "local_decap()" adjacency passes a copy of the payload of | |||
| the BIER-TE packet to the protocol ("NextProto") within the BFR (IP/IPv6, Ethern | ||||
| et,...) responsible for | ||||
| that payload according to the packet header fields. | that payload according to the packet header fields. | |||
| A local_decap() adjacency turns the BFR into a BFER for matching | A local_decap() adjacency turns the BFR into a BFER for matching | |||
| packets. Local_decap() adjacencies require the BFER to support | packets. Local_decap() adjacencies require the BFER to support | |||
| routing or switching for NextProto to determine how to further | routing or switching for NextProto to determine how to further | |||
| process the packet.</t> | process the packets.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- forward-local --> | ||||
| </section> | </section> | |||
| <!-- atypes --> | ||||
| <section anchor="encapsulation" title="Encapsulation / Co-existence with BIE | <section anchor="encapsulation" numbered="true" toc="default"> | |||
| R"> | <name>Encapsulation / Co-existence with BIER</name> | |||
| <t>Specifications for BIER-TE encapsulation are outside the scope of thi | ||||
| <t>Specifications for BIER-TE encapsulation are outside the scope of this docume | s document. | |||
| nt. | ||||
| This section gives explanations and guidelines.</t> | This section gives explanations and guidelines.</t> | |||
| <t>The handling of "Maximum Transmission Unit" (MTU) limitations is | ||||
| <t>Like <xref target="RFC8279"/>, handling of "Maximum Transmission Unit" (MTU) | outside the scope of this document and is not discussed in | |||
| limitations is outside the scope of this document and instead part of the | <xref target="RFC8279" format="default"/> either. Instead, this process is part | |||
| BIER-TE packet encapsulation and/or flow overlay. See for example <xref target=" | of the BIER-TE packet encapsulation and/or flow overlay; for example, see | |||
| RFC8296"/>, Section 3. | <xref target="RFC8296" sectionFormat="comma" section="3"/>. | |||
| It applies equally to BIER-TE as it does to BIER.</t> | It applies equally to BIER-TE and BIER.</t> | |||
| <t>Because a BFR needs to interpret the BitString of a BIER-TE packet di | ||||
| <t>Because a BFR needs to interpret the BitString of a BIER-TE packet differentl | fferently | |||
| y | from a (non-TE) BIER packet, it is necessary to distinguish BIER packets from BI | |||
| from a (non-TE) BIER packet, it is necessary to distinguish BIER from BIER-TE pa | ER-TE packets. | |||
| ckets. | In BIER encapsulation <xref target="RFC8296" format="default"/>, | |||
| In the BIER encapsulation <xref target="RFC8296"/>, | ||||
| the BIFT-id field of the packet indicates the BIFT of the packet. BIER and BIER- TE can | 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 | therefore be run simultaneously, when the BIFT-id address space is shared across | |||
| BIER BIFT and BIER-TE BIFT. Partitioning the BIFT-id address space is subject | BIER BIFTs and BIER-TE BIFTs. Partitioning the BIFT-id address space is subject | |||
| to BIER-TE/BIER control plane procedures.</t> | to BIER-TE/BIER control plane procedures.</t> | |||
| <t>When <xref target="RFC8296" format="default"/> is used for BIER with | ||||
| <t>When <xref target="RFC8296"/> is used for BIER with MPLS, BIFT-id address ran | MPLS, BIFT-id address ranges | |||
| ges | ||||
| can be dynamically allocated from MPLS label space only for the set of actually | can be dynamically allocated from MPLS label space only for the set of actually | |||
| used SD:BSL BIFT. This allows to also allocate non-overlapping label ranges for BIFT-id | used SD:BSL BIFTs. This also permits the allocation of non-overlapping label ra nges for BIFT-ids | |||
| that are to be used with BIER-TE BIFTs.</t> | that are to be used with BIER-TE BIFTs.</t> | |||
| <t>With MPLS, it is also possible to reuse the | ||||
| <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 | 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> | BIER BIFT with a corresponding range of BIFT-ids and disjoint BIER-TE BIFTs with a non-overlapping range of BIFT-ids.</t> | |||
| <t>Assume that a fixed mapping from BSL, SD, and SI to a BIFT-id is used | ||||
| <t>When a fixed mapping from BSL, SD and SI to BIFT-id is used which does | , | |||
| not explicitly partition the BIFT-id space between BIER and BIER-TE, | which does not explicitly partition the BIFT-id space between BIER | |||
| such as proposed for non-MPLS forwarding with <xref target="RFC8296"/> encapsula | and BIER-TE -- for example, as proposed for non-MPLS forwarding with | |||
| tion | BIER encapsulation <xref target="RFC8296" format="default"/> | |||
| in <xref target="I-D.ietf-bier-non-mpls-bift-encoding"/> | in <xref target="NON-MPLS-BIER-ENCODING" sectionFormat="comma" section="5"/>. | |||
| revision 04, section 5, then it is necessary to allocate disjoint SDs to BIER | In this case, it is necessary to allocate disjoint SDs to BIER and BIER-TE BIFTs | |||
| and BIER-TE BIFTs so that both can be addressed by the BIFT-ids. The encoding | so that both can be addressed by the BIFT-ids. The encoding | |||
| proposed in section 6. of the same document does not statically encode BSL | proposed in <xref target="NON-MPLS-BIER-ENCODING" sectionFormat="of" section="6" | |||
| or SD into the BIFT-id, but allows for a mapping, and hence could provide for | /> does not statically encode the BSL or SD into the BIFT-id, but the encoding | |||
| the same freedom as when MPLS is being used (same or different SD for BIER/BIER- | permits a mapping and hence could provide the same freedom as when | |||
| TE).</t> | MPLS is being used (the same SD, or different SDs for BIER/BIER-TE). | |||
| </t> | ||||
| <t>forward_routed() requires an encapsulation that permits to direct unicast enc | <t>Forward_routed() requires an encapsulation that permits directing uni | |||
| apsulated BIER-TE packets to a specific interface address on a target BFR. With | cast encapsulated BIER-TE packets to a specific interface address on a target BF | |||
| MPLS encapsulation, this can | R. With MPLS encapsulation, this can | |||
| simply be done via a label stack with that addresses label as the top label - fo | simply be done via a label stack with that address's label as the top label, fol | |||
| llowed | lowed | |||
| by the label assigned to the (BSL,SD,SI) BitString. | by the label assigned to the (BSL,SD,SI) BitString. | |||
| With non-MPLS encapsulation, some form of IP encapsulation would be required (fo r example IP/GRE). | With non-MPLS encapsulation, some form of IP encapsulation would be required (fo r example, IP/GRE). | |||
| </t> | </t> | |||
| <t>The encapsulation used for forward_routed() adjacencies can equally s | ||||
| upport | ||||
| existing advanced adjacency information such as "loose source routes" via, for e | ||||
| xample, MPLS | ||||
| label stacks or appropriate header extensions (e.g., for IPv6).</t> | ||||
| </section> | ||||
| <t>The encapsulation used for forward_routed() adjacencies can equally support | <section anchor="pseudocode" numbered="true" toc="default"> | |||
| existing advanced adjacency information such as "loose source routes" via e.g. M | <name>BIER-TE Forwarding Pseudocode</name> | |||
| PLS | <t> | |||
| label stacks or appropriate header extensions (e.g. for IPv6).</t> | The pseudocode for BIER-TE forwarding, as shown in <xref target="simple-pseudoco | |||
| de-picture" format="default"/>, is based | ||||
| </section> | on the (non-TE) BIER forwarding pseudocode provided in <xref target="RFC8279" se | |||
| <!-- encapsulation --> | ctionFormat="comma" section="6.5"/>, with one modification.</t> | |||
| <figure anchor="simple-pseudocode-picture"> | ||||
| <section anchor="pseudocode" title="BIER-TE Forwarding Pseudocode"> | <name>BIER-TE Forwarding Pseudocode for Required Functions, Based on B | |||
| IER Pseudocode</name> | ||||
| <t> | <sourcecode name="" type="pseudocode"><![CDATA[ | |||
| The following pseudocode, <xref target="simple-pseudocode-picture"/>, for BIER-T | ||||
| E forwarding is based | ||||
| on the (non-TE) BIER forwarding pseudocode of <xref target="RFC8279"/>, section | ||||
| 6.5 with one modification.</t> | ||||
| <figure anchor="simple-pseudocode-picture" title="BIER-TE Forwarding Pseudocode | ||||
| for required functions, based on BIER Pseudocode"> | ||||
| <artwork align="left"><![CDATA[ | ||||
| void ForwardBitMaskPacket_withTE (Packet) | void ForwardBitMaskPacket_withTE (Packet) | |||
| { | { | |||
| SI=GetPacketSI(Packet); | SI=GetPacketSI(Packet); | |||
| Offset=SI*BitStringLength; | Offset=SI*BitStringLength; | |||
| for (Index = GetFirstBitPosition(Packet->BitString); Index ; | for (Index = GetFirstBitPosition(Packet->BitString); Index ; | |||
| Index = GetNextBitPosition(Packet->BitString, Index)) { | Index = GetNextBitPosition(Packet->BitString, Index)) { | |||
| F-BM = BIFT[Index+Offset]->F-BM; | F-BM = BIFT[Index+Offset]->F-BM; | |||
| if (!F-BM) continue; [3] | if (!F-BM) continue; [3] | |||
| BFR-NBR = BIFT[Index+Offset]->BFR-NBR; | BFR-NBR = BIFT[Index+Offset]->BFR-NBR; | |||
| PacketCopy = Copy(Packet); | PacketCopy = Copy(Packet); | |||
| PacketCopy->BitString &= F-BM; [2] | PacketCopy->BitString &= F-BM; [2] | |||
| PacketSend(PacketCopy, BFR-NBR); | PacketSend(PacketCopy, BFR-NBR); | |||
| // The following must not be done for BIER-TE: | // The following must not be done for BIER-TE: | |||
| // Packet->BitString &= ~F-BM; [1] | // Packet->BitString &= ~F-BM; [1] | |||
| } | } | |||
| } | } | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| </figure> | ||||
| <t>In step [2], the F-BM is used to clear bit(s) in PacketCopy. | <t>In step [2], the F-BM is used to clear one or more bits in PacketCopy | |||
| . | ||||
| This step exists in both BIER and BIER-TE, but the F-BMs need to be | 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> | 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. | ||||
| <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, | When a received packets BitString has more than one of those bits set, | |||
| the BIER replication logic has to avoid that more than one PacketCopy is | BIER's replication logic has to prevent more than one PacketCopy from being | |||
| sent to that BFR-NBR ([1]). Likewise, the PacketCopy sent to a BFR-NBR | 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 BFR-NBR. | must clear all bits in its BitString that are not routed across a BFR-NBR. | |||
| This protects against BIER replication on any possible further | This prevents BIER's replication logic from creating duplicates on any possible | |||
| BFR to create duplicates ([2]).</t> | further BFRs ([2]).</t> | |||
| <t>To solve both [1] and [2] for BIER, the F-BM of each bit index needs | ||||
| <t>To solve both [1] and [2] for BIER, the F-BM of each bit index needs to have | to have all | |||
| all | bits set that this BFR wants to route across a BFR-NBR. [2] clears | |||
| bits set that this BFR wants to route across BFR-NBR. [2] clears | all other bits in PacketCopy->BitString, and [1] clears those bits from | |||
| all other bits in PacketCopy->BitString, and [1] clears those bits from | Packet->BitString after the first PacketCopy.</t> | |||
| Packet->BitString after the first PacketCopy.</t> | <t>In BIER-TE, a BFR-NBR in this pseudocode is an adjacency -- forward_c | |||
| onnected(), forward_routed(), | ||||
| <t>In BIER-TE, a BFR-NBR in this pseudocode is an adjacency, forward_connected() | or local_decap(). There is no need for [2] to suppress duplicates in the same wa | |||
| , forward_routed() | y | |||
| or local_decap(). There is no need for [2] to suppress duplicates in the way | that BIER does, because in general, different BPs would never have the same | |||
| BIER does because in general, different BP would never have the same | ||||
| adjacency. If a BIER-TE controller actually finds some optimization in | adjacency. If a BIER-TE controller actually finds some optimization in | |||
| which this would be desirable, then the controller is also responsible to | which this would be desirable, then the controller is also responsible for | |||
| ensure that only one of those bits is set in any Packet->BitString, unless | ensuring that only one of those bits is set in any Packet->BitString, unless | |||
| the controller explicitly wants for duplicates to be created.</t> | the controller explicitly wants duplicates to be created.</t> | |||
| <t>The following points describe how the F-BM for each BP is configured | ||||
| <t>The following points describe how the forwarding bit mask (F-BM) for each BP | in the BIFT and how this impacts the BitString of the packet being processed wit | |||
| is configured in the BIFT and how this impacts the BitString of the packet being | h that BIFT: | |||
| processed with that BIFT: | </t> | |||
| <list style="numbers"> | <ol spacing="normal" type="1"><li>The F-BMs of all BIFT BPs without an a | |||
| <t>The F-BMs of all BIFT BPs without an adjacency have all their bits clear. | djacency have all their bits clear. | |||
| This will cause [3] to skip further processing of such a BP.</t> | This will cause [3] to skip further processing of such a BP.</li> | |||
| <t>All BIFT BPs with an adjacency (with DNC flag clear) have an F-BM | <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. | that has only those BPs set for which this BFR does not have an adjacency. | |||
| This causes [2] to clear all bits from PacketCopy->BitString for which this | This causes [2] to clear all bits from PacketCopy->BitString for which this | |||
| BFR does have an adjacency.</t> | BFR does have an adjacency.</li> | |||
| <t>[1] is not performed for BIER-TE. All bit clearing required by BIER-TE | <li>[1] is not performed for BIER-TE. All bit clearing required by BIE | |||
| is performed by [2].</t> | R-TE | |||
| </list></t> | is performed by [2].</li> | |||
| </ol> | ||||
| <t>This Forwarding Pseudocode can support the required BIER-TE forwarding | <t>This forwarding pseudocode can support the required BIER-TE forwardin | |||
| functions (see <xref target="requirements"/>), forward_connected(), | g | |||
| forward_routed() and local_decap(), but not the recommended functions DNC flag | functions (see <xref target="requirements" format="default"/>) -- forward_connec | |||
| and multiple adjacencies per bit nor the optional function, ECMP() adjacencies. | ted(), | |||
| forward_routed(), and local_decap() -- but cannot support the recommended functi | ||||
| ons (DNC flag and multiple adjacencies per bit) or the optional function (i.e., | ||||
| ECMP() adjacencies). | ||||
| The DNC flag cannot be supported when using only [1] to mask bits.</t> | The DNC flag cannot be supported when using only [1] to mask bits.</t> | |||
| <t>The modified and expanded forwarding pseudocode in <xref target="pseu | ||||
| <t>The modified and expanded Forwarding Pseudocode in <xref target="pseudocode-p | docode-picture" format="default"/> specifies how to | |||
| icture"/> specifies how to | support all BIER-TE forwarding functions (required, recommended, and optional): | |||
| support all BIER-TE forwarding functions (required, recommended and optional): | </t> | |||
| <list style="symbols"> | <ol spacing="normal"> | |||
| <t>This pseudocode eliminates per-bit F-BM, therefore reducing the size of B | <li> | |||
| IFT state by BSL^2*SI and eliminating the need for per-packet-copy BitString mas | <t>This pseudocode eliminates per-bit F-BMs, therefore reducing the | |||
| king operations except for adjacencies with the DNC flag set: | size of BIFT state by SI*BSL<sup>2</sup> and eliminating the need for per-packet | |||
| <list style="symbols"> | -copy BitString masking operations, except for adjacencies with the DNC flag set | |||
| <t>AdjacentBits[SI] are bit positions with a non-empty list of adjacenci | : | |||
| es in this BFR BIFT. This can be computed whenever the BIER-TE Controller update | </t> | |||
| s (add/removes) adjacencies in the BIFT.</t> | <ol spacing="normal" type="%p%c"> | |||
| <t>The BFR needs to create packet copies for these adjacent bits when th | <li>AdjacentBits[SI] are bit positions with a non-empty list of ad | |||
| ey are set in the packets BitString. This set of bits is calculated in PktAdjace | jacencies in this BFR BIFT. This can be computed whenever the BIER-TE controller | |||
| ntBits.</t> | updates (adds/removes) adjacencies in the BIFT.</li> | |||
| <t>All bit positions to which the BFR creates copies have to be cleared | <li>The BFR needs to create packet copies for these adjacent bits | |||
| in packet copies to avoid loops. This is done by masking the BitString of the pa | when they are set in the packets BitString. This set of bits is calculated in Pk | |||
| cket with ~AdjacentBits[SI]. When an adjacency has DNC set, this bit position is | tAdjacentBits.</li> | |||
| set again only for the packet copy towards that bit position.</t> | <li>All bit positions for which the BFR creates copies have to be | |||
| </list></t> | cleared in packet copies to avoid loops. This is done by masking the BitString o | |||
| <t>BIFT entries may contain more than one adjacency in support of specific c | f the packet with ~AdjacentBits[SI]. When an adjacency has DNC set, this bit pos | |||
| onfigurations such as <xref target="hubnspoke"/>. The code therefore includes a | ition is set again only for the packet copy towards that bit position.</li> | |||
| loop over these adjacencies.</t> | </ol> | |||
| <t>The ECMP() adjacency is shown. Its parameters are a seed and a ListOfAdja | </li> | |||
| cencies from which one is picked.</t> | <li>BIFT entries may contain more than one adjacency in support of spe | |||
| <t>The forward_connected(), forward_routed(), local_decap() adjacencies are | cific configurations, such as a hub and multiple spokes (<xref target="hubnspoke | |||
| shown with their parameters.</t> | " format="default"/>). The code therefore includes a loop over these adjacencies | |||
| </list></t> | .</li> | |||
| <li>The ECMP() adjacency is also shown in the figure. Its parameters a | ||||
| <figure anchor="pseudocode-picture" title="Complete BIER-TE Forwarding Pseudocod | re a seed and "ListOfAdjacencies", from which one is picked.</li> | |||
| e for required, recommended and optional functions"> | <li>The forward_connected(), forward_routed(), and local_decap() adjac | |||
| <artwork align="left"><![CDATA[ | encies are shown with their parameters.</li> | |||
| </ol> | ||||
| <figure anchor="pseudocode-picture"> | ||||
| <name>Complete BIER-TE Forwarding Pseudocode for Required, Recommended | ||||
| , and Optional Functions</name> | ||||
| <sourcecode name="" type="pseudocode"><![CDATA[ | ||||
| void ForwardBitMaskPacket_withTE (Packet) | void ForwardBitMaskPacket_withTE (Packet) | |||
| { | { | |||
| SI = GetPacketSI(Packet); | SI = GetPacketSI(Packet); | |||
| Offset = SI * BitStringLength; | Offset = SI * BitStringLength; | |||
| // Determine adjacent bits in the Packets BitString | // Determine adjacent bits in the packets BitString | |||
| PktAdjacentBits = Packet->BitString & AdjacentBits[SI]; | PktAdjacentBits = Packet->BitString & AdjacentBits[SI]; | |||
| // Clear adjacent bits in Packet header to avoid loops | // Clear adjacent bits in the packet header to avoid loops | |||
| Packet->BitString &= ~AdjacentBits[SI]; | Packet->BitString &= ~AdjacentBits[SI]; | |||
| // Loop over PktAdjacentBits to create packet copies | // Loop over PktAdjacentBits to create packet copies | |||
| for (Index = GetFirstBitPosition(PktAdjacentBits); Index ; | for (Index = GetFirstBitPosition(PktAdjacentBits); Index ; | |||
| Index = GetNextBitPosition(PktAdjacentBits, Index)) { | Index = GetNextBitPosition(PktAdjacentBits, Index)) { | |||
| for adjacency in BIFT[Index+Offset]->Adjacencies { | for adjacency in BIFT[Index+Offset]->Adjacencies { | |||
| if(adjacency.type == ECMP(ListOfAdjacencies,seed) ) { | if(adjacency.type == ECMP(ListOfAdjacencies,seed) ) { | |||
| I = ECMP_hash(sizeof(ListOfAdjacencies), | I = ECMP_hash(sizeof(ListOfAdjacencies), | |||
| Packet->Entropy,seed); | Packet->Entropy,seed); | |||
| adjacency = ListOfAdjacencies[I]; | adjacency = ListOfAdjacencies[I]; | |||
| skipping to change at line 1074 ¶ | skipping to change at line 902 ¶ | |||
| case forward_routed({VRF,}l3-neighbor): | case forward_routed({VRF,}l3-neighbor): | |||
| SendToL3(PacketCopy,{VRF,}l3-neighbor); | SendToL3(PacketCopy,{VRF,}l3-neighbor); | |||
| case local_decap({VRF},neighbor): | case local_decap({VRF},neighbor): | |||
| DecapBierHeader(PacketCopy); | DecapBierHeader(PacketCopy); | |||
| PassTo(PacketCopy,{VRF,}Packet->NextProto); | PassTo(PacketCopy,{VRF,}Packet->NextProto); | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| ]]></artwork></figure> | ]]></sourcecode> | |||
| </figure> | ||||
| </section> | </section> | |||
| <!-- pseudocode --> | ||||
| <section anchor="requirements" title="BFR Requirements for BIER-TE forwarding"> | ||||
| <t>BFR that support BIER-TE and BIER MUST support configuration that enables | ||||
| BIER-TE instead of (non-TE) BIER forwarding rules for all BIFT of one or more | ||||
| BIER sub-domains. Every BP in a BIER-TE BIFT MUST support to have | ||||
| zero or one adjacency. BIER-TE forwarding MUST support the adjacency types forwa | ||||
| rd_connected() with the DNC flag not set, forward_routed() and local_decap(). | ||||
| As explained in <xref target="pseudocode"/>, these required BIER-TE forwarding f | ||||
| unctions | ||||
| can be implemented via the same Forwarding Pseudocode as BIER forwarding except | ||||
| for | ||||
| one modification (skipping one masking with F-BM).</t> | ||||
| <t>BIER-TE forwarding SHOULD support forward_connected() adjacencies with a set | ||||
| DNC flag, | ||||
| as this is highly useful to save bits in rings (see <xref target="rings"/>).</t> | ||||
| <t>BIER-TE forwarding SHOULD support more than one adjacency on a bit. | ||||
| This allows to save bits in hub and spoke scenarios (see <xref target="hubnspoke | ||||
| "/>).</t> | ||||
| <t>BIER-TE forwarding MAY support ECMP() adjacencies to save bits in ECMP | <section anchor="requirements" numbered="true" toc="default"> | |||
| scenarios, see <xref target="ecmp"/> for an example. | <name>BFR Requirements for BIER-TE Forwarding</name> | |||
| <t>BFRs that support BIER-TE and BIER <bcp14>MUST</bcp14> support a conf | ||||
| iguration that enables | ||||
| BIER-TE instead of (non-TE) BIER forwarding rules for all BIFTs of one or more | ||||
| BIER subdomains. Every BP in a BIER-TE BIFT <bcp14>MUST</bcp14> support having | ||||
| zero or one adjacency. BIER-TE forwarding <bcp14>MUST</bcp14> support the adjace | ||||
| ncy types forward_connected() with the DNC flag not set, forward_routed(), and l | ||||
| ocal_decap(). | ||||
| As explained in <xref target="pseudocode" format="default"/>, these required BIE | ||||
| R-TE forwarding functions | ||||
| can be implemented via the same forwarding pseudocode as that used for BIER forw | ||||
| arding, except for | ||||
| one modification (skipping one masking with an F-BM).</t> | ||||
| <t>BIER-TE forwarding <bcp14>SHOULD</bcp14> support forward_connected() | ||||
| adjacencies with the DNC flag set, | ||||
| as this is very useful for saving bits in rings (see <xref target="rings" format | ||||
| ="default"/>).</t> | ||||
| <t>BIER-TE forwarding <bcp14>SHOULD</bcp14> support more than one adjace | ||||
| ncy on a bit. | ||||
| This allows bits to be saved in hub-and-spoke scenarios (see <xref target="hubns | ||||
| poke" format="default"/>).</t> | ||||
| <t>BIER-TE forwarding <bcp14>MAY</bcp14> support ECMP() adjacencies to s | ||||
| ave bits in ECMP | ||||
| scenarios; see <xref target="ecmp" format="default"/> for an example. | ||||
| This is an optional requirement, because for ECMP deployments using BIER-TE | This is an optional requirement, because for ECMP deployments using BIER-TE | |||
| one can also leverage ECMP of the routing underlay via forwarded_routed | one can also leverage the routing underlay ECMP via forward_routed() | |||
| adjacencies and/or might prefer to have more explicit control of the path | adjacencies and/or might prefer to have more explicit control of the path | |||
| chosen via explicit BP/adjacencies for each ECMP path alternative.</t> | chosen via explicit BPs/adjacencies for each ECMP path alternative.</t> | |||
| </section> | ||||
| </section> | </section> | |||
| </section> | <section anchor="controller-ops" numbered="true" toc="default"> | |||
| <!-- forwarding --> | <name>BIER-TE Controller Operational Considerations</name> | |||
| <section anchor="bitpositions" numbered="true" toc="default"> | ||||
| <section anchor="controller-ops" title="BIER-TE Controller Operational Considera | <name>Bit Position Assignments</name> | |||
| tions"> | <t>This section describes how the BIER-TE controller can use the | |||
| <section anchor="bitpositions" title="Bit Position Assignments"> | ||||
| <t>This section describes how the BIER-TE Controller can use the | ||||
| different BIER-TE adjacency types to define the bit positions of a BIER-TE domai n.</t> | different BIER-TE adjacency types to define the bit positions of a BIER-TE domai n.</t> | |||
| <t>Because the size of the BitString limits the size of the | ||||
| <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 | |||
| BIER-TE domain, many of the options described exist to support larger | ||||
| topologies with fewer bit positions.</t> | topologies with fewer bit positions.</t> | |||
| <section anchor="p2p-links" numbered="true" toc="default"> | ||||
| <section anchor="p2p-links" title="P2P Links"> | <name>P2P Links</name> | |||
| <t>On a "point-to-point" (P2P) link that connects two BFRs, the same b | ||||
| <t>On a P2P link that connects two BFRs, the same bit position can be used on | it position can be used on | |||
| both BFRs for the adjacency to the neighboring BFR. A P2P link requires therefor | both BFRs for the adjacency to the neighboring BFR. A P2P link therefore require | |||
| e | s | |||
| only one bit position.</t> | only one bit position.</t> | |||
| </section> | ||||
| </section> | <section anchor="bfer" numbered="true" toc="default"> | |||
| <!-- p2p-links --> | <name>BFERs</name> | |||
| <t>Every non-leaf BFER is given a unique bit position with a local_dec | ||||
| <section anchor="bfer" title="BFER"> | ap() adjacency.</t> | |||
| </section> | ||||
| <t>Every non-Leaf BFER is given a unique bit position with a local_decap() adjac | ||||
| ency.</t> | ||||
| </section> | ||||
| <!-- bfer --> | ||||
| <section anchor="leaf-bfer" title="Leaf BFERs"> | ||||
| <figure anchor="leaf-bfer-picture" title="Leaf vs. non-Leaf BFER Example"> | <section anchor="leaf-bfer" numbered="true" toc="default"> | |||
| <artwork align="left"><![CDATA[ | <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 where "Provider Edge" (PE) | ||||
| routers | ||||
| are spokes connected to Provider (P) routers, those PEs are leaf BFERs, unless | ||||
| there is a U-turn between two PEs.</t> | ||||
| <t>Consider how redundant disjoint | ||||
| traffic can reach BFER1/BFER2 as shown in <xref target="leaf-bfer-picture" forma | ||||
| t="default"/>: when BFER1/BFER2 | ||||
| are non-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 a non-leaf | ||||
| BFER. Likewise, BFER1 is a non-leaf BFER when forwarding traffic to BFER2. | ||||
| Note that the BFERs on the left-hand side of the figure are only guaranteed to | ||||
| be leaf BFERs by correctly applying a routing configuration that prohibits trans | ||||
| it | ||||
| traffic from 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) | BFR1(P) BFR2(P) BFR1(P) BFR2(P) | |||
| | \ / | | | | | \ / | | | | |||
| | X | | | | | X | | | | |||
| | / \ | | | | | / \ | | | | |||
| BFER1(PE) BFER2(PE) BFER1(PE)----BFER2(PE) | BFER1(PE) BFER2(PE) BFER1(PE)----BFER2(PE) | |||
| ^ U-turn link | ^ U-turn link | |||
| Leaf BFER / Non-Leaf BFER / | Leaf BFER / Non-leaf BFER / | |||
| PE-router PE-router | PE router PE router | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>A leaf BFER is one where incoming BIER-TE packets never need to | <t>In most situations, leaf BFERs that are to be addressed via the sam | |||
| be forwarded to another BFR but are only sent to the BFER | e BitString can share a single bit position for their local_decap() adjacency in | |||
| to exit the BIER-TE domain. For example, in networks where Provider Edge (PE) ro | that BitString and therefore save bit positions. On a non-leaf BFER, a received | |||
| uter | BIER-TE packet may only need to transit the BFER, or it may also need to be dec | |||
| are spokes connected to Provider (P) routers, those PEs are Leaf BFERs unless | apsulated. Whether or not to decapsulate the packet therefore needs to be indica | |||
| there is a U-turn between two PEs.</t> | ted by a unique bit position populated only on the BIFT of this BFER with a loca | |||
| l_decap() adjacency. On a leaf BFER, packets never need to pass through; any pac | ||||
| <t>Consider how redundant disjoint | ket received is therefore usually intended to be decapsulated. This can be expre | |||
| traffic can reach BFER1/BFER2 in <xref target="leaf-bfer-picture"/>: When BFER1/ | ssed by a single, shared bit position that is populated with a local_decap() adj | |||
| BFER2 | acency on all leaf BFERs addressed by the BitString.</t> | |||
| are Non-Leaf BFER as shown on the right-hand side, one traffic | <t>The possible exceptions to this leaf BFER bit position optimization | |||
| copy would be forwarded to BFER1 from BFR1, but the other one | scenario can be cases where the bit position on the prior BIER-TE BFR (which cr | |||
| could only reach BFER1 via BFER2, which makes BFER2 a non-Leaf | eated the packet copy for the leaf BFER in question) is populated with multiple | |||
| BFER. Likewise, BFER1 is a non-Leaf BFER when forwarding traffic to BFER2. | adjacencies as an optimization -- for example, as described in Sections <xr | |||
| Note that the BFERs in the left-hand picture are only guaranteed to | ef target="lans" format="counter"/> and <xref target="hubnspoke" format="counter | |||
| be leaf-BFER by fitting routing configuration that prohibits transit | "/>. With either of these two optimizations, the sender of the packet could only | |||
| traffic to pass through the BFERs, which is commonly applied in these | control explicitly whether the packet was to be decapsulated on the leaf BFER i | |||
| topologies.</t> | n question, if the leaf BFER has a unique bit position for its local_decap() adj | |||
| acency.</t> | ||||
| <t>In most situations, leaf-BFER that are to be addressed via the same BitString | <t>However, if the bit position is shared across a leaf BFER and packe | |||
| can share a single bit position for their local_decap() adjacency in that BitSt | ts are therefore decapsulated -- potentially unnecessarily -- this may still be | |||
| ring and therefore save bit positions. On a non-leaf BFER, a received BIER-TE pa | appropriate if the decapsulated payload of the BIER-TE packet indicates whether | |||
| cket may only need to transit the BFER or it may need to also be decapsulated. W | or not the packets need to be further processed/received. This is typically true | |||
| hether or not to decapsulate the packet therefore needs to be indicated by a uni | , for example, if the payload is IP multicast, because IP multicast on a BFER wo | |||
| que bit position populated only on the BIFT of this BFER with a local_decap() ad | uld know the membership state of the IP multicast payload and be able to discard | |||
| jacency. On a leaf-BFER, packets never need to pass through; any packet received | it if the packets were delivered unnecessarily by the BIER-TE layer. If the pay | |||
| is therefore usually intended to be decapsulated. This can be expressed by a si | load has no such membership indication and the BFIR wants to have explicit contr | |||
| ngle, shared bit position that is populated with a local_decap() adjacency on al | ol regarding which BFERs are to receive and decapsulate a packet, then these two | |||
| l leaf-BFER addressed by the BitString.</t> | optimizations cannot be used together with shared bit position optimization for | |||
| a leaf BFER.</t> | ||||
| <t>The possible exception from this leaf-BFER bit position optimization can be c | </section> | |||
| ases where the bit position on the prior BIER-TE BFR (which created the packet c | ||||
| opy for the leaf-BFER in question) is populated with multiple adjacencies as an | ||||
| optimization, such as in <xref target="lans"/> or <xref target="hubnspoke"/>. Wi | ||||
| th either of these two optimizations, the sender of the packet could only contro | ||||
| l explicitly whether the packet was to be decapsulated on the leaf-BFER in quest | ||||
| ion, if the leaf-BFER has a unique bit position for its local_decap() adjacency. | ||||
| </t> | ||||
| <t>However, if the bit position is shared across leaf-BFER, and packets are ther | ||||
| efore decapsulated potentially unnecessarily, this may still be appropriate if t | ||||
| he decapsulated payload of the BIER-TE packet indicates whether or not the packe | ||||
| t needs to be further processed/received. This is typically true for example if | ||||
| the payload is IP multicast because IP multicast on a BFER would know the member | ||||
| ship state of the IP multicast payload and be able to discard it if the packet w | ||||
| as delivered unnecessarily by the BIER-TE layer. If the payload has no such memb | ||||
| ership indication, and the BFIR wants to have explicit control about which BFER | ||||
| are to receive and decapsulate a packet, then these two optimizations can not be | ||||
| used together with shared bit positions optimization for leaf-BFER.</t> | ||||
| </section> | ||||
| <!-- leaf-bfer --> | ||||
| <section anchor="lans" title="LANs"> | ||||
| <t>In a LAN, the adjacency to each neighboring BFR | <section anchor="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 given a unique bit position. The adjacency of this bit position | |||
| is a forward_connected() adjacency towards the BFR and this bit position | is a forward_connected() adjacency towards the BFR, and this bit position | |||
| is populated into the BIFT of all the other BFRs on that LAN.</t> | is populated into the BIFT of all the other BFRs on that LAN.</t> | |||
| <figure anchor="lan-picture"> | ||||
| <figure anchor="lan-picture" title="LAN Example"> | <name>LAN Example</name> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| BFR1 | BFR1 | |||
| |p1 | |p1 | |||
| LAN1-+-+---+-----+ | LAN1-+-+---+-----+ | |||
| p3| p4| p2| | p3| p4| p2| | |||
| BFR3 BFR4 BFR7 | BFR3 BFR4 BFR7 | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>If Bandwidth on the LAN is not an issue and most BIER-TE traffic | <t>If bandwidth on the LAN is not an issue and most BIER-TE traffic | |||
| should be copied to all neighbors on a LAN, then bit positions | 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 | can be saved by assigning just a single bit position to the LAN | |||
| and populating the bit position of the BIFTs of each BFRs on | and populating the bit position of the BIFTs of each BFR on | |||
| the LAN with a list of forward_connected() adjacencies to all other | the LAN with a list of forward_connected() adjacencies to all other | |||
| neighbors on the LAN.</t> | neighbors on the LAN.</t> | |||
| <t>This optimization does not work in the case of BFRs redundantly | ||||
| connected to more than one LAN with this optimization. These | ||||
| BFRs would receive duplicates and forward those duplicates into the | ||||
| other LANs. Such BFRs require separate bit positions for each LAN they | ||||
| connect to.</t> | ||||
| </section> | ||||
| <t>This optimization does not work in the case of BFRs redundantly | <section anchor="hubnspoke" numbered="true" toc="default"> | |||
| connected to more than one LAN with this optimization because | <name>Hub and Spoke</name> | |||
| these BFRs would receive duplicates and forward those duplicates into | <t>In a setup with a hub and multiple spokes connected via separate | |||
| the opposite LANs. Adjacencies of such BFRs into their LAN still | P2P links to the hub, all P2P adjacencies from the hub to the spokes' links can | |||
| need a separate bit position.</t> | share the same bit position. | |||
| The bit position on the hub's BIFT is set up with a list of | ||||
| </section> | forward_connected() adjacencies, one for each spoke.</t> | |||
| <!-- lans --> | <t>This option is similar to the bit position optimization in | |||
| LANs: redundantly connected spokes need their own bit positions, | ||||
| <section anchor="hubnspoke" title="Hub and Spoke"> | unless they are themselves leaf BFERs.</t> | |||
| <t>This type of optimized BP could be used, for example, when all | ||||
| <t>In a setup with a hub and multiple spokes connected via separate | traffic is "broadcast" traffic (very dense receiver sets), | |||
| p2p links to the hub, all p2p adjacencies from the hub to the spokes links can s | such as live TV or many-to-many telemetry, including situational awareness. | |||
| hare the same bit position. | ||||
| The bit position on the hub's BIFT is set up with a list of | ||||
| forward_connected() adjacencies, one for each Spoke.</t> | ||||
| <t>This option is similar to the bit position optimization in | ||||
| LANs: Redundantly connected spokes need their own bit positions, | ||||
| unless they are themselves Leaf-BFER.</t> | ||||
| <t>This type of optimized BP could be used for example when all | ||||
| traffic is "broadcast" traffic (very dense receiver set) | ||||
| such as live-TV or many-to-many telemetry including situation-awareness (SA). | ||||
| This BP optimization can then be used to explicitly steer different traffic | This BP optimization can then be used to explicitly steer different traffic | |||
| flows across different ECMP paths in Data-Center or broadband-aggregation | flows across different ECMP paths in data-center or broadband-aggregation | |||
| networks with minimal use of BPs.</t> | networks with minimal use of BPs.</t> | |||
| </section> | ||||
| </section> | <section anchor="rings" numbered="true" toc="default"> | |||
| <!-- hubnspoke --> | <name>Rings</name> | |||
| <t>In L3 rings, instead of assigning a single bit position for | ||||
| <section anchor="rings" title="Rings"> | every P2P link in the ring, it is possible to save bit positions by | |||
| <t>In L3 rings, instead of assigning a single bit position for | ||||
| every p2p link in the ring, it is possible to save bit positions by | ||||
| setting the "DoNotClear" (DNC) flag on forward_connected() adjacencies.</t> | setting the "DoNotClear" (DNC) flag on forward_connected() adjacencies.</t> | |||
| <t>For the ring shown in <xref target="ring-picture" format="default"/ | ||||
| <t>For the rings shown in <xref target="ring-picture"/>, a single bit position | >, a single bit position | |||
| will suffice to forward traffic entering the ring at BFRa or BFRb | will suffice to forward traffic entering the ring at BFRa or BFRb | |||
| all the way up to BFR1:</t> | all the way up to BFR1, as follows.</t> | |||
| <t>On BFRa, BFRb, BFR30,... BFR3, the bit position is populated with | ||||
| <t>On BFRa, BFRb, BFR30,... BFR3, the bit position is populated with | ||||
| a forward_connected() adjacency pointing to the clockwise neighbor | a forward_connected() adjacency pointing to the clockwise neighbor | |||
| on the ring and with DNC set. On BFR2, the adjacency also points | on the ring and with DNC set. On BFR2, the adjacency also points | |||
| to the clockwise neighbor BFR1, but without DNC set.</t> | to the clockwise neighbor BFR1, but without DNC set.</t> | |||
| <t>Handling DNC this way ensures that copies forwarded from any BFRs i | ||||
| <t>Handling DNC this way ensures that copies forwarded from any BFR in | n | |||
| the ring to a BFR outside the ring will not have the ring bit position set, | the ring to a BFR outside the ring will not have the ring bit position set, | |||
| therefore minimizing the chance to create loops.</t> | therefore minimizing the risk of creating loops.</t> | |||
| <figure anchor="ring-picture"> | ||||
| <figure anchor="ring-picture" title="Ring Example"> | <name>Ring Example</name> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| v v | v v | |||
| | | | | | | |||
| L1 | L2 | L3 | L1 | L2 | L3 | |||
| /-------- BFRa ---- BFRb --------------------\ | /-------- BFRa ---- BFRb --------------------\ | |||
| | | | | | | |||
| \- BFR1 - BFR2 - BFR3 - ... - BFR29 - BFR30 -/ | \- BFR1 - BFR2 - BFR3 - ... - BFR29 - BFR30 -/ | |||
| | | L4 | | | | | L4 | | | |||
| p33| p15| | p33| p15| | |||
| BFRd BFRc | BFRd BFRc | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>Note that this example only permits for packets intended to make it all | <t>Note that this example only permits packets intended to make it all | |||
| the way around the ring to enter it at | the way around the ring to enter it at | |||
| BFRa and BFRb, and that packets will always travel clockwise. If | BFRa and BFRb. Note also that packets will always travel clockwise. If | |||
| packets should be allowed to enter the ring at any ring BFR, then one | packets should be allowed to enter the ring at any of the ring's BFRs, then one | |||
| would have to use two ring bit positions. One for each direction: | would have to use two ring bit positions, one for each direction: | |||
| clockwise and counterclockwise.</t> | clockwise and counterclockwise.</t> | |||
| <t>Both would be set up to stop rotating on the same link, e.g., L1. W | ||||
| <t>Both would be set up to stop rotating on the same link, e.g. L1. When the | hen the | |||
| ingress ring BFR creates the clockwise copy, it will clear the counterclockwise | ring'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 | bit position because the DNC bit only applies to the bit for which the | |||
| replication is done. Likewise for the clockwise | replication is done (likewise for the clockwise | |||
| bit position for the counterclockwise copy. As a result, the ring ingress | bit position for the counterclockwise copy). As a result, the ring's | |||
| BFR will send a copy in both directions, serving BFRs on either side of the | BFIR will send a copy in both directions, serving BFRs on either side of the | |||
| ring up to L1.</t> | ring up to L1.</t> | |||
| </section> | ||||
| </section> | <section anchor="ecmp" numbered="true" toc="default"> | |||
| <!-- rings --> | <name>Equal-Cost Multipath (ECMP)</name> | |||
| <t>An ECMP() adjacency allows the use of just one BP to deliver packet | ||||
| <section anchor="ecmp" title="Equal Cost MultiPath (ECMP)"> | s | |||
| <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 si | ||||
| milar instances. The following URL seems to indicate though that this is a per-c | ||||
| ase decision, which seems undefined: https://writingcenter.gmu.edu/guides/choosi | ||||
| ng-between-infinitive-and-gerund-to-do-or-doing. What exactly should be done abo | ||||
| ut this ?].</t> | ||||
| <t>An ECMP() adjacency allows to use just one BP to deliver packets | ||||
| to one of N adjacencies instead of one BP for each adjacency. | to one of N adjacencies instead of one BP for each adjacency. | |||
| In the common example case <xref target="ecmp-picture"/>, | In the common example case shown in <xref target="ecmp-picture" format="default" | |||
| a link-bundle of three links L1,L2,L3 connects BFR1 and BFR2, and | />, | |||
| only one BP is used instead of three BP to deliver packets from | a link bundle of three links L1,L2,L3 connects BFR1 and BFR2, and | |||
| only one BP is used instead of three BPs to deliver packets from | ||||
| BFR1 to BFR2.</t> | BFR1 to BFR2.</t> | |||
| <figure anchor="ecmp-picture"> | ||||
| <figure anchor="ecmp-picture" title="ECMP Example"> | <name>ECMP Example</name> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| --L1----- | --L1----- | |||
| BFR1 --L2----- BFR2 | BFR1 --L2----- BFR2 | |||
| --L3----- | --L3----- | |||
| BIFT entry in BFR1: | BIFT entry in BFR1: | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | Index | Adjacencies | | | Index | Adjacencies | | |||
| ================================================================== | ================================================================== | |||
| | 0:6 | ECMP({forward_connected(L1, BFR2), | | | 0:6 | ECMP({forward_connected(L1, BFR2), | | |||
| | | forward_connected(L2, BFR2), | | | | forward_connected(L2, BFR2), | | |||
| skipping to change at line 1313 ¶ | skipping to change at line 1108 ¶ | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| BIFT entry in BFR2: | BIFT entry in BFR2: | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | Index | Adjacencies | | | Index | Adjacencies | | |||
| ================================================================== | ================================================================== | |||
| | 0:6 | ECMP({forward_connected(L1, BFR1), | | | 0:6 | ECMP({forward_connected(L1, BFR1), | | |||
| | | forward_connected(L2, BFR1), | | | | forward_connected(L2, BFR1), | | |||
| | | forward_connected(L3, BFR1)}, seed) | | | | forward_connected(L3, BFR1)}, seed) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>This document does not standardize any ECMP algorithm because it | <t>This document does not standardize any ECMP algorithm because it | |||
| is sufficient for implementations to document their freely chosen | is sufficient for implementations to document their freely chosen | |||
| ECMP algorithm. | ECMP algorithm. | |||
| <xref target="ecmp-algo-picture"/> shows an example ECMP algorithm, | <xref target="ecmp-algo-picture" format="default"/> shows an example ECMP algori | |||
| and would double as its documentation: A BIER-TE controller could | thm | |||
| and would double as its documentation: a BIER-TE controller could | ||||
| determine which adjacency is chosen based on the seed and adjacencies parameters | determine which adjacency is chosen based on the seed and adjacencies parameters | |||
| and the packet entropy.</t> | and on packet entropy.</t> | |||
| <figure anchor="ecmp-algo-picture"> | ||||
| <figure anchor="ecmp-algo-picture" title="ECMP algorithm Example"> | <name>ECMP Algorithm Example</name> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| forward(packet, ECMP(adj(0), adj(1),... adj(N-1), seed)): | forward(packet, ECMP(adj(0), adj(1),... adj(N-1), seed)): | |||
| i = (packet(bier-header-entropy) XOR seed) % N | i = (packet(bier-header-entropy) XOR seed) % N | |||
| forward packet to adj(i) | forward packet to adj(i) | |||
| ]]></artwork> | ||||
| ]]></artwork></figure> | </figure> | |||
| <t>In the example shown in <xref target="polarization-picture"/>, all | ||||
| <t>In the following example, all traffic from BFR1 towards BFR10 is | traffic from BFR1 towards BFR10 is | |||
| intended to be ECMP load split equally across the topology. This | intended to be ECMP load-split equally across the topology. This | |||
| example is not meant as a likely setup, but to illustrate that ECMP can | example is not meant as a likely setup; rather, it illustrates that ECMP can | |||
| be used to share BPs not only across link bundles, but also across | be used to share BPs not only across link bundles but also across | |||
| alternative paths across different transit BFR, and it explains | alternative paths across different transit BFRs, and it explains | |||
| the use of the seed parameter.</t> | the use of the seed parameter.</t> | |||
| <figure anchor="polarization-picture"> | ||||
| <figure anchor="polarization-picture" title="Polarization Example"> | <name>Polarization Example</name> | |||
| <artwork align="left"><![CDATA[ | <artwork align="left" name="" type="" alt=""><![CDATA[ | |||
| BFR1 (BFIR) | BFR1 (BFIR) | |||
| /L11 \L12 | /L11 \L12 | |||
| / \ | / \ | |||
| BFR2 BFR3 | BFR2 BFR3 | |||
| /L21 \L22 /L31 \L32 | /L21 \L22 /L31 \L32 | |||
| / \ / \ | / \ / \ | |||
| BFR4 BFR5 BFR6 BFR7 | BFR4 BFR5 BFR6 BFR7 | |||
| \ / \ / | \ / \ / | |||
| \ / \ / | \ / \ / | |||
| BFR8 BFR9 | BFR8 BFR9 | |||
| skipping to change at line 1387 ¶ | skipping to change at line 1180 ¶ | |||
| BIFT entry in BFR6, BFR7: | BIFT entry in BFR6, BFR7: | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:8 | forward_connected(Lxx, BFR9) |xx differs on BFR6/BFR7| | | 0:8 | forward_connected(Lxx, BFR9) |xx differs on BFR6/BFR7| | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| BIFT entry in BFR8, BFR9: | BIFT entry in BFR8, BFR9: | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:9 | forward_connected(Lxx, BFR10) |xx differs on BFR8/BFR9| | | 0:9 | forward_connected(Lxx, BFR10) |xx differs on BFR8/BFR9| | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| ]]></artwork> | ||||
| ]]></artwork></figure> | </figure> | |||
| <t>Note that for the following discussion of ECMP, only the BIFT ECMP( | ||||
| <t>Note that for the following discussion of ECMP, only the BIFT ECMP | ) | |||
| adjacencies on BFR1, BFR2, BFR3 are relevant. The re-use of BP across | adjacencies on BFR1, BFR2, and BFR3 are relevant. The reuse of BPs across | |||
| BFR in this example is further explained in <xref target="reuse"/> | BFRs in this example is further explained in <xref target="reuse" format="defaul | |||
| t"/> | ||||
| below.</t> | below.</t> | |||
| <t> With the ECMP setup shown in the topology above, traffic would not | ||||
| <t> With the setup of ECMP in the topology above, traffic would not be | be | |||
| equally load-split. Instead, links L22 and L31 would see no traffic | equally load-split. Instead, links L22 and L31 would see no traffic | |||
| at all: BFR2 will only see traffic from BFR1 for which the ECMP | at all: BFR2 will only see traffic from BFR1, for which the ECMP | |||
| hash in BFR1 selected the first adjacency in the list of 2 adjacencies | hash in BFR1 selected the first adjacency in the list of two adjacencies | |||
| given as parameters to the ECMP. It is link L11-to-BFR2. BFR2 performs | given as parameters to the ECMP: link L11-to-BFR2. BFR2 again performs | |||
| again ECMP with two adjacencies on that subset of traffic using the same | ECMP with two adjacencies on that subset of traffic using the same | |||
| seed1, and will therefore again select the first of its two adjacencies: | seed1 and will therefore again select the first of its two adjacencies: | |||
| L21-to-BFR4. And therefore L22 and BFR5 sees no traffic. Likewise for | L21-to-BFR4. Therefore, L22 and BFR5 see no traffic (likewise for | |||
| L31 and BFR6.</t> | L31 and BFR6).</t> | |||
| <t>This issue in BFR2/BFR3 is called "polarization". It results from t | ||||
| <t>This issue in BFR2/BFR3 is called polarization. It results from the | he | |||
| re-use of the same hash function across multiple consecutive hops in | reuse of the same hash function across multiple consecutive hops in | |||
| topologies like these. To resolve this issue, the ECMP() adjacency on BFR1 | 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. | 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 | BFR2/BFR3 can use the same hash because packets will not sequentially | |||
| pass across both of them. Therefore, they can also use the same BP 0:7.</t> | pass across both of them. Therefore, they can also use the same BP (i.e., 0:7).< | |||
| /t> | ||||
| <t>Note that ECMP solutions outside of BIER often hide the | <t>Note that ECMP solutions outside of BIER often hide the | |||
| seed by auto-selecting it from local entropy such as unique local or | seed by auto-selecting it from local entropy such as unique local or | |||
| next-hop identifiers. Allowing the BIER-TE Controller to explicitly set the seed | next-hop identifiers. Allowing the BIER-TE controller to explicitly set the seed | |||
| gives | gives | |||
| the ability for it to control same/different path selection across multiple | the BIER-TE controller the ability to control the selection of the same path or | |||
| different paths across multiple | ||||
| consecutive ECMP hops.</t> | consecutive ECMP hops.</t> | |||
| </section> | ||||
| </section> | <section anchor="routed" numbered="true" toc="default"> | |||
| <!-- ecmp --> | <name>Forward Routed Adjacencies</name> | |||
| <section anchor="routed" title="Forward Routed adjacencies"> | <section anchor="reducing" numbered="true" toc="default"> | |||
| <name>Reducing Bit Positions</name> | ||||
| <section anchor="reducing" title="Reducing bit positions"> | <t>Forward_routed() adjacencies can reduce the number of bit positio | |||
| ns | ||||
| <t>Forward_routed() adjacencies can reduce the number of bit positions | ||||
| required when the path steering requirement is not hop-by-hop | required when the path steering requirement is not hop-by-hop | |||
| explicit path selection, but loose-hop selection. Forward_routed() adjacencies | explicit path selection but rather is loose-hop selection. Forward_routed() adja | |||
| can also allow to operate BIER-TE across intermediate hop routers | cencies | |||
| can also permit BIER-TE operation across intermediate-hop routers | ||||
| that do not support BIER-TE.</t> | that do not support BIER-TE.</t> | |||
| <t>Assume that the requirement in <xref target="routed-picture" form | ||||
| at="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 following next three | ||||
| segments: (1) BFR2 via link L1, (2) BFR2 via link L2, or (3) via BFR3 and then | ||||
| not caring whether the packet is forwarded via L3 or L4.</t> | ||||
| <figure anchor="routed-picture" title="Forward Routed Adjacencies Example"> | <figure anchor="routed-picture"> | |||
| <artwork align="left"><![CDATA[ | <name>Forward Routed Adjacencies Example</name> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| ............... | ............... | |||
| ...BFR1--... ...--L1-- BFR2... | ...BFR1--... ...--L1-- BFR2... | |||
| ... .Routers. ...--L2--/ | ... .Routers. ...--L2--/ | |||
| ...BFR4--... ...--L3-- BFR3... | ...BFR4--... ...--L3-- BFR3... | |||
| ... ...--L4--/ | | ... ...--L4--/ | | |||
| ............... | | ............... | | |||
| LO | LO | |||
| Network Area 1 | Network Area 1 | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>Assume the requirement in <xref target="routed-picture"/> is to explicitly st | ||||
| eer | ||||
| traffic flows that have arrived at BFR1 or BFR4 via a path | ||||
| in the routing underlay "Network Area 1" to one of the following three next | ||||
| segments: (1) BFR2 via link L1, (2) BFR2 via link L2, or (3) via BFR3 and then | ||||
| nor caring whether the packet is forwarded via L3 or L4.</t> | ||||
| <t>To enable this, both BFR1 and BFR4 are set up with a forward_routed | <t>To enable this, both BFR1 and BFR4 are set up with a forward_rout ed() | |||
| adjacency bit position towards an address of BFR2 on link L1, another | adjacency bit position towards an address of BFR2 on link L1, another | |||
| forward_routed() bit position towards an address of BFR2 on link L2 and a third | forward_routed() bit position towards an address of BFR2 on link L2, and a third | |||
| forward_routed() bit position towards a node address LO of BFR3.</t> | forward_routed() bit position towards a node address LO of BFR3.</t> | |||
| </section> | ||||
| </section> | <section anchor="without" numbered="true" toc="default"> | |||
| <!-- reducing --> | <name>Supporting Nodes without BIER-TE</name> | |||
| <t>Forward_routed() adjacencies also enable incremental deployment o | ||||
| <section anchor="without" title="Supporting nodes without BIER-TE"> | f BIER-TE. | |||
| Only the nodes through which BIER-TE traffic needs to be steered -- | ||||
| <t>Forward_routed() adjacencies also enable incremental deployment of BIER-TE. | with or without replication -- need to support BIER-TE. Where | |||
| Only the nodes through which BIER-TE traffic needs to be steered - | they are not directly connected to each other, forward_routed() | |||
| with or without replication - need to support BIER-TE. Where | adjacencies are used to pass over nodes that are not BIER-TE enabled.</t> | |||
| they are not directly connected to each other, forward_routed | </section> | |||
| adjacencies are used to pass over non BIER-TE enabled nodes.</t> | ||||
| </section> | ||||
| <!-- without --> | ||||
| </section> | </section> | |||
| <!-- routed --> | ||||
| <section anchor="reuse" title="Reuse of bit positions (without DNC)"> | ||||
| <t>Bit positions can be re-used across multiple BFRs to minimize the number | <section anchor="reuse" numbered="true" toc="default"> | |||
| of BP needed. This happens when adjacencies on multiple BFRs use the DNC | <name>Reuse of Bit Positions (without DNC)</name> | |||
| <t>BPs can be reused across multiple BFRs to minimize the number | ||||
| of BPs 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. | flag as described above, but it can also be done for non-DNC adjacencies. | |||
| This section only discusses this non-DNC case.</t> | This section only discusses this non-DNC case.</t> | |||
| <t>Because a given BP is cleared when passing a BFR with an adjacency | ||||
| <t>Because BP are cleared when passing a BFR with an adjacency for that | for that | |||
| BP, reuse of BP across multiple BFRs does not introduce any problems | BP, reusing BPs across multiple BFRs does not introduce any problems | |||
| with duplicates or loops that do not also exist when every adjacency has | with duplicates or loops that do not also exist when every adjacency has | |||
| a unique BP. Instead, the challenge when reusing BP is whether it | a unique BP. Instead, the challenge when reusing BPs is whether the desired | |||
| allows to still achieve the desired Tree Engineering goals.</t> | Tree Engineering goals can still be achieved.</t> | |||
| <t>A BP cannot be reused across two BFRs that would need to be passed | ||||
| <t>BP cannot be reused across two BFRs that would need to be passed | sequentially for some path: the first BFR will clear the BP, so those | |||
| sequentially for some path: The first BFR will clear the BP, so those | paths cannot be built. A BP can be set across BFRs that would only occur across | |||
| paths cannot be built. BP can be set across BFR that would (A) only | (A) different paths or (B) different branches of the same tree.</t> | |||
| occur across different paths or (B) across different branches of the same tree.< | <t>An example of (A) was given in <xref target="polarization-picture" | |||
| /t> | format="default"/>, | |||
| where BP 0:7, BP 0:8, and BP 0:9 are each reused across multiple BFRs because | ||||
| <t>An example of (A) was given in <xref target="polarization-picture"/>, | ||||
| where BP 0:7, BP 0: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 | a single packet/path would never be able to reach more than one BFR | |||
| sharing the same BP.</t> | sharing the same BP.</t> | |||
| <t>Assume that the example was changed: BFR1 has no ECMP() adjacency f | ||||
| <t>Assume the example was changed: BFR1 has no ECMP() adjacency for BP 0:6, | or BP 0:6 | |||
| but instead BP 0:5 with forward_connected() to BFR2 and BP 0:6 with | 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 | forward_connected() to BFR3. Packets with both BP 0:5 and BP 0:6 would | |||
| now be able to reach both BFR2 and BFR3 and the still existing re-use | now be able to reach both BFR2 and BFR3, and the still-existing reuse | |||
| of BP 0:7 between BFR2 and BFR3 is a case of (B) where reuse of BP | of BP 0:7 between BFR2 and BFR3 is a case of (B) where reusing a BP | |||
| is perfect because it does not limit the set of useful path choices:</t> | is perfect because it does not limit the set of useful path choices, as in the f | |||
| ollowing example.</t> | ||||
| <t>If instead of reusing BP 0:7, BFR3 used a separate BP 0:10 for its | <t>If instead of reusing BP 0:7 BFR3 used a separate BP 0:10 for its | |||
| ECMP() adjacency, no useful additional path steering options would be enabled. | ECMP() adjacency, no useful additional path steering options would be enabled. | |||
| If duplicates at BFR10 where undesirable, this would be done by not | If duplicates at BFR10 were undesirable, this would be done by not | |||
| setting BP 0:5 and BP 0:6 for the same packet. If the duplicates where | setting BP 0:5 and BP 0:6 for the same packet. If the duplicates were | |||
| desirable (e.g.: resilient transmission), the additional BP 0:10 | desirable (e.g., resilient transmission), the additional BP 0:10 | |||
| would also not render additional value.</t> | would also not render additional value.</t> | |||
| <t>Reuse may also save BPs in larger topologies. Consider the topolog | ||||
| y | ||||
| shown in <xref target="scaling-picture2" format="default"/>.</t> | ||||
| <figure anchor="scaling-picture2" title="Reuse of BP"> | <figure anchor="scaling-picture2"> | |||
| <artwork align="left"><![CDATA[ | <name>Reuse of BPs</name> | |||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| area1 | area1 | |||
| BFR1a BFR1b | BFR1a BFR1b | |||
| / \ | / \ | |||
| .................................... | .................................... | |||
| . Core . | . Core . | |||
| .................................... | .................................... | |||
| | / \ / \ | | | / \ / \ | | |||
| BFR2a BFR2b BFR3a BFR3b BFR6a BFR6b | BFR2a BFR2b BFR3a BFR3b BFR6a BFR6b | |||
| /-------\ /---------\ /--------\ | /-------\ /---------\ /--------\ | |||
| | area2 | | area3 | ... | area6 | | | area2 | | area3 | ... | area6 | | |||
| | ring | | ring | | ring | | | ring | | ring | | ring | | |||
| \-------/ \---------/ \--------/ | \-------/ \---------/ \--------/ | |||
| more BFR more BFR more BFR | more BFRs more BFRs more BFRs | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>Reuse may also save BPs in larger topologies. Consider the topology | <t>A BFIR/sender (e.g., video headend) is attached to area 1, | |||
| shown in <xref target="scaling-picture2"/>. A BFIR/sender (e.g.: video headend) | and the five areas 2...6 contain receivers/BFERs. Assume that each area has a di | |||
| is attached to area 1, | stribution | |||
| and area 2...6 contain receivers/BFER. Assume each area had a distribution | ||||
| ring, each with two BPs to indicate the direction (as explained before). | ring, each with two BPs to indicate the direction (as explained before). | |||
| These two BPs could be reused across the 5 areas. Packets would be replicated | These two BPs could be reused across the five areas. Packets would be replicate | |||
| through other BPs for the Core to the desired subset of areas, and once a packet | d | |||
| copy | through other BPs from the core to the desired subset of areas, and once a packe | |||
| t copy | ||||
| reaches the ring of the area, the two ring BPs come into play. This reuse is | 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: Packets | a case of (B), but it limits the topology choices: packets | |||
| can only flow around the same direction in the rings of all areas. This may or m ay not | can only flow around the same direction in the rings of all areas. This may or m ay not | |||
| be acceptable based on the desired path steering options: If resilient | be acceptable based on the desired path steering options: if resilient | |||
| transmission is the path engineering goal, then it is likely a good | transmission is the path engineering goal, then it is likely a good | |||
| optimization, if the bandwidth of each ring was to be optimized separately, | optimization; however, if the bandwidth of each ring were to be optimized separa tely, | |||
| it would not be a good limitation.</t> | it would not be a good limitation.</t> | |||
| </section> | ||||
| </section> | <section anchor="bits-summary" numbered="true" toc="default"> | |||
| <section anchor="bits-summary" title="Summary of BP optimizations"> | <name>Summary of BP Optimizations</name> | |||
| <t>In this section, we reviewed a range of techniques by which a BIER- | ||||
| <t>This section reviewed a range of techniques by which a BIER-TE Controller can | TE controller can create | |||
| create | ||||
| a BIER-TE topology in a way that minimizes the number of necessary BPs.</t> | a BIER-TE topology in a way that minimizes the number of necessary BPs.</t> | |||
| <t>Without any optimization, a BIER-TE controller would attempt to map | ||||
| <t>Without any optimization, a BIER-TE Controller would attempt to map the netwo | the network | |||
| rk | subnet topology 1:1 into the BIER-TE topology, every adjacent | |||
| subnet topology 1:1 into the BIER-TE topology and every subnet adjacent | neighbor in the subnet would require a forward_connected() BP, and every BFER wo | |||
| neighbor requires a forward_connected() BP and every BFER requires a local_decap | uld require a local_decap() BP.</t> | |||
| () BP.</t> | <t>The optimizations described in this document are then as follows:</ | |||
| t> | ||||
| <t>The optimizations described are then as follows:<list style="symbols"> | <ol spacing="normal"> | |||
| <t>P2P links require only one BP (<xref target="p2p-links"/>).</t> | <li>P2P links require only one BP (<xref target="p2p-links" format=" | |||
| <t>All leaf-BFER can share a single local_decap() BP (<xref target="leaf-bfer" | default"/>).</li> | |||
| />).</t> | <li>All leaf BFERs can share a single local_decap() BP (<xref target | |||
| <t>A LAN with N BFR needs at most N BP (one for each BFR). It only needs one B | ="leaf-bfer" format="default"/>).</li> | |||
| P for all those BFR that are not redundantly connected to multiple LANs (<xref t | <li>A LAN with N BFRs needs at most N BPs (one for each BFR). It onl | |||
| arget="lans"/>).</t> | y needs one BP for all those BFRs that are not redundantly connected to multiple | |||
| <t>A hub with p2p connections to multiple non-leaf-BFER spokes can share one B | LANs (<xref target="lans" format="default"/>).</li> | |||
| P to all spokes if traffic can be flooded to all spokes, e.g.: because of no ban | <li>A hub with P2P connections to multiple non-leaf BFER spokes can | |||
| dwidth concerns or dense receiver sets (<xref target="hubnspoke"/>).</t> | share one BP with all of the spokes if traffic can be flooded to all of those sp | |||
| <t>Rings of BFR can be built with just two BP (one for each direction) except | okes, e.g., because of no bandwidth concerns or dense receiver sets (<xref targe | |||
| for BFR with multiple ring connections - similar to LANs (<xref target="rings"/> | t="hubnspoke" format="default"/>).</li> | |||
| ).</t> | <li>Rings of BFRs can be built with just two BPs (one for each direc | |||
| <t>ECMP() adjacencies to N neighbors can replace N BP with 1 BP. Multihop ECMP | tion), except for BFRs with multiple ring connections -- similar to LANs (<xref | |||
| can avoid polarization through different seeds of the ECMP algorithm (<xref tar | target="rings" format="default"/>).</li> | |||
| get="ecmp"/>).</t> | <li>ECMP() adjacencies to N neighbors can replace N BPs with one BP. | |||
| <t>Forward_routed() adjacencies allow to "tunnel" across non-BIER-TE capable r | Multihop ECMP can avoid polarization through different seeds of the ECMP algori | |||
| outers and across BIER-TE capable routers where no traffic-steering or replicati | thm (<xref target="ecmp" format="default"/>).</li> | |||
| ons are required (<xref target="routed"/>).</t> | <li>Forward_routed() adjacencies permit "tunneling" across routers t | |||
| <t>BP can generally be reused across a set of nodes where it can be guaranteed | hat are either BIER-TE capable or not BIER-TE capable where no traffic steering | |||
| that no path will | or replications are required (<xref target="routed" format="default"/>).</li> | |||
| ever need to traverse more than one node of the set. Depending on scenario, this | <li>A BP can generally be reused across a set of nodes where it can | |||
| may limit the feasible path steering options (<xref target="reuse"/>).</t> | be guaranteed that no path will | |||
| ever need to traverse more than one node of the set. Depending on the scenario, | ||||
| </list></t> | this may limit the feasible path steering options (<xref target="reuse" format=" | |||
| default"/>).</li> | ||||
| <t>Note that the described list of optimizations is not exhaustive. Especially w | </ol> | |||
| hen the set of required path steering choices is limited and the set of possible | <t>Note that this list of optimizations is not exhaustive. Further opt | |||
| subsets of BFERs that should be able to receive traffic is limited, further opt | imizations of BPs are possible, especially when both the set of required path st | |||
| imizations of BP are possible. The hub and spoke optimization is a simple exampl | eering choices and the possible subsets of BFERs that should be able to receive | |||
| e of such traffic pattern dependent optimizations.</t> | traffic are limited. The hub-and-spoke optimization is a simple example of such | |||
| traffic-pattern-dependent optimizations.</t> | ||||
| </section> | ||||
| </section> | </section> | |||
| </section> | <section anchor="avoiding" numbered="true" toc="default"> | |||
| <!-- bitpositions --> | <name>Avoiding Duplicates and Loops</name> | |||
| <section anchor="loops" numbered="true" toc="default"> | ||||
| <section anchor="avoiding" title="Avoiding duplicates and loops"> | <name>Loops</name> | |||
| <t>Whenever BIER-TE creates a copy of a packet, the BitString of | ||||
| <section anchor="loops" title="Loops"> | ||||
| <t>Whenever BIER-TE creates a copy of a packet, the BitString of | ||||
| that copy will have all bit positions cleared that are associated | that copy will have all bit positions cleared that are associated | |||
| with adjacencies on the BFR. This inhibits looping of packets. | with adjacencies on the BFR. This prevents packets from looping. | |||
| The only exception are adjacencies with DNC set.</t> | The only exceptions are adjacencies with DNC set.</t> | |||
| <figure anchor="ring-picture2" title="Miswired Ring Example"> | <t>With DNC set, looping can happen. Consider in <xref target="ring-p | |||
| <artwork align="left"><![CDATA[ | icture2" 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 posit | ||||
| ion is | ||||
| never cleared for copies of the packets traveling clockwise | ||||
| around the ring.</t> | ||||
| <figure anchor="ring-picture2"> | ||||
| <name>Miswired Ring Example</name> | ||||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| v v | v v | |||
| | | | | | | |||
| L1 | L2 | L3 | L1 | L2 | L3 | |||
| /-------- BFRa ---- BFRb ---------------------\ | /-------- BFRa ---- BFRb ---------------------\ | |||
| | . | | | . | | |||
| | ...... Wrong link wiring | | | ...... Wrong link wiring | | |||
| | . | | | . | | |||
| \- BFR1 - BFR2 BFR3 - ... - BFR29 - BFR30 -/ | \- BFR1 - BFR2 BFR3 - ... - BFR29 - BFR30 -/ | |||
| | | L4 | | | | | L4 | | | |||
| p33| p15| | p33| p15| | |||
| BFRd BFRc | BFRd BFRc | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>With DNC set, looping can happen. Consider in <xref target="ring-picture2"/> | <t>To inhibit looping in the face of such physical misconfiguration, | |||
| 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 positi | ||||
| on is | ||||
| never cleared for copies of the packets traveling clockwise | ||||
| around the ring.</t> | ||||
| <t>To inhibit looping in the face of such physical misconfiguration, | ||||
| only forward_connected() adjacencies are permitted to have DNC set, | 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 address) | and the link layer port unique unicast destination address of the adjacency (e.g ., "Media Access Control" (MAC) address) | |||
| protects against closing the loop. Link layers without port unique | protects against closing the loop. Link layers without port unique | |||
| link layer addresses should not be used with the DNC flag set.</t> | link layer addresses should not be used with the DNC flag set.</t> | |||
| </section> | ||||
| </section> | <section anchor="duplicates" numbered="true" toc="default"> | |||
| <!-- loops --> | <name>Duplicates</name> | |||
| <section anchor="duplicates" title="Duplicates"> | ||||
| <figure anchor="duplicates-picture" title="Duplicates Example"> | <t>Duplicates happen when the graph expressed by a BitString is not a | |||
| <artwork align="left"><![CDATA[ | tree but is redundantly connecting BFRs with each other. In <xref target="duplic | |||
| ates-picture" format="default"/>, | ||||
| a BitString of p2,p3,p4,p5 would result in duplicate packets arriving on BFER4. | ||||
| The BIER-TE controller must therefore ensure that only BitStrings that are trees | ||||
| are created.</t> | ||||
| <figure anchor="duplicates-picture"> | ||||
| <name>Duplicates Example</name> | ||||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| BFIR1 | BFIR1 | |||
| / \ | / \ | |||
| / p2 \ p3 | / p2 \ p3 | |||
| BFR2 BFR3 | BFR2 BFR3 | |||
| \ p4 / p5 | \ p4 / p5 | |||
| \ / | \ / | |||
| BFER4 | BFER4 | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>Duplicates happen when the graph expressed by a BitString is not a | <t>When links are incorrectly physically reconnected before the | |||
| tree but redundantly connecting BFRs with each other. In <xref target="duplicate | BIER-TE controller updates BitStrings in BFIRs, duplicates can happen. | |||
| s-picture"/>, | ||||
| a BitString of p2,p3,p4,p5 would result in duplicate packets to arrive on BFER4. | ||||
| The BIER-TE Controller must therefore ensure to only create BitStrings that are | ||||
| trees.</t> | ||||
| <t>When links are incorrectly physically re-connected before the | ||||
| BIER-TE Controller updates BitStrings in BFIRs, duplicates can happen. | ||||
| Like loops, these can be inhibited by link layer addressing | Like loops, these can be inhibited by link layer addressing | |||
| in forward_connected() adjacencies.</t> | in forward_connected() adjacencies.</t> | |||
| <t>If interface or loopback addresses used in forward_routed() adjacen | ||||
| <t>If interface or loopback addresses used in forward_routed() adjacencies | cies | |||
| are moved from one BFR to another, duplicates can equally happen. | are moved from one BFR to another, duplicates are equally likely to happen. | |||
| Such re-addressing operations must be coordinated with the BIER-TE Controller.</ | Such readdressing operations must be coordinated with the BIER-TE controller.</t | |||
| t> | > | |||
| </section> | ||||
| </section> | ||||
| <!-- duplicates --> | ||||
| </section> | </section> | |||
| <!-- avoiding --> | ||||
| <section anchor="mgmt-stuff" title="Managing SI, sub-domains and BFR-ids"> | <section anchor="mgmt-stuff" numbered="true" toc="default"> | |||
| <name>Managing SIs, Subdomains, and BFR-ids</name> | ||||
| <t>When the number of bits required to represent the necessary hops | <t>When the number of bits required to represent the necessary hops | |||
| in the topology and BFER exceeds the supported BitStringLength (BSL), | in the topology and BFERs exceeds the supported "BitStringLength" (BSL), | |||
| multiple SIs and/or sub-domains must be used. This section discusses how.</t> | multiple SIs and/or subdomains must be used. This section discusses how this is | |||
| done.</t> | ||||
| <t>BIER-TE forwarding does not require the concept of BFR-id, but routing | <t>BIER-TE forwarding does not require the concept of BFR-ids, but routi | |||
| underlay, flow overlay and BIER headers may. This section also discusses | ng | |||
| how BFR-ids can be assigned to BFIR/BFER for BIER-TE.</t> | underlay, flow overlay, and BIER headers may. This section also discusses | |||
| how BFR-ids can be assigned to BFIRs/BFERs for BIER-TE.</t> | ||||
| <section anchor="why" title="Why SI and sub-domains"> | <section anchor="why" numbered="true" toc="default"> | |||
| <name>Why SIs and Subdomains?</name> | ||||
| <t>For (non-TE) BIER and BIER-TE forwarding, the most important result of using | <t>For (non-TE) BIER and BIER-TE forwarding, the most important result | |||
| multiple | of using multiple | |||
| SI and/or sub-domains is the same: Packets that need to be sent to BFERs in | SIs and/or subdomains is the same: multicast flow overlay packets that need to b | |||
| different SIs or sub-domains require different BIER packets: each one with a | e sent to BFERs in | |||
| BitString for a different (SI,sub-domain) combination. Each such BitString uses | different SIs or subdomains require multiple BIER packets, each one with a | |||
| one BSL sized SI block in the BIFT of the sub-domain. We call this | BitString for a different (SI,subdomain) combination. Each such BitString uses | |||
| one BSL-sized SI block in the BIFT of the subdomain. We call this | ||||
| a BIFT:SI (block).</t> | a BIFT:SI (block).</t> | |||
| <t>SIs and subdomains have different purposes in the BIER architecture | ||||
| <t>For BIER and BIER-TE forwarding themselves there is also no difference whethe | and also the BIER-TE architecture. This impacts how operators manage them and | |||
| r | especially how flow overlays will likely use them.</t> | |||
| different SIs and/or sub-domains are chosen, but SI and sub-domain have | <t>By default, every possible BFIR/BFER in a BIER network would likely | |||
| different purposes in the BIER architecture shared by BIER-TE. | be given | |||
| This impacts how operators are managing them and how especially flow overlays | a BFR-id in subdomain 0 (unless there are > 64k BFIRs/BFERs). </t> | |||
| will likely use them.</t> | <t>If there are different flow services (or service instances) requiri | |||
| ng replication | ||||
| <t>By default, every possible BFIR/BFER in a BIER network would likely be given | ||||
| a BFR-id in sub-domain 0 (unless there are > 64k BFIR/BFER). </t> | ||||
| <t>If there are different flow services (or service instances) requiring replica | ||||
| tion | ||||
| to different subsets of BFERs, then it will likely not be possible to achieve | to different subsets of BFERs, then it will likely not be possible to achieve | |||
| the best replication efficiency for all of these service instances via sub-domai | the best replication efficiency for all of these service instances via subdomain | |||
| n 0. | 0. | |||
| Ideal replication efficiency for N BFER exists in a sub-domain if they are | ||||
| split over not more than ceiling(N/BitStringLength) SI.</t> | ||||
| <t>If service instances justify additional BIER:SI state in the network, additio | Ideal replication efficiency for N BFERs exists in a subdomain if they are | |||
| nal | split over no more than ceiling(N/BitStringLength) SIs.</t> | |||
| sub-domains will be used: BFIR/BFER are assigned BFR-id in those sub-domains | <t>If service instances justify additional BIER:SI state in the networ | |||
| and each service instance is configured to use the most appropriate sub-domain. | k, additional | |||
| subdomains will be used: BFIRs/BFERs are assigned BFR-ids in those subdomains, | ||||
| and each service instance is configured to use the most appropriate subdomain. | ||||
| This results in improved replication efficiency for different services.</t> | This results in improved replication efficiency for different services.</t> | |||
| <t>Even if creation of subdomains and assignment of BFR-ids to BFIRs/B | ||||
| FERs in those | ||||
| subdomains is automated, it is not expected that individual | ||||
| service instances can deal with BFERs in different subdomains. A service | ||||
| instance may only support configuration of a single subdomain it should rely on. | ||||
| </t> | ||||
| <t>To be able to easily reuse (and modify as little as possible) exist | ||||
| ing | ||||
| BIER procedures (including flow overlay and routing underlay), when BIER-TE | ||||
| forwarding is added, we therefore reuse SIs and subdomains logically in the | ||||
| same way as they are used in BIER: all necessary BFIRs/BFERs for a service use | ||||
| a single BIER-TE BIFT and are split across as many SIs as necessary (see <xref t | ||||
| arget="bit-requirements" format="default"/>). | ||||
| Different services may use different subdomains that primarily exist to | ||||
| provide more efficient replication (and, for BIER-TE, desirable path steering) | ||||
| for different subsets of BFIRs/BFERs.</t> | ||||
| </section> | ||||
| <t>Even if creation of sub-domains and assignment of BFR-id to BFIR/BFER in thos | <section anchor="bit-requirements" numbered="true" toc="default"> | |||
| e | <name>Assigning Bits for the BIER-TE Topology</name> | |||
| sub-domains is automated, it is not expected that individual | <t>In BIER, BitStrings only need to carry bits for BFERs; this leads t | |||
| service instances can deal with BFER in different sub-domains. A service | o the | |||
| instance may only support configuration of a single sub-domain it should rely on | model where BFR-ids map 1:1 to each bit in a BitString.</t> | |||
| .</t> | <t>In BIER-TE, BitStrings need to carry bits to indicate not only the | |||
| receiving | ||||
| <t>To be able to easily reuse (and modify as little as possible) existing | ||||
| BIER procedures including flow-overlay and routing underlay, when BIER-TE | ||||
| forwarding is added, we therefore reuse SI and sub-domain logically in the | ||||
| same way as they are used in BIER: All necessary BFIR/BFER for a service use | ||||
| a single BIER-TE BIFT and are split across as many SIs as necessary (see <xref t | ||||
| arget="bit-requirements"/>). | ||||
| Different services may use different sub-domains that primarily exist to | ||||
| provide more efficient replication (and for BIER-TE desirable path steering) | ||||
| for different subsets of BFIR/BFER.</t> | ||||
| </section> | ||||
| <!-- why --> | ||||
| <section anchor="bit-requirements" title="Assigning bits for the BIER-TE top | ||||
| ology"> | ||||
| <t>In BIER, BitStrings only need to carry bits for BFERs, which leads to the | ||||
| model that 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. | BFER but also the intermediate hops/links across which the packet must be sent. | |||
| The maximum number of BFER that can be supported in a single BitString or BIFT:S I | The maximum number of BFERs that can be supported in a single BitString or BIFT: SI | |||
| depends on the number of bits necessary to represent the desired topology betwee n | depends on the number of bits necessary to represent the desired topology betwee n | |||
| them.</t> | them.</t> | |||
| <t>"Desired" topology means that it depends on the physical topology a | ||||
| <t>"Desired" topology because it depends on the physical topology, and | nd | |||
| on the desire of the operator to allow for explicit path steering across | the operator's desire to</t> | |||
| every single hop (which requires more bits), or reducing the number of required | <ol spacing="normal"> | |||
| bits by exploiting optimizations such as unicast (forward_routed()), ECMP() or f | <li>permit explicit path steering across | |||
| lood | every single hop (which requires more bits), or</li> | |||
| (DNC) over "uninteresting" sub-parts of the topology - e.g. parts where differen | <li>reduce the number of required | |||
| t | bits by exploiting optimizations such as unicast (forward_routed()), ECMP(), or | |||
| trees do not need to take different paths due to path steering reasons.</t> | flood | |||
| (DNC) over "uninteresting" sub-parts of the topology, e.g., parts where, for pat | ||||
| <t>The total number of bits to describe the topology vs. the number of BFERs in | h steering reasons, different trees do not need to take different paths.</li> | |||
| a BIFT:SI can | </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 pat hs | range widely based on the size of the topology and the amount of alternative pat hs | |||
| in it. In a BIER-TE topology crafted by a BIER-TE expert, the higher the percent | in it. In a BIER-TE topology crafted by a BIER-TE expert, the higher the percent | |||
| age of non-BFER bits, the higher the likelihood, that those topology | age of non-BFER bits, the higher the likelihood that those topology | |||
| bits are not just BIER-TE overhead without additional benefit, but instead that | bits are not just BIER-TE overhead without additional benefit but instead | |||
| they | will allow the expression of desirable path steering alternatives.</t> | |||
| will allow to express desirable path steering alternatives.</t> | </section> | |||
| <section anchor="bfr-id" numbered="true" toc="default"> | ||||
| </section> | <name>Assigning BFR-ids with BIER-TE</name> | |||
| <t>BIER-TE forwarding does not use BFR-ids, nor does it require that | ||||
| <section anchor="bfr-id" title="Assigning BFR-id with BIER-TE"> | the BFIR-id field of the BIER header be set to a particular value. | |||
| However, other parts of a BIER-TE deployment may need a BFR-id -- specifically, | ||||
| <t>BIER-TE forwarding does not use the BFR-id, nor does it require for | multicast flow overlay signaling and multicast flow overlay packet disposition; | |||
| the BFIR-id field of the BIER header to be set to a particular value. | in that case, BFRs need to also have BFR-ids for BIER-TE SDs.</t> | |||
| However, other parts of a BIER-TE deployment may need a BFR-id, specifically | <t>For example, for BIER overlay signaling, BFIRs need to have a BFR-i | |||
| multicast flow overlay signaling and multicast flow overlay packet disposition, | d, because this | |||
| and in that case 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 | 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> | 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 | ||||
| <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 | 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 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 | that is not necessary for BIER forwarding, because the BFR may | |||
| never be a BFER but only a BFIR.</t> | never be a BFER (i.e., will only be a BFIR).</t> | |||
| <t>In BIER-TE, for a non-leaf BFER, there is usually a single BP for t | ||||
| <t>In BIER-TE, for a non-leaf BFER, there is usually a single BP for that BFER w | hat BFER with a | |||
| ith a | ||||
| local_decap() adjacency on the BFER. The BFR-id for such a BFER can therefore | local_decap() adjacency on the BFER. The BFR-id for such a BFER can therefore | |||
| be determined using the same procedure as in (non-TE) BIER: BFR-id = SI * BSL + | be determined using the same procedure as that used for (non-TE) BIER: BFR-id = | |||
| BP.</t> | SI * BSL + BP.</t> | |||
| <t>As explained in <xref target="leaf-bfer" format="default"/>, leaf B | ||||
| <t>As explained in <xref target="leaf-bfer"/>, leaf BFERs do not need such | FERs do not need such | |||
| a unique local_decap() adjacency. Likewise, BFIRs that are not also BFERs | 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 | 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 | 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> | 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 such | ||||
| <t>While this document defines no requirements on how to allocate such BFR-id, | BFR-ids, | |||
| a simple option is to derive it from the (SI,BP) of an adjacency that is | a simple option is to derive it from the (SI,BP) of an adjacency that is | |||
| unique to the BFR in question. For a BFIR this can be the first adjacency | unique to the BFR in question. For a BFIR, this can be the first adjacency that | |||
| only populated on this BFIR, for a leaf-BFER, this could be the first BP | is | |||
| only populated on this BFIR; for a leaf BFER, this could be the first BP | ||||
| with an adjacency towards that BFER.</t> | with an adjacency towards that BFER.</t> | |||
| </section> | ||||
| </section> | <section anchor="bitstring-mappings" numbered="true" toc="default"> | |||
| <name>Mapping from BFRs to BitStrings with BIER-TE</name> | ||||
| <section anchor="bitstring-mappings" title="Mapping from BFR to BitStrings w | <t>In BIER, applications of the flow overlay on a BFIR can calculate t | |||
| ith BIER-TE"> | he (SI,BP) of a | |||
| <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 BitStrin gs | BFER from the BFR-id of the BFER and can therefore easily determine the BitStrin gs | |||
| for a BIER packet to a set of BFERs with known BFR-ids.</t> | for a BIER packet to a set of BFERs with known BFR-ids.</t> | |||
| <t>In BIER-TE, this mapping needs to be equally supported for flow ove | ||||
| <t>In BIER-TE this mapping needs to be equally supported for flow overlays. | rlays. | |||
| This section outlines two core options, based on what type of Tree Engineering | This section outlines two core options, based on what type of Tree Engineering | |||
| the BIER-TE controller needs to performs for a particular application.</t> | the BIER-TE controller needs to perform for a particular application.</t> | |||
| <dl spacing="normal"> | ||||
| <t>"Independent branches": For a given flow overlay instance, the branches | <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 | 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 | independent of the branches to any other BFER. Shortest path trees are the most common | |||
| examples of trees with independent branches.</t> | examples of trees with independent branches.</dd> | |||
| <dt>"Interdependent branches":</dt><dd>When a BFER is added to or dele | ||||
| <t>"Interdependent branches": When a BFER is added or deleted from a particular | ted from a particular | |||
| distribution tree, the BIER-TE controller has to recalculate the branches to oth | distribution tree, the BIER-TE controller has to recalculate the branches to oth | |||
| er BFER, | er BFERs, | |||
| because they may need to change. Steiner trees are examples of interdependent b | because they may need to change. Steiner trees are examples of interdependent b | |||
| ranch trees.</t> | ranch trees.</dd> | |||
| </dl> | ||||
| <t>If "independent branches" are used, the BIER-TE Controller | <t>If "independent branches" are used, the BIER-TE controller | |||
| can signal to the BFIR flow overlay for every BFER an SI:BitString that | can signal to the BFIR flow overlay for every BFER an SI:BitString that | |||
| represents the branch to that BFER. The flow overlay on the BIFR can then indep | represents the branch to that BFER. The flow overlay on the BFIR can then, inde | |||
| endently | pendently | |||
| of the controller calculate the SI:BitString for all desired BFERs by OR'ing the | of the controller, calculate the SI:BitString for all desired BFERs by ORing the | |||
| ir BitStrings. | ir BitStrings. | |||
| This allows for flow overlay applications to operate independently of the contro | This allows flow overlay applications to operate independently of the controller | |||
| ller | whenever they need to determine which subset of BFERs needs to receive a particu | |||
| whenever it needs to determine which subset of BFERs need to receive a particula | lar packet.</t> | |||
| r packet.</t> | <t>If "interdependent branches" are required, an application would nee | |||
| d to query | ||||
| <t>If "interdependent branches" are required, the application would need to inqu | the SI:BitString for a given set of BFERs whenever the set changes.</t> | |||
| ire | <t>Note that in either case (unlike the scenario for BIER), the bits m | |||
| the SI:BitString for a given set of BFER whenever the set changes.</t> | ay need to | |||
| change upon link/node failure/recovery, network expansion, or network resource c | ||||
| <t>Note that in either case (unlike in BIER), the bits may need to | onsumption | |||
| change upon link/node failure/recovery, network expansion and network resource c | by other traffic as part of achieving Traffic Engineering goals (e.g., reoptimiz | |||
| onsumption | ation of | |||
| by other traffic as part of traffic engineering goals (e.g.: re-optimization of | lower-priority traffic flows). Interactions between such BFIR applications and t | |||
| lower | he BIER-TE controller | |||
| priority traffic flows). Interactions between such BFIR applications and the BIE | do therefore need to support dynamic updates to the SIs:BitStrings.</t> | |||
| R-TE Controller | <t>Communications between the BFIR flow overlay and the BIER-TE contro | |||
| do therefore need to support dynamic updates to the SI:BitStrings.</t> | ller | |||
| require some way to identify the BFERs. If BFR-ids are used in the deployment, a | ||||
| <t>Communications between the BFIR flow overlay and the BIER-TE controller | s | |||
| requires some way to identify the BFER. If BFR-ids are used in the deployment, a | outlined in <xref target="bfr-id" format="default"/>, then those are the "natura | |||
| s | l" BFR-ids. If | |||
| outlined in <xref target="bfr-id"/>, then those are the natural BFR identifier. | BFR-ids are not used, then any other unique identifier, such as a BFR's BFR-pref | |||
| If | ix | |||
| BFR-ids are not used, then any other unique identifier, such as the BFR-prefix | <xref target="RFC8279" format="default"/>, could be used.</t> | |||
| of the BFR (<xref target="RFC8279"/>) could be used.</t> | </section> | |||
| </section> | ||||
| <!-- bfr-id --> | ||||
| <section anchor="assigning" title="Assigning BFR-ids for BIER-TE"> | ||||
| <t>It is not currently determined if a single sub-domain could or should be | <section anchor="assigning" numbered="true" toc="default"> | |||
| <name>Assigning BFR-ids for BIER-TE</name> | ||||
| <t>It is not currently determined if a single subdomain could or shoul | ||||
| d be | ||||
| allowed to forward both (non-TE) BIER and BIER-TE packets. If this should be | allowed to forward both (non-TE) BIER and BIER-TE packets. If this should be | |||
| supported, there are two options:</t> | supported, there are two options:</t> | |||
| <ol spacing="normal" type="A"> | ||||
| <t>A. BIER and BIER-TE have different BFR-id in the same sub-domain. This allows | <li>BIER and BIER-TE have different BFR-ids in the same subdomain. Thi | |||
| higher replication efficiency for BIER because their BFR-id can be assigned | s allows higher replication efficiency for BIER because the BIER BFR-ids can be | |||
| sequentially, while the BitStrings for BIER-TE will have also the additional | assigned | |||
| bits for the topology. There is no relationship between a BFR BIER BFR-id and it | sequentially, while the BitStrings for BIER-TE will also have to assign the addi | |||
| s | tional | |||
| BIER-TE BFR-id.</t> | bits for the topology adjacencies. There is no relationship between a BFR BIER B | |||
| FR-id and its | ||||
| <t>B. BIER and BIER-TE share the same BFR-id. The BFR-ids are assigned as explai | BIER-TE BFR-id.</li> | |||
| ned | <li>BIER and BIER-TE share the same BFR-id. The BFR-ids are assigned a | |||
| s explained | ||||
| above for BIER-TE and simply reused for BIER. The replication efficiency for BIE R will | above for BIER-TE and simply reused for BIER. The replication efficiency for BIE R will | |||
| be as low as that for BIER-TE in this approach.</t> | be as low as that for BIER-TE in this approach.</li> | |||
| </ol> | ||||
| </section> | </section> | |||
| <!-- assigning --> | ||||
| <section anchor="allocation-example" title="Example bit allocations"> | ||||
| <section anchor="with-bier" title="With BIER"> | ||||
| <t>Consider a network setup with a BSL of 256 for a network | ||||
| topology as shown in <xref target="scaling-picture"/>. The network has 6 areas, | ||||
| each with | ||||
| 170 BFERs, connecting via a core with 4 (core) BFRs. To address all BFERs with B | ||||
| IER, | ||||
| 4 SIs are required. To send a BIER | ||||
| packet to all BFER in the network, 4 copies need to be sent by the BFIR. On the | ||||
| BFIR it does not make a difference how the BFR-ids are allocated to BFER | ||||
| in the network, but for efficiency further down in the network it does | ||||
| make a difference.</t> | ||||
| <figure anchor="scaling-picture" title="Scaling BIER-TE bits by reuse"> | <section anchor="allocation-example" numbered="true" toc="default"> | |||
| <artwork align="left"><![CDATA[ | <name>Example Bit Allocations</name> | |||
| <section anchor="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 <xref target="scaling-picture" format="default"/>. The netw | ||||
| ork has six areas, each with | ||||
| 170 BFERs, connecting via a core with four (core) BFRs. To address all BFERs wit | ||||
| h BIER, | ||||
| four SIs are required. To send a BIER | ||||
| packet to all BFERs in the network, four copies need to be sent by the BFIR. On | ||||
| the | ||||
| BFIR, it does not matter how the BFR-ids are allocated to BFERs | ||||
| in the network, but it does matter for efficiency further down in the network.</ | ||||
| t> | ||||
| <figure anchor="scaling-picture"> | ||||
| <name>Scaling BIER-TE Bits by Reuse</name> | ||||
| <artwork align="left" name="" type="" alt=""><![CDATA[ | ||||
| area1 area2 area3 | area1 area2 area3 | |||
| BFR1a BFR1b BFR2a BFR2b BFR3a BFR3b | BFR1a BFR1b BFR2a BFR2b BFR3a BFR3b | |||
| | \ / \ / | | | \ / \ / | | |||
| ................................ | ................................ | |||
| . Core . | . Core . | |||
| ................................ | ................................ | |||
| | / \ / \ | | | / \ / \ | | |||
| BFR4a BFR4b BFR5a BFR5b BFR6a BFR6b | BFR4a BFR4b BFR5a BFR5b BFR6a BFR6b | |||
| area4 area5 area6 | area4 area5 area6 | |||
| ]]></artwork></figure> | ]]></artwork> | |||
| </figure> | ||||
| <t>With random allocation of BFR-id to BFER, each receiving area would (most lik | <t>With random allocation of BFR-ids to BFERs, each receiving area w | |||
| ely) | ould (most likely) | |||
| have to receive all 4 copies of the BIER packet because there would be | have to receive all four copies of the BIER packet because there would be | |||
| BFR-id for each of the 4 SIs in each of the areas. Only further towards each | BFR-ids for each of the four SIs in each of the areas. Only further towards each | |||
| BFER would this duplication subside - when each of the 4 trees runs out of | BFER would this duplication subside -- when each of the four trees runs out of | |||
| branches.</t> | branches.</t> | |||
| <t>If BFR-ids are allocated intelligently, then all the BFERs in an | ||||
| <t>If BFR-ids are allocated intelligently, then all the BFER in an area | area | |||
| would be given BFR-id with as few as possible different SIs. | would be given BFR-ids with as few different SIs as possible. | |||
| Each area would only have to forward one or two packets instead of 4.</t> | Each area would only have to forward one or two packets instead of four.</t> | |||
| <t>Given how networks can grow over time, replication efficiency in | ||||
| <t>Given how networks can grow over time, replication efficiency in an area | an area | |||
| will then also go down over time when BFR-ids are only allocated sequentially, n etwork wide. | will then also go down over time when BFR-ids are only allocated sequentially, n etwork wide. | |||
| An area that initially only has BFR-id in one SI | An area that initially only has BFR-ids in one SI | |||
| might end up with many SIs over a longer period of growth. Allocating SIs | might end up with many SIs over a longer period of growth. Allocating SIs | |||
| to areas with initially sufficiently many spare bits for growths can help | to areas that initially have sufficiently many spare bits for growth can help | |||
| to alleviate this issue. Or renumber BFERs after network expansion. In | alleviate this issue. Alternatively, BFERs can be renumbered after network expan | |||
| this example one may consider to use 6 SIs and assign one to each area.</t> | sion. In | |||
| this example, one may consider using six SIs and assigning one to each area.</t> | ||||
| <t>This example shows that intelligent BFR-id allocation within at least | <t>This example shows that intelligent BFR-id allocation within at l | |||
| sub-domain 0 can even be helpful or even necessary in BIER.</t> | east | |||
| subdomain 0 can be helpful or even necessary in BIER.</t> | ||||
| </section> | </section> | |||
| <!-- with-bier --> | ||||
| <section anchor="with-bier-te" title="With BIER-TE"> | ||||
| <t>In BIER-TE one needs to determine a subset of the physical topology | <section anchor="with-bier-te" numbered="true" toc="default"> | |||
| <name>With BIER-TE</name> | ||||
| <t>In BIER-TE, one needs to determine a subset of the physical topol | ||||
| ogy | ||||
| and attached BFERs so that the "desired" representation of this topology | and attached BFERs so that the "desired" representation of this topology | |||
| and the BFER fit into a single BitString. This process needs to be | and the BFERs fit into a single BitString. This process needs to be | |||
| repeated until the whole topology is covered.</t> | repeated until the whole topology is covered.</t> | |||
| <t>Once bits/SIs are assigned to the topology and BFERs, BFR-ids are | ||||
| <t>Once bits/SIs are assigned to topology and BFERs, BFR-id is just a derived | just a derived | |||
| set of identifiers from the operator/BIER-TE Controller as explained above.</t> | set of identifiers from the operator / BIER-TE controller as explained above.</t | |||
| > | ||||
| <t>Every time that different sub-topologies have overlap, bits need to | <t>Whenever different subtopologies have overlap, bits need to | |||
| be repeated across the BitStrings, increasing the overall amount of bits | be repeated across the BitStrings, increasing the overall amount of bits | |||
| required across all BitString/SIs. In the worst case, one assigns random subsets | required across all BitStrings/SIs. In the worst case, one assigns random subset | |||
| of BFERs | s of BFERs | |||
| to different SIs. This will result in an outcome much worse than in (non-TE) BIE | to different SIs. This will result in an outcome much worse than in (non-TE) BIE | |||
| R: It | R: it | |||
| maximizes the amount of unnecessary topology overlap across SI and therefore | maximizes the amount of unnecessary topology overlap across SIs and therefore | |||
| reduces the number of BFER that can be reached across each individual SI. | reduces the number of BFERs that can be reached across each individual SI. | |||
| Intelligent BFER to SI assignment and selecting specific "desired" subtopologies | Intelligent BFER-to-SI assignment and selecting specific "desired" subtopologies | |||
| can | can | |||
| minimize this problem.</t> | minimize this problem.</t> | |||
| <t>To set up BIER-TE efficiently for the topology shown in <xref tar | ||||
| <t>To set up BIER-TE efficiently for the topology of <xref target="scaling-pictu | get="scaling-picture" format="default"/>, the following bit | |||
| re"/>, the following bit | ||||
| allocation method can be used. This method can easily be expanded to | allocation method can be used. This method can easily be expanded to | |||
| other, similarly structured larger topologies.</t> | other, similarly structured larger topologies.</t> | |||
| <t>Each area is allocated one or more SIs, depending on the number o | ||||
| <t>Each area is allocated one or more SIs depending on the number of future | f future | |||
| expected BFERs and number of bits required for the topology in the area. | expected BFERs and the number of bits required for the topology in the area. | |||
| In this example, 6 SIs, one per area.</t> | In this example, six SIs are used, one per area.</t> | |||
| <t>In addition, we use four bits in each SI:</t> | ||||
| <t>In addition, we use 4 bits in each SI: bia, bib, bea, beb: (b)it (i)ngress (a | <dl spacing="normal"> | |||
| ), | <dt>bia:</dt><dd>(b)it (i)ngress (a)</dd> | |||
| (b)it (i)ngress (b), (b)it (e)gress (a), (b)it (e)gress (b). These bits will be | <dt>bib:</dt><dd>(b)it (i)ngress (b)</dd> | |||
| used to pass BIER | <dt>bea:</dt><dd>(b)it (e)gress (a)</dd> | |||
| packets from any BFIR via any combination of ingress area a/b BFR and egress are | <dt>beb:</dt><dd>(b)it (e)gress (b)</dd> | |||
| a | </dl> | |||
| a/b BFR into a specific target area. These bits are then set up with the right | <t>These bits will be used to pass BIER | |||
| forward_routed() adjacencies on the BFIR and area edge BFR:</t> | packets from any BFIR via any combination of ingress area a/b BFRs and egress ar | |||
| ea | ||||
| <t>On all BFIRs in an area j|j=1...6, bia in each BIFT:SI is populated with the | a/b BFRs into a specific target area. These bits are then set up with the right | |||
| same | forward_routed() adjacencies on the BFIRs and area edge BFRs as follows.</t> | |||
| forward_routed(BFRja), and bib with forward_routed(BFRjb). On all area | <t>On all BFIRs in an area, j|j=1...6, bia in each BIFT:SI is popula | |||
| edge BFR, bea in BIFT:SI=k|k=1...6 is populated with forward_routed(BFRka) and | ted with the same | |||
| forward_routed(BFRja) and bib with forward_routed(BFRjb). On all area | ||||
| edge 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> | beb in BIFT:SI=k with forward_routed(BFRkb).</t> | |||
| <t>For BIER-TE forwarding of a packet to a subset of BFERs across al | ||||
| <t>For BIER-TE forwarding of a packet to a subset of BFERs across all areas, | l areas, | |||
| a BFIR would create at most 6 copies, with SI=1...SI=6, In each packet, | a BFIR would create at most six copies, with SI=1...SI=6. In each packet, | |||
| the bits indicate bits for topology and BFER in that topology plus the four bits | the BitString includes bits for one area and the BFERs in that area, plus the fo | |||
| ur bits | ||||
| to indicate whether to pass this packet via the ingress area a or b border BFR | 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 | 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 | 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. For BFER in the | area edge. Replication only happens inside the egress areas. For BFERs that are | |||
| same area as in the BFIR, these four bits are not used.</t> | in the | |||
| same area as the BFIR, these four bits are not used.</t> | ||||
| </section> | </section> | |||
| <!-- with-bier-te --> | ||||
| </section> | </section> | |||
| <!-- example --> | ||||
| <section anchor="summary" title="Summary"> | ||||
| <t>BIER-TE can, like BIER, support multiple SIs within a sub-domain. This allows | <section anchor="summary" numbered="true" toc="default"> | |||
| to apply the mapping BFR-id = SI * BSL + BP. This allows to re-use | <name>Summary</name> | |||
| the BIER architecture concept of BFR-id and therefore minimize BIER-TE specific | <t>BIER-TE can, like BIER, support multiple SIs within a subdomain. Th | |||
| functions in possible | is allows | |||
| application of the mapping BFR-id = SI * BSL + BP. This also permits the reuse o | ||||
| f | ||||
| the BIER architecture concept of BFR-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> | BIER layer control plane mechanisms with BIER-TE, including flow overlay methods and BIER header fields.</t> | |||
| <t>The number of BFIRs/BFERs possible in a subdomain is smaller than i | ||||
| <t>The number of BFIR/BFER possible in a sub-domain is smaller than in BIER | n BIER | |||
| because BIER-TE uses additional bits for topology.</t> | because BIER-TE uses additional bits for the topology.</t> | |||
| <t>Subdomains in BIER-TE can be used as they are in BIER to create mor | ||||
| <t>Sub-domains (SDs) in BIER-TE can be used like in BIER to create more efficien | e efficient | |||
| t | ||||
| replication to known subsets of BFERs.</t> | replication to known subsets of BFERs.</t> | |||
| <t>Assigning bits for BFERs intelligently into the right SI is more im | ||||
| <t>Assigning bits for BFERs intelligently into the right SI is more important in | portant in | |||
| BIER-TE than in BIER because of replication efficiency and overall amount of | BIER-TE than in BIER because of replication efficiency and the overall amount of | |||
| bits required.</t> | bits required.</t> | |||
| </section> | ||||
| </section> | ||||
| <!-- example --> | ||||
| </section> | </section> | |||
| <!-- mgmt-stuff --> | ||||
| </section> | </section> | |||
| <!-- controller-ops --> | ||||
| <section anchor="security" title="Security Considerations"> | ||||
| <t>If <xref target="RFC8296"/> is used, BIER-TE shares its security consideratio | ||||
| ns.</t> | ||||
| <t>BIER-TE shares the security considerations of BIER, <xref target="RFC8279"/>, | <section anchor="security" numbered="true" toc="default"> | |||
| with | <name>Security Considerations</name> | |||
| <t>If "<xref target="RFC8296" format="title"/>" <xref target="RFC8296" for | ||||
| mat="default"/> is used, its security considerations also apply to BIER-TE.</t> | ||||
| <t>The security considerations of "<xref target="RFC8279" format="title"/> | ||||
| " <xref target="RFC8279" format="default"/> also apply to BIER-TE, with | ||||
| the following overriding or additional considerations.</t> | the following overriding or additional considerations.</t> | |||
| <t>BIER-TE forwarding explicitly supports unicast "tunneling" of BIER pack | ||||
| <t>BIER-TE forwarding explicitly supports unicast "tunneling" of BIER packets vi | ets via forward_routed() | |||
| a forward_routed() | ||||
| adjacencies. The BIER domain security model is based on a subset of interfaces o n a BFR | adjacencies. The BIER domain security model is based on a subset of interfaces o n a BFR | |||
| that connect to other BFRs of the same BIER domain. For BIER-TE, this security m odel equally applies | that connect to other BFRs of the same BIER domain. For BIER-TE, this security m odel equally applies | |||
| to such unicast "tunneled" BIER packets. This does not only include the need to | to such unicast "tunneled" BIER packets. This not only includes the need to filt | |||
| filter | er | |||
| received unicast "tunneled" BIER packets to prohibit injection of such "tunneled | received unicast "tunneled" BIER packets to prohibit the injection of such "tunn | |||
| " BIER | eled" BIER | |||
| packets from outside the BIER domain, but also prohibiting forward_routed() adja | packets from outside the BIER domain but also the need to prohibit forward_route | |||
| cencies | d() adjacencies | |||
| to leak BIER packets from the BIER domain. It SHOULD be possible to configure | from leaking BIER packets from the BIER domain. It <bcp14>SHOULD</bcp14> be poss | |||
| interfaces to be part of a BIER domain solely for sending and receiving of unica | ible to configure | |||
| st | interfaces to be part of a BIER domain solely for sending and receiving unicast | |||
| "tunneled" BIER packets even if the interface can not send/receive BIER encapsul | "tunneled" BIER packets even if the interface cannot send/receive BIER encapsula | |||
| ated packets.</t> | ted packets.</t> | |||
| <t>In BIER, the standardized methods for the routing underlays are IGPs | ||||
| <t>In BIER, the standardized methods for the routing underlays are IGPs | ||||
| with extensions to distribute BFR-ids and BFR-prefixes. | with extensions to distribute BFR-ids and BFR-prefixes. | |||
| <xref target="RFC8401"/> specifies the extensions for IS-IS and <xref target="RF C8444"/> specifies the extensions for OSPF. | <xref target="RFC8401" format="default"/> specifies the extensions for IS-IS, an d <xref target="RFC8444" format="default"/> specifies the extensions for OSPF. | |||
| Attacking the protocols for the BIER routing underlay or (non-TE) BIER layer con trol | Attacking the protocols for the BIER routing underlay or (non-TE) BIER layer con trol | |||
| plane, or impairment of any BFR in a domain may lead to successful attacks | plane, or the impairment of any BFRs in a domain, may lead to successful attacks | |||
| against the results of the routing protocol, enabling DoS attacks against | against the information that BIER-TE learns from the routing protocol (routes, n | |||
| paths or the addressing (BFR-id, BFR-prefixes) used by BIER.</t> | ext hops, BFR-ids, ...), enabling DoS attacks against | |||
| paths or the addressing (BFR-ids, BFR-prefixes) used by BIER.</t> | ||||
| <t>The reference model for the BIER-TE layer control plane is a BIER-TE controll | <t>The reference model for the BIER-TE layer control plane is a BIER-TE co | |||
| er. | ntroller. | |||
| When such a controller is used, impairment of an individual BFR in a domain caus | When such a controller is used, the impairment of an individual BFR in a domain | |||
| es | causes | |||
| no impairment of the BIER-TE control plane on other BFRs. If a routing | 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 | 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, and | attack vector as in BIER, but only for BIER-TE forward_routed() adjacencies and | |||
| not other adjacencies.</t> | not other adjacencies.</t> | |||
| <t>Whereas IGP routing protocols are most often not well secured through | ||||
| <t>Whereas IGP routing protocols are most often not well secured through | ||||
| cryptographic authentication and confidentiality, communications between control lers and routers such as those | cryptographic authentication and confidentiality, communications between control lers and routers such as those | |||
| to be considered for the BIER-TE controller/control-plane can be and are much mo | to be considered for the BIER-TE controller / control plane can be, and are, muc | |||
| re commonly | h more commonly | |||
| secured with those security properties, for example by using Secure SHell (SSH), | secured with those security properties -- for example, by using "Secure Shell" ( | |||
| <xref target="RFC4253"/> for NETCONF (<xref target="RFC6242"/>), or via Transpo | SSH) <xref target="RFC4253" format="default"/> for NETCONF <xref target="RFC6242 | |||
| rt Layer Security (TLS), such as <xref target="RFC8253"/> for PCEP, <xref target | " format="default"/>; or via "Transport Layer Security" (TLS), such as <xref tar | |||
| ="RFC5440"/>, or <xref target="RFC7589"/> for NETCONF. BIER-TE controllers SHOUL | get="RFC8253" format="default"/> for PCEP <xref target="RFC5440" format="default | |||
| D use security equal to or better than these mechanisms.</t> | "/> or <xref target="RFC7589" format="default"/> for NETCONF. BIER-TE controller | |||
| s <bcp14>SHOULD</bcp14> use security equal to or better than these mechanisms.</ | ||||
| <t>When any of these security mechanisms/protocols are used for communications | t> | |||
| <t>When any of these security mechanisms/protocols are used for communicat | ||||
| ions | ||||
| between a BIER-TE controller and BFRs, their security considerations apply to BI ER-TE. | between a BIER-TE controller and BFRs, their security considerations apply to BI ER-TE. | |||
| In addition, the security considerations of PCE, <xref target="RFC4655"/> apply. | In addition, the security considerations of "<xref target="RFC4655" format="titl | |||
| </t> | e"/>" <xref target="RFC4655" format="default"/> apply.</t> | |||
| <t>The most important attack vector in BIER-TE is misconfiguration, | ||||
| <t>The most important attack vector in BIER-TE is misconfiguration, | either on the BFRs themselves or via the BIER-TE controller. | |||
| either on the BFR themselves or via the BIER-TE controller. | ||||
| Forwarding entries with DNC could be set up to create persistent loops, in which | 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 | packets only expire because of TTL. To minimize the impact of such attacks | |||
| (or more likely unintentional misconfiguration by operators and/or bad BIER-TE c ontroller software), | (or, more likely, unintentional misconfiguration by operators and/or bad BIER-TE controller software), | |||
| the BIER-TE forwarding rules are defined to be as strict in clearing | 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 | bits as possible. The clearing of all bits with an adjacency on | |||
| a BFR prohibits that a looping packet creates additional packet amplification | a BFR prohibits a looping packet from creating additional packet amplification | |||
| through the misconfigured loop on the packet's second or further times around th | through the misconfigured loop on the packet's second time or subsequent times a | |||
| e | round the | |||
| loop, because all relevant adjacency bits would have been cleared on the first r ound | loop, because all relevant adjacency bits would have been cleared on the first r ound | |||
| through the loop. In result, BIER-TE has the same degree of looping packets | through the loop. As a result, looping packets can occur in BIER-TE to the same | |||
| as possible with unintentional or malicious loops in the routing underlay | degree | |||
| with BIER or even with unicast traffic.</t> | as is possible with unintentional or malicious loops in the routing underlay wit | |||
| h BIER, or even with unicast traffic.</t> | ||||
| <t>Deployments where BIER-TE would likely be beneficial | <t>Deployments where BIER-TE would likely be beneficial | |||
| may include operational models where actual configuration changes | may include operational models where actual configuration changes | |||
| from the controller are only required during non-production phases of | from the controller are only required during non-production phases of | |||
| the network's life-cycle, such as in embedded networks or in manufacturing | the network's life cycle, e.g., in embedded networks or in manufacturing | |||
| networks during e.g. plant reworking/repairs. In these | networks during such activities as plant reworking or repairs. In these | |||
| type of deployments, configuration changes could be locked out when the | types of deployments, configuration changes could be locked out when the | |||
| network is in production state and could only be (re-)enabled through | network is in production state and could only be (re-)enabled through | |||
| reverting the network/installation into non-production state. Such | reverting the network/installation to non-production state. Such | |||
| security designs would not only allow to provide additional layers | security designs would not only allow a deployment to provide additional layers | |||
| of protection against configuration attacks, but would foremost | of protection against configuration attacks but would, first and foremost, | |||
| protect the active production process from such configuration attacks.</t> | protect the active production process from such configuration attacks.</t> | |||
| </section> | ||||
| </section> | <section anchor="iana" numbered="true" toc="default"> | |||
| <!-- security --> | <name>IANA Considerations</name> | |||
| <t>This document has no IANA actions.</t> | ||||
| <section anchor="iana" title="IANA Considerations"> | </section> | |||
| </middle> | ||||
| <t>This document requests no action by IANA. </t> | <back> | |||
| </section> | ||||
| <!-- iana --> | ||||
| <section anchor="ack" title="Acknowledgements"> | ||||
| <t>The authors would like to thank Greg Shepherd, Ijsbrand Wijnands, Neale Ran | ||||
| ns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, Carsten Borman and Wol | ||||
| fgang Braun for their reviews and suggestions.</t> | ||||
| <t> Special thanks to Xuesong Geng for shepherding the document and for IESG r | ||||
| eview/suggestions by Alvaro Retana (responsible AD/RTG), Benjamin Kaduk (SEC), T | ||||
| ommy 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), Mart | ||||
| in 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/Overv | ||||
| iew (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 point | ||||
| s.</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 wel | ||||
| l 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 abs | ||||
| tract 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 contr | ||||
| ol" 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 c | ||||
| learing 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 f | ||||
| or 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 a | ||||
| bout which BFR not | ||||
| only passes, but also receives the packet.</t> | ||||
| <t>7. (security considerations). Added paragraph about forward_routed() an | ||||
| d 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 happ | ||||
| ened after our IETF discussions documented in this doc, so will not add it to do | ||||
| c, but here is URL for folks interested: https://ieeexplore.ieee.org/document/84 | ||||
| 86415.</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/search | ||||
| ing/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 forwar | ||||
| ding 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 ha | ||||
| ve been day 0 problem in pseudocode written for -01, "~" was inserted in the wro | ||||
| ng one of two code lines. Also enhanced textual description and comments in pseu | ||||
| docode, 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 positio | ||||
| ns for lead-BFER hopefully better. Also detailled how it interacts with other op | ||||
| timizations and the type of payload BIER-TE packets may carry.</t> | ||||
| <t>4.4 (from Carsten Borman) changed spacing in pseudocode to be consisten | ||||
| t. 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 d | ||||
| isambiguated.</t> | ||||
| <t>enhanced text for hub-and-spoke to indicate we're only talking about hu | ||||
| b 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 co | ||||
| ntroller and BFR.</t> | ||||
| <t>10: AD review Alvaro Retana, summary:</t> | ||||
| <t>Note: rfcdiff shows more changes than actually exist because text moved aroun | ||||
| d.</t> | ||||
| <t>Summary:<list style="numbers"> | ||||
| <t>restructuring: merged all controller sections under common controller ops ma | ||||
| in 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 BIE | ||||
| R-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> | <displayreference target="I-D.ietf-roll-ccast" to="CONSTRAINED-CAST"/> | |||
| <t>Details:.</t> | <references> | |||
| <t>Throughout text: changed term spelling to rfc8279 - bit positions, sub-domai | <name>References</name> | |||
| n, ... (i).</t> | <references> | |||
| <t>Reset changed to clear, also DNR changed to DNC (Do Not Clear) (q).</t> | <name>Normative References</name> | |||
| <t>Abstract: Shortened. Removed name explanation note (Tree Engineering), (a).< | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| /t> | FC.2119.xml"/> | |||
| <t>1. Introduction -> Overview: Moved important explanation paragraph from abst | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| ract to Introduction. Fixed text, (a).</t> | FC.8279.xml"/> | |||
| <t> Added bullet point list explanation of structure of document (e).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t> Renamed to Overview because that is now more factually correct.</t> | FC.8174.xml"/> | |||
| <t>1.1. Fixed bug in example adding bit p15.(l).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>2. (New - Introduction): Moved section 1.1 - 1.3 (examples, comparison with | FC.8296.xml"/> | |||
| BIER-TE) from Introduction into new "Overview" section. Primarily so that "requi | </references> | |||
| rements language" section (at end of Introduction) is not in middle of document | <references> | |||
| after all the Introduction.</t> | <name>Informative References</name> | |||
| <t>2.1 Removed discussion of encap, moved to 4.2.2 (m).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>2.2 enhanced paragraph suggesting native/overlay topology types, also sugest | FC.4253.xml"/> | |||
| type hybrid (n).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>2.3 Overhauled comparison text BIER/BIER-TE, structured into common, differe | FC.4456.xml"/> | |||
| nt, not-required-by-te, integration-bier-bier-te. Changed title to "Relationship | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| " to allow including last point. (f).</t> | FC.4655.xml"/> | |||
| <t>2.4 moved Hardware forwarding comparison section into section 2 to allow coa | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| lescing of sections into section 5 about the controller operations (hardware for | FC.5440.xml"/> | |||
| warding was in the middle of it, wrong place). Shortened/improved third paragrap | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| h by pointing to BIFT as deciding element for selection between BIER/BIER-TE. Re | FC.6241.xml"/> | |||
| moved notion of experimentation (this now targets standard) (g).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3. (Components): Aligned component name and descriptions better with RFC8279 | FC.6242.xml"/> | |||
| . Now describe exactly same three layers. BIER layer constituted from BIER-TE c | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| ontrol plane and BIER-TE forwarding plane. BIER-TE controller is now simply comp | FC.7589.xml"/> | |||
| onent of BIER-TE control plane. (b).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.1. shortened/improved paragraph explaining use of SI:BP instead of also bf | FC.7752.xml"/> | |||
| r-id as index into BIFT, rewrote paragraph talking about reuse of BPs(o).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.2. rewrote explanation of BIER-TE control plane in the style of RFC8729 Se | FC.7950.xml"/> | |||
| ction 4.2 (BIER layer) with numbered points. Note that RFC8729 mixes control and | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| forwarding plane bullet points (this doc does not). Merged text from old sectio | FC.7988.xml"/> | |||
| ns 2.2.1 and 2.2.3 into list. (b).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.2.1. Expanded/improved explanation of BIER-TE Controller (b).</t> | FC.8040.xml"/> | |||
| <t>3.2.1.1. Added subsection for topology discovery and creation (d).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.2.1.2. Added subsection for engineered BitStrings as key novel aspect not | FC.8253.xml"/> | |||
| found in BIER. (X).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.3. Added numbered list for components of BIER-TE forwarding plane (complet | FC.8345.xml"/> | |||
| ing the comparable text from RFC8729 Section 4.2).</t> | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| <t>3.4 Alvaro does not mind additional example, fixed bugs.</t> | FC.8401.xml"/> | |||
| <t>3.5 Removed notion about using IGP BIER extensions for BIER-TE, such as BIFT | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| address ranges. After -10 making use of BIFT clearer, it now looks to authors a | FC.8402.xml"/> | |||
| s if use of IGP extensions would not be beneficial, as long as we do need to use | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| the BIER-TE controller, e.g. unlike in BIER, a BFR could not learn from the IGP | FC.8444.xml"/> | |||
| information what traffic to send towards a particular BIFT-ID, but instead that | <xi:include href="https://xml2rfc.ietf.org/public/rfc/bibxml/reference.R | |||
| is the core of what the controller needs to provide.</t> | FC.8556.xml"/> | |||
| <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 Alvar | ||||
| os 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. Ch | ||||
| anged 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 diffic | ||||
| ult to provide sufficient justification, derails from focus of section) (j).</t> | ||||
| <t>4.6. (Requirements) Restructured: Removed notion of "basic" BIER-TE forwardi | ||||
| ng, simply referring to it now as "mandatory" BIER-TE forwarding. Cleaned up tex | ||||
| t 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 acc | ||||
| ounted against Alvaros concern about scattering comparison (IMHO text already ha | ||||
| s little comparison, so title was misleading) (h).</t> | ||||
| <t>co-authors internal review:</t> | <!-- draft-ietf-teas-rfc3272bis (I-D Exists) | |||
| <t>4.4 Added xref to Figure 5.</t> | (have to do "long way" because Adrian Farrel is editor) --> | |||
| <t>5.2.1 Duplicated ring picture, added visuals for described miswiring (s).</t | <reference anchor="TE-OVERVIEW"> | |||
| > | <front> | |||
| <t>5.2.2 replace "topology" with graph (wrong word).</t> | <title>Overview and Principles of Internet Traffic Engineering</title> | |||
| <t>5.3.3 rewrote explanation of how to map BFR-id to SI:BP and assign them, cla | <author fullname="Adrian Farrel" surname="Farrel" initials="A" role="edito | |||
| rified BFR-id is option. Retitled to better explain scope of section.</t> | r"> | |||
| <t>5.3.4 Removed considerations in 5.3.4 for sharing BFR-id across BIER/BIER-TE | </author> | |||
| (t), changed title to explain how BFIR/BIER-TE controller interactions need som | <date month="September" day="11" year="2022" /> | |||
| e form of identifying BFR but this does not have to be BFR-id.</t> | </front> | |||
| <t>7. Added new security considerations (u).</t> | <seriesInfo name="Internet-Draft" value="draft-ietf-teas-rfc3272bis-21" /> | |||
| <t></t> | </reference> | |||
| <t>09: Incorporated fixes for feedback from Shepherd (Xuesong Geng).</t> | <!-- draft-ietf-bier-multicast-http-response (Expired) | |||
| <t> Added references for Bloom Filters and Rate Controlled Service Disc | (have to do "long way" to fix Toerless Eckert's initial) --> | |||
| iplines.</t> | <reference anchor="BIER-MCAST-OVERLAY"> | |||
| <t> 1.1 Fixed numbering of example 1 topology explanation. Improved lan | <front> | |||
| guage on second example (less abbreviating to avoid confusion about meaning).</t | <title>Applicability of BIER Multicast Overlay for Adaptive Streaming Serv | |||
| > | ices</title> | |||
| <t> 1.2 Improved explanation of BIER-TE topology, fixed terminology of | <author initials="D." surname="Trossen" fullname="Dirk Trossen"> | |||
| graphs (BIER-TE topology is a directed graph where the edges are the adjacencies | <organization>Huawei Technologies Duesseldorf GmbH</organization> | |||
| ).</t> | </author> | |||
| <t> 2.4 Fixed and amended routing underlay explanations: detailed why n | <author initials="A." surname="Rahman" fullname="Akbar Rahman"> | |||
| o need for BFER routing underlay routing protocol extensions, but potential to r | <organization>InterDigital Communications, LLC</organization> | |||
| e-use BIER routing underlay routing protocol extensions for non-BFER related ext | </author> | |||
| ensions.</t> | <author initials="C." surname="Wang" fullname="Chonggang Wang"> | |||
| <t> 3.1 Added explanation for VRF and its use in adjacencies.</t> | <organization>InterDigital Communications, LLC</organization> | |||
| <t>08: Incorporated (with hopefully acceptable fixes) for Lou suggested se | </author> | |||
| ction 2.5, TE considerations.</t> | <author initials="T." surname="Eckert" fullname="Toerless Eckert"> | |||
| <t> Fixes are primarily to the point to a) emphasize that BIER-TE does | <organization>Futurewei Technologies Inc.</organization> | |||
| not depend on the routing underlay unless forward_routed() adjacencies are used, | </author> | |||
| and b) that the allocation and tracking of resources does not explicitly have t | <date month="July" day="10" year="2021" /> | |||
| o be tied to BPs, because they are just steering labels. Instead, it would ideal | </front> | |||
| ly come from per-hop resource management that can be maintained only via local a | <seriesInfo name="Internet-Draft" value="draft-ietf-bier-multicast-http-respo | |||
| ccounting in the controller.</t> | nse-06" /> | |||
| <t>07: Further reworking text for Lou.</t> | </reference> | |||
| <t> Renamed BIER-PE to BIER-TE standing for "Tree Engineering" after vo | ||||
| tes from BIER WG.</t> | ||||
| <t> Removed section 1.1 (introduced by version 06) because not consider | ||||
| ed necessary in this doc by Lou (for framework doc).</t> | ||||
| <t> Added [RFC editor pls. remove] Section to explain name change to fu | ||||
| ture reviewers.</t> | ||||
| <t>06: Concern by Lou Berger re. BIER-TE as full traffic engineering solut | ||||
| ion.</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 controller to do this.</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 setu | ||||
| p.</t> | ||||
| <t> 4.7 Added missing details from example to avoid confusion with rout | ||||
| ed adjacencies, also compressed explanatory text and better justification why se | ||||
| ed 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 forwar | ||||
| ding difference. Explained benefit of BIER-TE per-BP forwarding being independen | ||||
| t of forwarding for other BPs.</t> | ||||
| <t> Part 1:</t> | ||||
| <t> Explicitly ue forwarded_connected adjcency in ECMP adjcency example | ||||
| s to avoid confusion.</t> | ||||
| <t> 4.3 Add picture as example for leav vs. non-leaf BFR in topology. I | ||||
| mproved description.</t> | ||||
| <t> 4.5 Exampe for traffic that can be broadcast -> for single BP in hu | ||||
| b&spoke.</t> | ||||
| <t> 4.8.1 Simplified example picture for routed adjacency, explanatory | ||||
| text.</t> | ||||
| <t> Review from Dirk Trossen:</t> | ||||
| <t> Fixed up explanation of ICC 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 ECM | ||||
| P algorithm.</t> | ||||
| <t> Review from Dirk Trossen:</t> | ||||
| <t> 1. Added mentioning of prior work for traffic engineered paths with | ||||
| bloom filters.</t> | ||||
| <t> 2. Changed title from layers to components and added "BIER-TE contr | ||||
| ol 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 forgot to mention DNR here).</t> | ||||
| <t> 3.4. Added text saying this section will be removed unless IESG rev | ||||
| iew finds enough redeeming value in this example given how -03 introduced sectio | ||||
| n 1.1 with basic examples.</t> | ||||
| <t> 7.2. Removed explicit numbers 20%/80% for number of topology bits i | ||||
| n BIER-TE, replaced with more vague (high/low) description, because we do not ha | ||||
| ve good reference material Added text saying this section will be removed unless | ||||
| IESG review finds enough redeeming value in this example given how -03 introduc | ||||
| ed 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 to be more explanatory. Removed mentioning of FRR | ||||
| (not concluded on so far).</t> | ||||
| <t> Added new text into Introduction section because the text was too d | ||||
| ifficult to jump into | ||||
| (too many forward pointers). This primarily consists of examples an | ||||
| d the early introduction | ||||
| of the 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 and to | ||||
| make idnits happy.</t> | ||||
| <t> Split references into normative / informative, added references.</t | ||||
| > | ||||
| <t>02: Refresh after IETF104 discussion: changed intended status back to s | ||||
| tandard. Reasoning:</t> | ||||
| <t> Tighter review of standards document == ensures arch will be better | ||||
| prepared for possible 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 ti | ||||
| me to make it qualify to go to standards track. Also, the levels of support intr | ||||
| oduced in -01 rev. should allow all BIER forwarding engines to also be able to s | ||||
| upport 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 forward | ||||
| ing features as MUST.</t> | ||||
| <t> - reworked comparison with BIER forwarding section to only summarize a | ||||
| nd 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 tha | ||||
| t shows the complete set of BIER-TE forwarding options and simplification/optimi | ||||
| zation possible vs. BIER forwarding. Removed MyBitsOfInterest (was pure optimiza | ||||
| tion).</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 refer | ||||
| ences, mod auth association.</t> | ||||
| <t> - Source now on https://www.github.com/toerless/bier-te-arch</t> | ||||
| <t> - Please open issues on the github for change/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 section to new 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) fro | ||||
| m bier-arch-03</t> | ||||
| <t> - Moved "BIER-TE and existing FRR to new draft</t> | ||||
| <t> - Moved "BIER-TE and Segment Routing" section one level up</t> | ||||
| <t> - Thus, removed "Further considerations" that only contained this sect | ||||
| ion</t> | ||||
| <t> - Added Changes for version 04</t> | ||||
| <t></t> | ||||
| <t>03: Updated the FRR section. Added examples for FRR key concepts. Add | ||||
| ed BIER-in-BIER tunneling as option for tunnels in backup paths. BIFT structure | ||||
| is expanded and contains an additional match field to support full node protect | ||||
| ion with BIER-TE FRR.</t> | ||||
| <t>03: Updated FRR section. Explanation how BIER-in-BIER encapsulation pr | ||||
| ovides P2MP protection for node failures even though the routing underlay does n | ||||
| ot provide P2MP.</t> | ||||
| <t>02: Changed the definition of BIFT to be more inline with BIER. In revs | ||||
| . up to -01, the idea was that a BIFT has only entries for a single BitString, a | ||||
| nd every SI and sub-domain would be a separate BIFT. In BIER, each BIFT covers a | ||||
| ll SI. This is now also how we define it in BIER-TE.</t> | ||||
| <t>02: Added <xref target="mgmt-stuff"/> to explain the use of SI, sub-dom | ||||
| ains 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 ri | ||||
| ng nodes.</t> | ||||
| <t>01: Fixed BFIR -> BFER for section 4.3.</t> | ||||
| <t>01: Added explanation of SI, difference to BIER ECMP, 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> | <!-- draft-eckert-bier-te-frr (Expired) | |||
| (have to do "long way" to fix Toerless Eckert's initial) --> | ||||
| <reference anchor="BIER-TE-PROTECTION"> | ||||
| <front> | ||||
| <title>Protection Methods for BIER-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 of Tuebingen</organization> | ||||
| </author> | ||||
| <author initials="M." surname="Menth" fullname="Michael Menth"> | ||||
| <organization>University of Tuebingen</organization> | ||||
| </author> | ||||
| <date month="March" day="5" year="2018" /> | ||||
| </front> | ||||
| <seriesInfo name="Internet-Draft" value="draft-eckert-bier-te-frr-03" /> | ||||
| </reference> | ||||
| <back> | <!-- draft-ietf-roll-ccast (Expired) --> | |||
| <xi:include href="https://datatracker.ietf.org/doc/bibxml3/reference.I-D.ietf-ro | ||||
| ll-ccast.xml"/> | ||||
| <references title="Normative References"> | <!-- draft-ietf-bier-te-yang (I-D Exists) | |||
| &RFC2119; | (have to do "long way" to get correct capping of "Hu" and fix | |||
| &RFC8279; | erroneous "chenhuanan" for H. Chen --> | |||
| &RFC8174; | <reference anchor="BIER-TE-YANG"> | |||
| &RFC8296; | <front> | |||
| </references> | <title>A YANG data model for Tree Engineering for Bit Index Explicit Repli | |||
| cation (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> | ||||
| <references title="Informative References"> | <!-- draft-ietf-bier-non-mpls-bift-encoding (Expired) | |||
| &RFC4253; | (have to do "long way" to get "IJ. Wijnands" and "M. Mishra") --> | |||
| &RFC4456; | <reference anchor="NON-MPLS-BIER-ENCODING"> | |||
| &RFC4655; | <front> | |||
| &RFC5440; | <title>An Optional Encoding of the BIFT-id Field in the non-MPLS BIER Enca | |||
| &RFC6241; | psulation</title> | |||
| &RFC6242; | <author fullname="IJsbrand Wijnands" surname="Wijnands" initials="IJ"></aut | |||
| &RFC7589; | hor> | |||
| &RFC7752; | <author fullname="Mankamana Mishra" surname="Mishra" initials="M"></author> | |||
| &RFC7950; | <author fullname="Xiaohu Xu" surname="Xu" initials="X"></author> | |||
| &RFC7988; | <author fullname="Hooman Bidgoli" surname="Bidgoli" initials="H"></author> | |||
| &RFC8040; | <date month="May" day="30" year="2021" /> | |||
| &RFC8253; | </front> | |||
| &RFC8345; | <seriesInfo name="Internet-Draft" value="draft-ietf-bier-non-mpls-bift-encoding | |||
| &RFC8401; | -04" /> | |||
| &RFC8402; | </reference> | |||
| &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"?> | <reference anchor="ICC" target="https://ieeexplore.ieee.org/document/751 | |||
| <?rfc include="reference.I-D.ietf-bier-multicast-http-response"?> | 1036"> | |||
| <?rfc include="reference.I-D.eckert-bier-te-frr"?> | <front> | |||
| <?rfc include="reference.I-D.ietf-roll-ccast"?> | <title> | |||
| <?rfc include="reference.I-D.ietf-bier-te-yang"?> | ||||
| <?rfc include="reference.I-D.ietf-bier-non-mpls-bift-encoding"?> | ||||
| <reference anchor="ICC" target="https://ieeexplore.ieee.org/document/75110 | ||||
| 36"> | ||||
| <front> | ||||
| <title> | ||||
| Stateless multicast switching in software defined networks | Stateless multicast switching in software defined networks | |||
| </title> | </title> | |||
| <author initials="M. J." surname="Reed"/> | <author initials="M. J." surname="Reed"/> | |||
| <author initials="M." surname="Al-Naday"/> | <author initials="M." surname="Al-Naday"/> | |||
| <author initials="N." surname="Thomos"/> | <author initials="N." surname="Thomos"/> | |||
| <author initials="D." surname="Trossen"/> | <author initials="D." surname="Trossen"/> | |||
| <author initials="G." surname="Petropoulos"/> | <author initials="G." surname="Petropoulos"/> | |||
| <author initials="S." surname="Spirou"/> | <author initials="S." surname="Spirou"/> | |||
| <date month="May" year="2016"/> | <date month="May" year="2016"/> | |||
| </front> | </front> | |||
| <seriesInfo name="" value="IEEE International Conference on Communicatio | <refcontent>IEEE International Conference on Communications (ICC), Kua | |||
| ns (ICC), Kuala Lumpur, Malaysia, 2016"/> | la Lumpur, Malaysia</refcontent> | |||
| </reference> | <seriesInfo name="DOI" value="10.1109/ICC.2016.7511036"/> | |||
| </reference> | ||||
| <reference anchor="RCSD94" target="https://dl.acm.org/doi/10.5555/2692227. | <reference anchor="RCSD94" target="https://content.iospress.com/articles | |||
| 2692232"> | /journal-of-high-speed-networks/jhs3-4-05"> | |||
| <front> | <front> | |||
| <title> | <title> | |||
| Rate-Controlled Service Disciplines | Rate-Controlled Service Disciplines | |||
| </title> | </title> | |||
| <author initials="H." surname="Zhang"/> | <author initials="H." surname="Zhang"/> | |||
| <author initials="D." surname="Domenico"/> | <author initials="D." surname="Ferrari"/> | |||
| <date month="May" year="1994"/> | <date month="October" year="1994"/> | |||
| </front> | </front> | |||
| <seriesInfo name="" value="Journal of High-Speed Networks, 1994"/> | <refcontent>Journal of High Speed Networks, Volume 3, Issue 4, pp. 389 | |||
| </reference> | -412</refcontent> | |||
| <seriesInfo name="DOI" value="10.3233/JHS-1994-3405"/> | ||||
| <reference anchor="Bloom70"> | </reference> | |||
| <front> | ||||
| <title>Space/time trade-offs in hash coding with allowable errors</tit | ||||
| le> | ||||
| <author initials="B. H." surname="Bloom" fullname="Burton H. Bloom"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="1970"/> | ||||
| </front> | ||||
| <seriesInfo name="Comm. ACM " value="13(7):422-6"/> | ||||
| <format type="PDF" target="https://dl.acm.org/doi/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"?> --> | ||||
| <!----> | <reference anchor="Bloom70" target="https://dl.acm.org/doi/10.1145/36268 | |||
| 6.362692"> | ||||
| <front> | ||||
| <title>Space/time trade-offs in hash coding with allowable errors</t | ||||
| itle> | ||||
| <author initials="B. H." surname="Bloom" fullname="Burton H. Bloom"> | ||||
| <organization/> | ||||
| </author> | ||||
| <date month="July" year="1970"/> | ||||
| </front> | ||||
| <refcontent>Comm. ACM 13(7):422-6</refcontent> | ||||
| <seriesInfo name="DOI" value="10.1145/362686.362692"/> | ||||
| </reference> | ||||
| </references> | </references> | |||
| </references> | ||||
| <section anchor="SR" title="BIER-TE and Segment Routing (SR)"> | <section anchor="SR" numbered="true" toc="default"> | |||
| <name>BIER-TE and Segment Routing (SR)</name> | ||||
| <t>SR (<xref target="RFC8402"/>) aims to enable lightweight path steering | <t>SR <xref target="RFC8402" format="default"/> aims to enable lightweight | |||
| via loose source routing. Compared to its more heavy-weight predecessor RSVP-TE, | path steering | |||
| SR does for example not require per-path signaling to each of these hops.</t> | via loose source routing. For example, compared to its more heavyweight predeces | |||
| sor, RSVP-TE, SR does not require per-path signaling to each of these hops.</t> | ||||
| <t>BIER-TE supports the same design philosophy for multicast. | <t>BIER-TE supports the same design philosophy for multicast. | |||
| Like in SR, it relies on source-routing - | Like SR, BIER-TE</t> | |||
| via the definition of a BitString. Like SR, it only requires to consider | <ul spacing="normal"> | |||
| the "hops" on which either replication has to happen, or across which the | <li>relies on source routing (via a BitString), and</li> | |||
| traffic should be steered (even without replication). Any other hops can | <li>only requires consideration of | |||
| the "hops" either (1) on which replication has to happen or (2) across which the | ||||
| traffic should be steered (even without replication).</li> | ||||
| </ul> | ||||
| <t>Any other hops can | ||||
| be skipped via the use of routed adjacencies.</t> | be skipped via the use of routed adjacencies.</t> | |||
| <t>BIER-TE "bit positions" (BPs) can be understood as the BIER-TE equivale | ||||
| <t>BIER-TE bit position (BP) can be understood as the BIER-TE equivalent of | nt of | |||
| "forwarding segments" in SR, but they have a different scope than SR forwarding | "forwarding segments" in SR, but they have a different scope than do forwarding | |||
| segments. Whereas forwarding segments in SR are global or local, BPs in BIER-TE | segments in SR. Whereas forwarding segments in SR are global or local, BPs in BI | |||
| have a scope that is the group of BFR(s) that have adjacencies for this BP in | ER-TE | |||
| their BIFT. This can be called "adjacency" scoped forwarding segments.</t> | have a scope that is comprised of one or more BFRs that have adjacencies for the | |||
| BPs in | ||||
| <t>Adjacency scope could be global, but then every BFR would need an adjacency | their BIFTs. These segments can be called "adjacency-scoped" forwarding segments | |||
| for this BP, for example a forward_routed() adjacency with encapsulation to | .</t> | |||
| the global SR SID of the destination. Such a BP would always result in ingress | <t>Adjacency scope could be global, but then every BFR would need an adjac | |||
| replication though (as in <xref target="RFC7988"/>). The first BFR encountering | ency | |||
| this BP would directly | for a given BP -- for example, a forward_routed() adjacency with encapsulation t | |||
| replicate to it. Only by using non-global adjacency scope for BPs can | o | |||
| traffic be steered and replicated on non-ingress BFR.</t> | the global SR "Segment Identifier" (SID) of the destination. Such a BP would alw | |||
| ays result in ingress | ||||
| <t>SR can naturally be combined with BIER-TE and help to optimize it. For exampl | replication, though (as in <xref target="RFC7988" format="default"/>). The first | |||
| e, | BFR encountering this BP would directly | |||
| replicate traffic on it. Only by using non-global adjacency scope for BPs can | ||||
| traffic be steered and replicated on a non-BFIR.</t> | ||||
| <t>SR can naturally be combined with BIER-TE and can help optimize it. For | ||||
| example, | ||||
| instead of defining bit positions for non-replicating hops, it is equally | instead of defining bit positions for non-replicating hops, it is equally | |||
| possible to use segment routing encapsulations (e.g. SR-MPLS label stacks) | possible to use SR encapsulations (e.g., SR-MPLS label stacks) | |||
| for the encapsulation of "forward_routed" adjacencies.</t> | for the encapsulation of "forward_routed()" adjacencies.</t> | |||
| <t>Note that (non-TE) BIER itself can also be seen as being similar to SR. | ||||
| <t>Note that (non-TE) BIER itself can also be seen to be similar to SR. BIER BPs | BIER BPs act | |||
| act | as global destination Node-SIDs, and the BIER BitString is simply a highly optim | |||
| as global destination Node-SIDs and the BIER BitString is simply a highly optimi | ized | |||
| zed | ||||
| mechanism to indicate multiple such SIDs and let the network take care of effect ively | mechanism to indicate multiple such SIDs and let the network take care of effect ively | |||
| replicating the packet hop-by-hop to each destination Node-SID. What BIER does | replicating the packet hop by hop to each destination Node-SID. BIER does not a | |||
| not allow is to | llow the | |||
| indicate intermediate hops, or in terms of SR the ability to indicate a sequence | indication of intermediate hops or, in terms of SR, the ability to indicate a se | |||
| of SID | quence of SIDs | |||
| to reach the destination. This is what BIER-TE and its adjacency scoped BP enabl | to reach the destination. On the other hand, BIER-TE and its adjacency-scoped BP | |||
| es.</t> | s provide these capabilities.</t> | |||
| </section> | ||||
| </section> | <section anchor="ack" numbered="false" toc="default"> | |||
| <!-- SR --> | <name>Acknowledgements</name> | |||
| <t>The authors would like to thank <contact fullname="Greg Shepherd"/>, <c | ||||
| ontact 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 t | ||||
| his document. Special thanks also for IESG review/suggestions by <contact fulln | ||||
| ame="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="Ma | ||||
| rtin Vigoureux"/> (RTG), <contact fullname="Robert Wilton"/> (OPS), <contact ful | ||||
| lname="Erik Kline"/> (INT), <contact fullname="Lars Eggert"/> (GEN), <contact fu | ||||
| llname="Roman Danyliw"/> (SEC), <contact fullname="Ines Robles"/> (RTGDIR), <con | ||||
| tact fullname="Robert Sparks"/> (Gen-ART), <contact fullname="Yingzhen Qu"/> (RT | ||||
| GDIR), and <contact fullname="Martin Duke"/> (TSV).</t> | ||||
| </section> | ||||
| </back> | </back> | |||
| </rfc> | </rfc> | |||
| End of changes. 277 change blocks. | ||||
| 2399 lines changed or deleted | 1913 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. | ||||