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. |