rfc9262.original | rfc9262.txt | |||
---|---|---|---|---|
Network Working Group T.T.E. Eckert, Ed. | Internet Engineering Task Force (IETF) T. Eckert, Ed. | |||
Internet-Draft Futurewei | Request for Comments: 9262 Futurewei | |||
Intended status: Standards Track M.M. Menth | Category: Standards Track M. Menth | |||
Expires: 27 October 2022 University of Tuebingen | ISSN: 2070-1721 University of Tuebingen | |||
G.C. Cauchie | G. Cauchie | |||
KOEVOO | KOEVOO | |||
April 2022 | October 2022 | |||
Tree Engineering for Bit Index Explicit Replication (BIER-TE) | Tree Engineering for Bit Index Explicit Replication (BIER-TE) | |||
draft-ietf-bier-te-arch-13 | ||||
Abstract | Abstract | |||
This memo describes per-packet stateless strict and loose path | This memo describes per-packet stateless strict and loose path | |||
steered replication and forwarding for "Bit Index Explicit | steered replication and forwarding for "Bit Index Explicit | |||
Replication" (BIER, RFC8279) packets. It is called BIER Tree | Replication" (BIER) packets (RFC 8279); it is called "Tree | |||
Engineering (BIER-TE) and is intended to be used as the path steering | Engineering for Bit Index Explicit Replication" (BIER-TE) and is | |||
mechanism for Traffic Engineering with BIER. | intended to be used as the path steering mechanism for Traffic | |||
Engineering with BIER. | ||||
BIER-TE introduces a new semantic for "bit positions" (BP). They | BIER-TE introduces a new semantic for "bit positions" (BPs). These | |||
indicate adjacencies of the network topology, as opposed to (non-TE) | BPs indicate adjacencies of the network topology, as opposed to (non- | |||
BIER in which BPs indicate "Bit-Forwarding Egress Routers" (BFER). A | TE) BIER in which BPs indicate "Bit-Forwarding Egress Routers" | |||
BIER-TE packets BitString therefore indicates the edges of the (loop- | (BFERs). A BIER-TE "packets BitString" therefore indicates the edges | |||
free) tree that the packet is forwarded across by BIER-TE. BIER-TE | of the (loop-free) tree across which the packets are forwarded by | |||
can leverage BIER forwarding engines with little changes. Co- | BIER-TE. BIER-TE can leverage BIER forwarding engines with little | |||
existence of BIER and BIER-TE forwarding in the same domain is | changes. Co-existence of BIER and BIER-TE forwarding in the same | |||
possible, for example by using separate BIER "sub-domains" (SDs). | domain is possible -- for example, by using separate BIER | |||
Except for the optional routed adjacencies, BIER-TE does not require | "subdomains" (SDs). Except for the optional routed adjacencies, | |||
a BIER routing underlay, and can therefore operate without depending | BIER-TE does not require a BIER routing underlay and can therefore | |||
on an "Interior Gateway Routing protocol" (IGP). | operate without depending on a routing protocol such as the "Interior | |||
Gateway Protocol" (IGP). | ||||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 3 October 2022. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9262. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2022 IETF Trust and the persons identified as the | Copyright (c) 2022 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
Table of Contents | Table of Contents | |||
1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Overview | |||
1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 2. Introduction | |||
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. Requirements Language | |||
2.1. Basic Examples . . . . . . . . . . . . . . . . . . . . . 5 | 2.2. Basic Examples | |||
2.2. BIER-TE Topology and adjacencies . . . . . . . . . . . . 8 | 2.3. BIER-TE Topology and Adjacencies | |||
2.3. Relationship to BIER . . . . . . . . . . . . . . . . . . 9 | 2.4. Relationship to BIER | |||
2.4. Accelerated/Hardware forwarding comparison . . . . . . . 11 | 2.5. Accelerated Hardware Forwarding Comparison | |||
3. Components . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3. Components | |||
3.1. The Multicast Flow Overlay . . . . . . . . . . . . . . . 12 | 3.1. The Multicast Flow Overlay | |||
3.2. The BIER-TE Control Plane . . . . . . . . . . . . . . . . 12 | 3.2. The BIER-TE Control Plane | |||
3.2.1. The BIER-TE Controller . . . . . . . . . . . . . . . 14 | 3.2.1. The BIER-TE Controller | |||
3.2.1.1. BIER-TE Topology discovery and creation . . . . . 14 | 3.2.1.1. BIER-TE Topology Discovery and Creation | |||
3.2.1.2. Engineered Trees via BitStrings . . . . . . . . . 15 | 3.2.1.2. Engineered Trees via BitStrings | |||
3.2.1.3. Changes in the network topology . . . . . . . . . 16 | 3.2.1.3. Changes in the Network Topology | |||
3.2.1.4. Link/Node Failures and Recovery . . . . . . . . . 16 | 3.2.1.4. Link/Node Failures and Recovery | |||
3.3. The BIER-TE Forwarding Plane . . . . . . . . . . . . . . 16 | 3.3. The BIER-TE Forwarding Plane | |||
3.4. The Routing Underlay . . . . . . . . . . . . . . . . . . 17 | 3.4. The Routing Underlay | |||
3.5. Traffic Engineering Considerations . . . . . . . . . . . 17 | 3.5. Traffic Engineering Considerations | |||
4. BIER-TE Forwarding . . . . . . . . . . . . . . . . . . . . . 18 | 4. BIER-TE Forwarding | |||
4.1. The BIER-TE Bit Index Forwarding Table (BIFT) . . . . . . 18 | 4.1. The BIER-TE Bit Index Forwarding Table (BIFT) | |||
4.2. Adjacency Types . . . . . . . . . . . . . . . . . . . . . 20 | 4.2. Adjacency Types | |||
4.2.1. Forward Connected . . . . . . . . . . . . . . . . . . 21 | 4.2.1. Forward Connected | |||
4.2.2. Forward Routed . . . . . . . . . . . . . . . . . . . 21 | 4.2.2. Forward Routed | |||
4.2.3. ECMP . . . . . . . . . . . . . . . . . . . . . . . . 21 | 4.2.3. ECMP | |||
4.2.4. Local Decap(sulation) . . . . . . . . . . . . . . . . 22 | 4.2.4. Local Decap(sulation) | |||
4.3. Encapsulation / Co-existence with BIER . . . . . . . . . 22 | 4.3. Encapsulation / Co-existence with BIER | |||
4.4. BIER-TE Forwarding Pseudocode . . . . . . . . . . . . . . 23 | 4.4. BIER-TE Forwarding Pseudocode | |||
4.5. BFR Requirements for BIER-TE forwarding . . . . . . . . . 26 | 4.5. BFR Requirements for BIER-TE Forwarding | |||
5. BIER-TE Controller Operational Considerations . . . . . . . . 27 | 5. BIER-TE Controller Operational Considerations | |||
5.1. Bit Position Assignments . . . . . . . . . . . . . . . . 27 | 5.1. Bit Position Assignments | |||
5.1.1. P2P Links . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.1. P2P Links | |||
5.1.2. BFER . . . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.2. BFERs | |||
5.1.3. Leaf BFERs . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.3. Leaf BFERs | |||
5.1.4. LANs . . . . . . . . . . . . . . . . . . . . . . . . 29 | 5.1.4. LANs | |||
5.1.5. Hub and Spoke . . . . . . . . . . . . . . . . . . . . 30 | 5.1.5. Hub and Spoke | |||
5.1.6. Rings . . . . . . . . . . . . . . . . . . . . . . . . 30 | 5.1.6. Rings | |||
5.1.7. Equal Cost MultiPath (ECMP) . . . . . . . . . . . . . 31 | 5.1.7. Equal-Cost Multipath (ECMP) | |||
5.1.8. Forward Routed adjacencies . . . . . . . . . . . . . 34 | 5.1.8. Forward Routed Adjacencies | |||
5.1.8.1. Reducing bit positions . . . . . . . . . . . . . 34 | 5.1.8.1. Reducing Bit Positions | |||
5.1.8.2. Supporting nodes without BIER-TE . . . . . . . . 35 | 5.1.8.2. Supporting Nodes without BIER-TE | |||
5.1.9. Reuse of bit positions (without DNC) . . . . . . . . 35 | 5.1.9. Reuse of Bit Positions (without DNC) | |||
5.1.10. Summary of BP optimizations . . . . . . . . . . . . . 36 | 5.1.10. Summary of BP Optimizations | |||
5.2. Avoiding duplicates and loops . . . . . . . . . . . . . . 37 | 5.2. Avoiding Duplicates and Loops | |||
5.2.1. Loops . . . . . . . . . . . . . . . . . . . . . . . . 38 | 5.2.1. Loops | |||
5.2.2. Duplicates . . . . . . . . . . . . . . . . . . . . . 38 | 5.2.2. Duplicates | |||
5.3. Managing SI, sub-domains and BFR-ids . . . . . . . . . . 39 | 5.3. Managing SIs, Subdomains, and BFR-ids | |||
5.3.1. Why SI and sub-domains . . . . . . . . . . . . . . . 39 | 5.3.1. Why SIs and Subdomains? | |||
5.3.2. Assigning bits for the BIER-TE topology . . . . . . . 40 | 5.3.2. Assigning Bits for the BIER-TE Topology | |||
5.3.3. Assigning BFR-id with BIER-TE . . . . . . . . . . . . 41 | 5.3.3. Assigning BFR-ids with BIER-TE | |||
5.3.4. Mapping from BFR to BitStrings with BIER-TE . . . . . 42 | 5.3.4. Mapping from BFRs to BitStrings with BIER-TE | |||
5.3.5. Assigning BFR-ids for BIER-TE . . . . . . . . . . . . 43 | 5.3.5. Assigning BFR-ids for BIER-TE | |||
5.3.6. Example bit allocations . . . . . . . . . . . . . . . 43 | 5.3.6. Example Bit Allocations | |||
5.3.6.1. With BIER . . . . . . . . . . . . . . . . . . . . 43 | 5.3.6.1. With BIER | |||
5.3.6.2. With BIER-TE . . . . . . . . . . . . . . . . . . 44 | 5.3.6.2. With BIER-TE | |||
5.3.7. Summary . . . . . . . . . . . . . . . . . . . . . . . 45 | 5.3.7. Summary | |||
6. Security Considerations . . . . . . . . . . . . . . . . . . . 46 | 6. Security Considerations | |||
7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 7. IANA Considerations | |||
8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47 | 8. References | |||
9. Change log [RFC Editor: Please remove] . . . . . . . . . . . 48 | 8.1. Normative References | |||
10. References . . . . . . . . . . . . . . . . . . . . . . . . . 61 | 8.2. Informative References | |||
10.1. Normative References . . . . . . . . . . . . . . . . . . 61 | Appendix A. BIER-TE and Segment Routing (SR) | |||
10.2. Informative References . . . . . . . . . . . . . . . . . 61 | Acknowledgements | |||
Appendix A. BIER-TE and Segment Routing (SR) . . . . . . . . . . 64 | Authors' Addresses | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 65 | ||||
1. Overview | 1. Overview | |||
BIER-TE is based on the (non-TE) BIER architecture, terminology and | "Tree Engineering for Bit Index Explicit Replication" (BIER-TE) is | |||
packet formats as described in [RFC8279] and [RFC8296]. This | based on the (non-TE) BIER architecture, terminology, and packet | |||
document describes BIER-TE in the expectation that the reader is | formats as described in [RFC8279] and [RFC8296]. This document | |||
familiar with these two documents. | describes BIER-TE, with the expectation that the reader is familiar | |||
with these two documents. | ||||
BIER-TE introduces a new semantic for "bit positions" (BP). They | ||||
indicate adjacencies 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 indicates the edges of the (loop- | ||||
free) tree that the packet is forwarded across by BIER-TE. With | ||||
BIER-TE, the "Bit Index Forwarding Table" (BIFT) of each "Bit | ||||
Forwarding Router" (BFR) is only populated with BP that are adjacent | ||||
to the BFR in the BIER-TE Topology. Other BPs are empty in the BIFT. | ||||
The BFR replicate and forwards BIER packets to adjacent BPs that are | BIER-TE introduces a new semantic for "bit positions" (BPs). These | |||
set in the packet. BPs are normally also cleared upon forwarding to | BPs indicate adjacencies of the network topology, as opposed to (non- | |||
avoid duplicates and loops. | TE) BIER in which BPs indicate "Bit-Forwarding Egress Routers" | |||
(BFERs). A BIER-TE "packets BitString" therefore 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 Router" (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. | ||||
BIER-TE can leverage BIER forwarding engines with little or no | BIER-TE can leverage BIER forwarding engines with little or no | |||
changes. It can also co-exist with BIER forwarding in the same | changes. It can also co-exist with BIER forwarding in the same | |||
domain, for example by using separate BIER sub-domains. Except for | domain -- for example, by using separate BIER subdomains. Except for | |||
the optional routed adjacencies, BIER-TE does not require a BIER | the optional routed adjacencies, BIER-TE does not require a BIER | |||
routing underlay, and can therefore operate without depending on an | routing underlay and can therefore operate without depending on a | |||
"Interior Gateway Routing protocol" (IGP). | routing protocol such as the "Interior Gateway Protocol" (IGP). | |||
This document is structured as follows: | This document is structured as follows: | |||
* Section 2 introduces BIER-TE with two forwarding examples, | * Section 2 introduces BIER-TE with two forwarding examples, | |||
followed by an introduction of the new concepts of the BIER-TE | followed by an introduction to the new concepts of the BIER-TE | |||
(overlay) topology and finally a summary of the relationship | (overlay) topology, and finally a summary of the relationship | |||
between BIER and BIER-TE and a discussion of accelerated hardware | between BIER and BIER-TE and a discussion of accelerated hardware | |||
forwarding. | forwarding. | |||
* Section 3 describes the components of the BIER-TE architecture, | * Section 3 describes the components of the BIER-TE architecture: | |||
Flow overlay, BIER-TE layer with the BIER-TE control plane | the multicast flow overlay, the BIER-TE layer with the BIER-TE | |||
(including the BIER-TE controller) and BIER-TE forwarding plane, | control plane (including the BIER-TE controller), the BIER-TE | |||
and the routing underlay. | forwarding plane, and the routing underlay. | |||
* Section 4 specifies the behavior of the BIER-TE forwarding plane | * Section 4 specifies the behavior of the BIER-TE forwarding plane | |||
with the different type of adjacencies and possible variations of | with the different types of adjacencies and possible variations of | |||
BIER-TE forwarding pseudocode, and finally the mandatory and | BIER-TE forwarding pseudocode, and finally the mandatory and | |||
optional requirements. | optional requirements. | |||
* Section 5 describes operational considerations for the BIER-TE | * Section 5 describes operational considerations for the BIER-TE | |||
controller, foremost how the BIER-TE controller can optimize the | controller, primarily how the BIER-TE controller can optimize the | |||
use of BP by using specific type of BIER-TE adjacencies for | use of BPs by using specific types of BIER-TE adjacencies for | |||
different type of topological situations, but also how to assign | different types of topological situations. It also describes how | |||
bits to avoid loops and duplicates (which in BIER-TE does not come | to assign bits to avoid loops and duplicates (which, in BIER-TE, | |||
for free), and finally how "Set Identifier" (SI), "sub-domain" | does not come "for free"). Finally, it discusses how "Set | |||
(SD) and BFR-ids can be managed by a BIER-TE controller, examples | Identifiers" (SIs), "subdomains" (SDs), and BFR-ids can be managed | |||
and summary. | by a BIER-TE controller; examples and a summary are provided. | |||
* Appendix A concludes the technology specific sections of the | * Appendix A concludes this document; details regarding the | |||
document by further relating BIER-TE to Segment Routing (SR). | relationship between BIER-TE and "Segment Routing" (SR) are | |||
discussed. | ||||
Note that related work, [I-D.ietf-roll-ccast] uses Bloom filters | Note that related work [CONSTRAINED-CAST] uses Bloom filters | |||
[Bloom70] to represent leaves or edges of the intended delivery tree. | [Bloom70] to represent leaves or edges of the intended delivery tree. | |||
Bloom filters in general can support larger trees/topologies with | Bloom filters in general can support larger trees/topologies with | |||
fewer addressing bits than explicit BitStrings, but they introduce | fewer addressing bits than explicit BitStrings, but they introduce | |||
the heuristic risk of false positives and cannot clear bits in the | the heuristic risk of false positives and cannot clear bits in the | |||
BitString during forwarding to avoid loops. For these reasons, BIER- | BitStrings during forwarding to avoid loops. For these reasons, | |||
TE uses explicit BitStrings like BIER. The explicit BitStrings of | BIER-TE, like BIER, uses explicit BitStrings. Explicit BitStrings as | |||
BIER-TE can also be seen as a special type of Bloom filter, and this | used by BIER-TE can also be seen as a special type of Bloom filter, | |||
is how related work [ICC] describes it. | and this is how other related work [ICC] describes it. | |||
1.1. Requirements Language | 2. Introduction | |||
2.1. Requirements Language | ||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Introduction | 2.2. Basic Examples | |||
2.1. Basic Examples | ||||
BIER-TE forwarding is best introduced with simple examples. These | BIER-TE forwarding is best introduced with simple examples. These | |||
examples use formal terms defined later in the document (Figure 4), | examples use formal terms defined later in this document (Figure 4 in | |||
including forward_connected(), forward_routed() and local_decap(). | Section 4.1), including forward_connected(), forward_routed(), and | |||
local_decap(). | ||||
Consider the simple network in the BIER-TE overview example shown in | ||||
Figure 1, with six BFRs. p1...p15 are the bit positions used. All | ||||
BFRs can act as a "Bit-Forwarding Ingress Router" (BFIR); BFR1, BFR3, | ||||
BFR4, and BFR6 can also be BFERs. "Forward_connected()" is the name | ||||
used for adjacencies that represent subnet adjacencies of the | ||||
network. "Local_decap()" is the name used for the adjacency that | ||||
decapsulates BIER-TE packets and passes their payload to higher-layer | ||||
processing. | ||||
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 page 6, line 41 ¶ | skipping to change at line 259 ¶ | |||
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() | |||
Figure 1: BIER-TE basic example | Figure 1: BIER-TE Basic Example | |||
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. | ||||
Assume a packet from BFR1 should be sent via BFR4 to BFR6. This | Assume that a packet from BFR1 should be sent via BFR4 to BFR6. This | |||
requires a BitString (p2,p8,p10,p12,p15). When this packet is | requires a BitString (p2,p8,p10,p12,p15). When this packet is | |||
examined by BIER-TE on BFR1, the only bit position from the BitString | examined by BIER-TE on BFR1, the only bit position from the BitString | |||
that is also set in the BIFT is p2. This will cause BFR1 to send the | that is also set in the BIFT is p2. This will cause BFR1 to send the | |||
only copy of the packet to BFR2. Similarly, BFR2 will forward to | only copy of the packet to BFR2. Similarly, BFR2 will forward to | |||
BFR4 because of p8, BFR4 to BFR5 because of p10 and BFR5 to BFR6 | BFR4 because of p8, BFR4 to BFR5 because of p10, and BFR5 to BFR6 | |||
because of p12. p15 finally makes BFR6 receive and decapsulate the | because of p12. p15 finally makes BFR6 receive and decapsulate the | |||
packet. | packet. | |||
To send a copy to BFR6 via BFR4 and also a copy to BFR3, the | To send a copy to BFR6 via BFR4 and also a copy to BFR3, the | |||
BitString needs to be (p2,p5,p8,p10,p12,p13,p15). When this packet | BitString needs to be (p2,p5,p8,p10,p12,p13,p15). When this packet | |||
is examined by BFR2, p5 causes one copy to be sent to BFR3 and p8 one | is examined by BFR2, p5 causes one copy to be sent to BFR3 and p8 one | |||
copy to BFR4. When BFR3 receives the packet, p13 will cause it to | copy to BFR4. When BFR3 receives the packet, p13 will cause it to | |||
receive and decapsulate the packet. | receive and decapsulate the packet. | |||
If instead the BitString was (p2,p6,p8,p10,p12,p13,p15), the packet | 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 | 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 | copied by BFR2 to BFR3 because of p5 in the prior case. This | |||
showing the ability of the shown BIER-TE Topology to make the traffic | demonstrates the ability of the BIER-TE topology, as shown in | |||
pass across any possible path and be replicated where desired. | Figure 1, to make the traffic pass across any possible path and be | |||
replicated where desired. | ||||
BIER-TE has various options to minimize BP assignments, many of which | BIER-TE has various options for minimizing BP assignments, many of | |||
are based on out-of-band knowledge about the required multicast | which are based on out-of-band knowledge about the required multicast | |||
traffic paths and bandwidth consumption in the network, such as from | traffic paths and bandwidth consumption in the network, e.g., from | |||
pre-deployment planning. | predeployment planning. | |||
Figure 2 shows a modified example, in which Rtr2 and Rtr5 are assumed | Figure 2 shows a modified example, in which Rtr2 and Rtr5 are assumed | |||
not to support BIER-TE, so traffic has to be unicast encapsulated | not to support BIER-TE, so traffic has to be unicast encapsulated | |||
across them. To emphasize non-L2, but routed/tunneled forwarding of | across them. To explicitly distinguish routed/tunneled forwarding of | |||
BIER-TE packets, these adjacencies are called "forward_routed". | BIER-TE packets from Layer 2 forwarding (forward_connected()), these | |||
Otherwise, there is no difference in their processing over the | adjacencies are called "forward_routed()" adjacencies. Otherwise, | |||
aforementioned forward_connected() adjacencies. | there is no difference in their processing over the aforementioned | |||
forward_connected() adjacencies. | ||||
In addition, bits are saved in the following example by assuming that | In addition, bits are saved in the following example by assuming that | |||
BFR1 only needs to be BFIR but not BFER or transit BFR. | BFR1 only needs to be a BFIR -- not a BFER or a transit BFR. | |||
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() | |||
Figure 2: BIER-TE basic overlay example | Figure 2: BIER-TE Basic Overlay Example | |||
To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, | To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, | |||
the BitString is (p1,p5,p9). From BFR1 via BFR4 to be received by | the BitString is (p1,p5,p9). A packet from BFR1 via BFR4 to be | |||
BFR6, the BitString is (p2,p6,p9). A packet from BFR1 to be received | received by BFR6 uses the BitString (p2,p6,p9). A packet from BFR1 | |||
by BFR3,BFR4 and from BFR3 to be received by BFR6 uses | to be received by BFR3,BFR4 and from BFR3 to be received by BFR6 uses | |||
(p1,p2,p3,p4,p5,p9). A packet from BFR1 to be received by BFR3,BFR4 | (p1,p2,p3,p4,p5,p9). A packet from BFR1 to be received by BFR3,BFR4 | |||
and from BFR4 to be received by BFR6 uses (p1,p2,p3,p4,p6,p9). A | and from BFR4 to be received by BFR6 uses (p1,p2,p3,p4,p6,p9). A | |||
packet from BFR1 to be received by BFR4, and from BFR4 to be received | packet from BFR1 to be received by BFR4, then from BFR4 to be | |||
by BFR6 and from there to be received by BFR3 uses | received by BFR6, and finally from BFR6 to be received by BFR3, uses | |||
(p2,p3,p4,p6,p7,p9). A packet from BFR1 to be received by BFR3, and | (p2,p3,p4,p6,p7,p9). A packet from BFR1 to be received by BFR3, then | |||
from BFR3 to be received by BFR6 there to be received by BFR4 uses | from BFR3 to be received by BFR6, and finally from BFR6 to be | |||
(p1,p3,p4,p5,p8,p9). | received by BFR4, uses (p1,p3,p4,p5,p8,p9). | |||
2.2. BIER-TE Topology and adjacencies | 2.3. BIER-TE Topology and Adjacencies | |||
The key new component in BIER-TE compared to (non-TE) BIER is the | The key new component in BIER-TE compared to (non-TE) BIER is the | |||
BIER-TE topology as introduced through the two examples in | BIER-TE topology as introduced through the two examples in | |||
Section 2.1. It is used to control where replication can or should | Section 2.2. It is used to control where replication can or should | |||
happen and how to minimize the required number of BP for adjacencies. | happen and how to minimize the required number of BPs for | |||
adjacencies. | ||||
The BIER-TE Topology consists of the BIFTs of all the BFR and can | 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 | also be expressed as a directed graph where the edges are the | |||
adjacencies between the BFRs labelled with the BP used for the | adjacencies between the BFRs labeled with the BP used for the | |||
adjacency. Adjacencies are naturally unidirectional. BP can be | adjacency. Adjacencies are naturally unidirectional. A BP can be | |||
reused across multiple adjacencies as long as this does not lead to | reused across multiple adjacencies as long as this does not lead to | |||
undesired duplicates or loops as explained in Section 5.2. | undesired duplicates or loops, as explained in Section 5.2. | |||
If the BIER-TE topology represents (a subset of) the underlying | If the BIER-TE topology represents (a subset of) the underlying | |||
(layer 2) topology of the network as shown in the first example, this | (Layer 2) topology of the network as shown in the first example, this | |||
may be called a "native" BIER-TE topology. A topology consisting | may be called an "underlay" BIER-TE topology. A topology consisting | |||
only of "forward_routed" adjacencies as shown in the second example | only of "forward_routed()" adjacencies as shown in the second example | |||
may be called an "overlay" BIER-TE topology. A BIER-TE topology with | may be called an "overlay" BIER-TE topology. A BIER-TE topology with | |||
both forward_connected() and forward_routed() adjacencies may be | both forward_connected() and forward_routed() adjacencies may be | |||
called a "hybrid" BIER-TE topology. | called a "hybrid" BIER-TE topology. | |||
2.3. Relationship to BIER | 2.4. Relationship to BIER | |||
BIER-TE is designed so that its forwarding plane is a simple | BIER-TE is designed so that its forwarding plane is a simple | |||
extension to the (non-TE) BIER forwarding plane, hence allowing for | extension to the (non-TE) BIER forwarding plane, hence allowing it to | |||
it to be added to BIER deployments where it can be beneficial. | be added to BIER deployments where it can be beneficial. | |||
BIER-TE is also intended as an option to expand the BIER architecture | BIER-TE is also intended as an option to expand the BIER architecture | |||
into deployments where (non-TE) BIER may not be the best fit, such as | into deployments where (non-TE) BIER may not be the best fit, such as | |||
statically provisioned networks with needs for path steering but | statically provisioned networks that need path steering but do not | |||
without desire for distributed routing protocols. | want distributed routing protocols. | |||
1. BIER-TE inherits the following aspects from BIER unchanged: | 1. BIER-TE inherits the following aspects from BIER unchanged: | |||
1. The fundamental purpose of per-packet signaled replication | 1.a The fundamental purpose of per-packet signaled replication | |||
and delivery via a BitString. | and delivery via a BitString. | |||
2. The overall architecture consisting of three layers, flow | 1.b The overall architecture, which consists of three layers: | |||
overlay, BIER(-TE) layer and routing underlay. | the flow overlay, the BIER(-TE) layer, and the routing | |||
underlay. | ||||
3. The supported encapsulations [RFC8296]. | 1.c The supported encapsulations [RFC8296]. | |||
4. The semantic of all [RFC8296] header elements used by the | 1.d The semantics of all BIER header elements [RFC8296] used by | |||
BIER-TE forwarding plane other than the semantic of the BP in | the BIER-TE forwarding plane, other than the semantic of the | |||
the BitString. | BP in the BitString. | |||
5. The BIER forwarding plane, except for how bits have to be | 1.e The BIER forwarding plane, except for how bits have to be | |||
cleared during replication. | cleared during replication. | |||
2. BIER-TE has the following key changes with respect to BIER: | 2. BIER-TE has the following key changes with respect to BIER: | |||
1. In BIER, bits in the BitString of a BIER packet header | 2.a In BIER, bits in the BitString of a BIER packet header | |||
indicate a BFER and bits in the BIFT indicate the BIER | indicate a BFER, and bits in the BIFT indicate the BIER | |||
control plane calculated next-hop toward that BFER. In BIER- | control plane's calculated next hop towards that BFER. In | |||
TE, a bit in the BitString of a BIER packet header indicates | BIER-TE, a bit in the BitString of a BIER packet header | |||
an adjacency in the BIER-TE topology, and only the BFR that | indicates an adjacency in the BIER-TE topology, and only the | |||
is the upstream of that adjacency has its BP populated with | BFR that is the upstream of that adjacency has its BP | |||
the adjacency in its BIFT. | populated with the adjacency in its BIFT. | |||
2. In BIER, the implied reference options for the core part of | 2.b In BIER, the implied reference options for the core part of | |||
the BIER layer control plane are the BIER extensions for | the BIER layer control plane are the BIER extensions for | |||
distributed routing protocols. This includes ISIS/OSPF | distributed routing protocols. These include IS-IS and OSPF | |||
extensions for BIER, [RFC8401] and [RFC8444]. | extensions for BIER, as specified in [RFC8401] and | |||
[RFC8444], respectively. | ||||
3. The reference option for the core part of the BIER-TE control | 2.c The reference option for the core part of the BIER-TE | |||
plane is the BIER-TE controller. Nevertheless, both the BIER | control plane is the BIER-TE controller. Nevertheless, both | |||
and BIER-TE BIFTs forwarding plane state could equally be | the BIER and BIER-TE BIFTs' forwarding plane state could | |||
populated by any mechanism. | equally be populated by any mechanism. | |||
4. Assuming the reference options for the control plane, BIER-TE | 2.d Assuming the reference options for the control plane, BIER- | |||
replaces in-network autonomous path calculation by explicit | TE replaces in-network autonomous path calculations with | |||
paths calculated by the BIER-TE controller. | explicit paths calculated by the BIER-TE controller. | |||
3. The following elements/functions described in the BIER | 3. The following elements/functions described in the BIER | |||
architecture are not required by the BIER-TE architecture: | architecture are not required by the BIER-TE architecture: | |||
1. "Bit Index Routing Tables" (BIRTs) are not required on BFRs | 3.a "Bit Index Routing Tables" (BIRTs) are not required on BFRs | |||
for BIER-TE when using a BIER-TE controller because the | for BIER-TE when using a BIER-TE controller, because the | |||
controller can directly populate the BIFTs. In BIER, BIRTs | controller can directly populate the BIFTs. In BIER, BIRTs | |||
are populated by the distributed routing protocol support for | are populated by the distributed routing protocol support | |||
BIER, allowing BFRs to populate their BIFTs locally from | for BIER, allowing BFRs to populate their BIFTs locally from | |||
their BIRTs. Other BIER-TE control plane or management plane | their BIRTs. Other BIER-TE control plane or management | |||
options may introduce requirements for BIRTs for BIER-TE | plane options may introduce requirements for BIRTs for BIER- | |||
BFRs. | TE BFRs. | |||
2. The BIER-TE layer forwarding plane does not require BFRs to | 3.b The BIER-TE layer forwarding plane does not require BFRs to | |||
have a unique BP and therefore also no unique BFR-id. See | have a unique BP; see Section 5.1.3. Therefore, BFRs may | |||
Section 5.1.3. | not have a unique BFR-id; see Section 5.3.3. | |||
3. Identification of BFRs by the BIER-TE control plane is | 3.c Identification of BFRs by the BIER-TE control plane is | |||
outside the scope of this specification. Whereas the BIER | outside the scope of this specification. Whereas the BIER | |||
control plane uses BFR-ids in its BFR to BFR signaling, a | control plane uses BFR-ids in its BFR-to-BFR signaling, a | |||
BIER-TE controller may choose any form of identification | BIER-TE controller may choose any form of identification | |||
deemed appropriate. | deemed appropriate. | |||
4. BIER-TE forwarding does not require the BFIR-id field of the | 3.d BIER-TE forwarding does not require the BFIR-id field of the | |||
BIER packet header. | BIER packet header. | |||
4. Co-existence of BIER and BIER-TE in the same network requires the | 4. Co-existence of BIER and BIER-TE in the same network requires the | |||
following: | following: | |||
1. The BIER/BIER-TE packet header needs to allow addressing both | 4.a The BIER/BIER-TE packet header needs to allow the addressing | |||
BIER and BIER-TE BIFTs. Depending on the encapsulation | of both BIER and BIER-TE BIFTs. Depending on the | |||
option, the same SD may or may not be reusable across BIER | encapsulation option, the same SD may or may not be reusable | |||
and BIER-TE. See Section 4.3. In either case, a packet is | across BIER and BIER-TE. See Section 4.3. In either case, | |||
always only forwarded end-to-end via BIER or via BIER-TE | a packet is always forwarded only end to end via BIER or via | |||
(ships in the nights forwarding). | BIER-TE ("ships in the night" forwarding). | |||
2. BIER-TE deployments will have to assign BFR-ids to BFRs and | 4.b BIER-TE deployments will have to assign BFR-ids to BFRs and | |||
insert them into the BFIR-id field of BIER packet headers as | insert them into the BFIR-id field of BIER packet headers, | |||
BIER does, whenever the deployment uses (unchanged) | as does BIER, whenever the deployment uses (unchanged) | |||
components developed for BIER that use BFR-id, such as | components developed for BIER that use BFR-ids, such as | |||
multicast flow overlays or BIER layer control plane elements. | multicast flow overlays or BIER layer control plane | |||
See also Section 5.3.3. | elements. See also Section 5.3.3. | |||
2.4. Accelerated/Hardware forwarding comparison | 2.5. Accelerated Hardware Forwarding Comparison | |||
BIER-TE forwarding rules, especially the BitString parsing are | BIER-TE forwarding rules, especially BitString parsing, are designed | |||
designed to be as close as possible to those of BIER in the | to be as close as possible to those of BIER, with the expectation | |||
expectation that this eases the programming of BIER-TE forwarding | that this eases the programming of BIER-TE forwarding code and/or | |||
code and/or BIER-TE forwarding hardware on platforms supporting BIER. | BIER-TE forwarding hardware on platforms supporting BIER. The | |||
The pseudocode in Section 4.4 shows how existing (non-TE) BIER/BIFT | pseudocode in Section 4.4 shows how existing (non-TE) BIER/BIFT | |||
forwarding can be modified to support the required BIER-TE forwarding | forwarding can be modified to support the required BIER-TE forwarding | |||
functionality (Section 4.5), by using BIER BIFT's "Forwarding Bit | functionality (Section 4.5), by using the BIER BIFT's "Forwarding Bit | |||
Mask" (F-BM): Only the clearing of bits to avoid duplicate packets to | Mask" (F-BM): only the clearing of bits to avoid sending duplicate | |||
a BFR's neighbor is skipped in BIER-TE forwarding because it is not | packets to a BFR's neighbor is skipped in BIER-TE forwarding, because | |||
necessary and could not be done when using BIER F-BM. | it is not necessary and could not be done when using a BIER F-BM. | |||
Whether to use BIER or BIER-TE forwarding is simply a choice of the | Whether to use BIER or BIER-TE forwarding is simply a choice of the | |||
mode of the BIFT indicated by the packet (BIER or BIER-TE BIFT). | mode of the BIFT indicated by the packet (BIER or BIER-TE BIFT). | |||
This is determined by the BFR configuration for the encapsulation, | This is determined by the BFR configuration for the encapsulation; | |||
see Section 4.3. | see Section 4.3. | |||
3. Components | 3. Components | |||
BIER-TE can be thought of being constituted from the same three | BIER-TE can be thought of as being composed of the same three layers | |||
layers as BIER: The "multicast flow overlay", the "BIER layer" and | as BIER: the "multicast flow overlay", the "BIER layer", and the | |||
the "routing underlay". The following picture also shows how the | "routing underlay". Figure 3 also shows how the BIER layer is | |||
"BIER layer" is constituted from the "BIER-TE forwarding plane" and | composed of the "BIER-TE forwarding plane" and the "BIER-TE control | |||
the "BIER-TE control plane" represent by the "BIER-TE Controller". | plane" as represented by the "BIER-TE controller". | |||
<------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 | |||
Figure 3: BIER-TE architecture | Figure 3: BIER-TE Architecture | |||
3.1. The Multicast Flow Overlay | 3.1. The Multicast Flow Overlay | |||
The Multicast Flow Overlay has the same role as described for BIER in | The multicast flow overlay has the same role as that described for | |||
[RFC8279], Section 4.3. See also Section 3.2.1.2. | BIER in [RFC8279], Section 4.3. See also Section 3.2.1.2. | |||
When a BIER-TE controller is used, then the signaling for the | When a BIER-TE controller is used, it might also be preferable that | |||
Multicast Flow Overlay may also be preferred to operate through a | multicast flow overlay signaling be performed through a central point | |||
central point of control. For BGP based overlay flow services such | of control. For BGP-based overlay flow services such as "Multicast | |||
as "Multicast VPN Using BIER" ([RFC8556]) this can be achieved by | VPN Using Bit Index Explicit Replication (BIER)" [RFC8556], this can | |||
making the BIER-TE controller operate as a BGP Route Reflector | be achieved by making the BIER-TE controller operate as a BGP Route | |||
([RFC4456]) and combining it with signaling through BGP or a | Reflector [RFC4456] and combining it with signaling through BGP or a | |||
different protocol for the BIER-TE controller calculated BitStrings. | different protocol for the BIER-TE controller's calculated | |||
See Section 3.2.1.2 and Section 5.3.4. | BitStrings. See Sections 3.2.1.2 and 5.3.4. | |||
3.2. The BIER-TE Control Plane | 3.2. The BIER-TE Control Plane | |||
In the (non-TE) BIER architecture [RFC8279], the BIER control plane | In the (non-TE) BIER architecture [RFC8279], the BIER layer is | |||
is not explicitly separated from the BIER forwarding plane, but | summarized in Section 4.2 of [RFC8279]. This summary includes both | |||
instead their functions are summarized together in Section 4.2. | the functions of the BIER-layer control plane and forwarding plane, | |||
Example standardized options for the BIER control plane include ISIS/ | without using those terms. Example standardized options for the BIER | |||
OSPF extensions for BIER, [RFC8401] and [RFC8444]. | control plane include IS-IS and OSPF extensions for BIER, as | |||
specified in [RFC8401] and [RFC8444], respectively. | ||||
For BIER-TE, the control plane includes at minimum the following | For BIER-TE, the control plane includes, at a minimum, the following | |||
functionality. | functionality. | |||
1. BIER-TE topology control: During initial provisioning of the | 1. BIER-TE topology control: During initial provisioning of the | |||
network and/or during modifications of its topology and/or | network and/or during modifications of its topology and/or | |||
services, the protocols and/or procedures to establish BIER-TE | services, the protocols and/or procedures to establish BIER-TE | |||
BIFTs: | BIFTs: | |||
1. Determine the desired BIER-TE topology for a BIER-TE sub- | 1.a Determine the desired BIER-TE topology for BIER-TE | |||
domains: the native and/or overlay adjacencies that are | subdomains: the adjacencies that are assigned to BPs. | |||
assigned to BPs. Topology discovery is discussed in | Topology discovery is discussed in Section 3.2.1.1, and the | |||
Section 3.2.1.1 and the various aspects of the BIER-TE | various aspects of the BIER-TE controller's determinations | |||
controllers determinations about the topology are discussed | regarding the topology are discussed throughout Section 5. | |||
throughout Section 5 | ||||
2. Determine the per-BFR BIFT from the BIER-TE topology. This is | 1.b Determine the per-BFR BIFT from the BIER-TE topology. This | |||
achieved by simply extracting the adjacencies of the BFR from | is achieved by simply extracting the adjacencies of the BFR | |||
the BIER-TE topology and populating the BFRs BIFT with them. | from the BIER-TE topology and populating the BFR's BIFT with | |||
them. | ||||
3. Optionally assign BFR-ids to BFIRs for later insertion into | 1.c Optionally assign BFR-ids to BFIRs for later insertion into | |||
BIER headers on BFIRs as BFIR-id. Alternatively, BFIR-id in | BIER headers on BFIRs as BFIR-ids. Alternatively, BFIR-ids | |||
BIER packet headers may be managed solely by the flow overlay | in BIER packet headers may be managed solely by the flow | |||
layer and/or be unused. This is discussed in Section 5.3.3. | overlay layer and/or be unused. This is discussed in | |||
Section 5.3.3. | ||||
4. Install/update the BIFTs into the BFRs and optionally BFR-ids | 1.d Install/update the BIFTs into the BFRs and, optionally, BFR- | |||
into BFIRs. This is discussed in Section 3.2.1.1. | ids into BFIRs. This is discussed in Section 3.2.1.1. | |||
2. BIER-TE tree control: During operations of the network, | 2. BIER-TE tree control: During network operations, protocols and/or | |||
protocols and/or procedures to support creation/change/removal of | procedures to support creation/change/removal of overlay flows on | |||
overlay flows on BFIRs: | BFIRs: | |||
1. Process the BIER-TE requirements for the multicast overlay | 2.a Process the BIER-TE requirements for the multicast overlay | |||
flow: BFIR and BFERs of the flow as well as policies for the | flow: BFIRs and BFERs of the flow as well as policies for | |||
path selection of the flow. This is discussed in Section 3.5. | the path selection of the flow. This is discussed in | |||
Section 3.5. | ||||
2. Determine the BitStrings and optionally Entropy. This is | 2.b Determine the BitStrings and, optionally, entropy. | |||
discussed in Section 3.2.1.2, Section 3.5 and Section 5.3.4. | BitStrings are discussed in Sections 3.2.1.2, 3.5, and | |||
5.3.4. Entropy is discussed in Section 4.2.3. | ||||
3. Install state on the BFIR to impose the desired BIER packet | 2.c Install state on the BFIR to impose the desired BIER packet | |||
header(s) for packets of the overlay flow. Different aspects | header(s) for packets of the overlay flow. Different | |||
of this and the next point are discussed throughout | aspects of this point, as well as the next point, are | |||
Section 3.2.1 and in Section 4.3, but the main responsibility | discussed throughout Section 3.2.1 and in Section 4.3. The | |||
of these two points is with the Multicast Flow Overlay | main component responsible for these two points is the | |||
(Section 3.1), which is architecturally inherited from BIER. | multicast flow overlay (Section 3.1), which is | |||
architecturally inherited from BIER. | ||||
4. Install the necessary state on the BFERs to decapsulate the | 2.d Install the necessary state on the BFERs to decapsulate the | |||
BIER packet header and properly dispatch its payload. | BIER packet header and properly dispatch its payload. | |||
3.2.1. The BIER-TE Controller | 3.2.1. The BIER-TE Controller | |||
[RFC-Editor: the following text has three references to anchors | This architecture describes the BIER-TE control plane, as shown in | |||
topology-control, topology-control-1 and tree-control. | Figure 3, as consisting of: | |||
Unfortunately, XMLv2 does not offer any tagging that reasonable | ||||
references are generated (i had this problem already in RFCs last | ||||
year. Please make sure there are useful-to-read cross-references in | ||||
the RFC in these three places after you convert to XMLv3.] | ||||
This architecture describes the BIER-TE control plane as shown in | ||||
Figure 3 to consist of: | ||||
* A BIER-TE controller. | * A BIER-TE controller. | |||
* BFR data-models and protocols to communicate between controller | * BFR data models and protocols to communicate between the | |||
and BFRs in support of BIER-TE topology control (Section 3.2), | controller and BFRs in support of BIER-TE topology control (see | |||
such as YANG/NETCONF/RESTCONF ([RFC7950]/[RFC6241]/[RFC8040]). | the list under "BIER-TE topology control"), such as YANG/NETCONF/ | |||
RESTCONF [RFC7950] [RFC6241] [RFC8040]. | ||||
* BFR data-models and protocols to communicate between controller | * BFR data models and protocols to communicate between the | |||
and BFIR in support of BIER-TE tree control (Section 3.2), such as | controller and BFIRs in support of BIER-TE tree control (see | |||
BIER-TE extensions for [RFC5440]. | Section 3.2, point 2.), such as BIER-TE extensions for [RFC5440]. | |||
The single, centralized BIER-TE controller is used in this document | The single, centralized BIER-TE controller is used in this document | |||
as reference option for the BIER-TE control plane but other options | as the reference option for the BIER-TE control plane, but other | |||
are equally feasible. The BIER-TE control plane could equally be | options are equally feasible. The BIER-TE control plane could | |||
implemented without automated configuration/protocols, by an operator | equally be implemented without automated configuration/protocols, by | |||
via CLI on the BFRs. In that case, operator configured local policy | an operator via a CLI on the BFRs. In that case, operator-configured | |||
on the BFIR would have to determine how to set the appropriate BIER | local policy on the BFIR would have to determine how to set the | |||
header fields. The BIER-TE control plane could also be decentralized | appropriate BIER header fields. The BIER-TE control plane could also | |||
and/or distributed, but this document does not consider any | be decentralized and/or distributed, but this document does not | |||
additional protocols and/or procedures which would then be necessary | consider any additional protocols and/or procedures that would then | |||
to coordinate its (distributed/decentralized) entities to achieve the | be necessary to coordinate its (distributed/decentralized) entities | |||
above described functionality. | to achieve the above-described functionality. | |||
3.2.1.1. BIER-TE Topology discovery and creation | 3.2.1.1. BIER-TE Topology Discovery and Creation | |||
The first item of BIER-TE topology control (Section 3.2, Paragraph 3, | The first item listed for BIER-TE topology control (Section 3.2, | |||
Item 2.2.1) includes network topology discovery and BIER-TE topology | point 1.a.) includes network topology discovery and BIER-TE topology | |||
creation. The latter describes the process by which a Controller | creation. The latter describes the process by which a controller | |||
determines which routers are to be configured as BFRs and the | determines which routers are to be configured as BFRs and the | |||
adjacencies between them. | adjacencies between them. | |||
In statically managed networks, such as in industrial environments, | In statically managed networks, e.g., industrial environments, both | |||
both discovery and creation can be a manual/offline process. | discovery and creation can be a manual/offline process. | |||
In other networks, topology discovery may rely on protocols including | In other networks, topology discovery may rely on such protocols as | |||
extending a "Link-State-Protocol" based IGP into the BIER-TE | those that include extending an IGP based on a link-state protocol | |||
controller itself, [RFC7752] (BGP-LS) or [RFC8345] (YANG topology) as | into the BIER-TE controller itself, e.g., BGP-LS [RFC7752] or YANG | |||
well as BIER-TE specific methods, for example via | topology [RFC8345], as well as methods specific to BIER-TE -- for | |||
[I-D.ietf-bier-te-yang]. These options are non-exhaustive. | example, via [BIER-TE-YANG]. These options are non-exhaustive. | |||
Dynamic creation of the BIER-TE topology can be as easy as mapping | Dynamic creation of the BIER-TE topology can be as easy as mapping | |||
the network topology 1:1 to the BIER-TE topology by assigning a BP | the network topology 1:1 to the BIER-TE topology by assigning a BP | |||
for every network subnet adjacency. In larger networks, it likely | for every network subnet adjacency. In larger networks, it likely | |||
involves more complex policy and optimization decisions including how | involves more complex policy and optimization decisions, including | |||
to minimize the number of BPs required and how to assign BPs across | how to minimize the number of BPs required and how to assign BPs | |||
different BitStrings to minimize the number of duplicate packets | across different BitStrings to minimize the number of duplicate | |||
across links when delivering an overlay flow to BFER using different | packets across links when delivering an overlay flow to BFERs using | |||
SIs/BitStrings. These topics are discussed in Section 5. | different SIs:BitStrings. These topics are discussed in Section 5. | |||
When the BIER-TE topology is determined, the BIER-TE Controller then | When the BIER-TE topology has been determined, the BIER-TE controller | |||
pushes the BitPositions/adjacencies to the BIFT of the BFRs. On each | pushes the BPs/adjacencies to the BIFT of the BFRs. On each BFR, | |||
BFR only those SI:BitPositions are populated that are adjacencies to | only those SIs:BPs that are adjacencies to other BFRs in the BIER-TE | |||
other BFRs in the BIER-TE topology. | topology are populated. | |||
Communications between the BIER-TE Controller and BFRs for both BIER- | Communications between the BIER-TE controller and BFRs for both BIER- | |||
TE topology control and BIER-TE tree control is ideally via | TE topology control and BIER-TE tree control are ideally via | |||
standardized protocols and data-models such as NETCONF/RESTCONF/YANG/ | standardized protocols and data models such as NETCONF/RESTCONF/YANG/ | |||
PCEP. Vendor-specific CLI on the BFRs is also an option (as in many | PCEP. A vendor-specific CLI on the BFRs is also an option (as in | |||
other SDN solutions lacking definition of standardized data models). | many other "Software-Defined Network" (SDN) solutions lacking | |||
definitions of standardized data models). | ||||
3.2.1.2. Engineered Trees via BitStrings | 3.2.1.2. Engineered Trees via BitStrings | |||
In BIER, the same set of BFER in a single sub-domain is always | In BIER, the same set of BFERs in a single subdomain is always | |||
encoded as the same BitString. In BIER-TE, the BitString used to | encoded as the same BitString. In BIER-TE, the BitString used to | |||
reach the same set of BFER in the same sub-domain can be different | reach the same set of BFERs in the same subdomain can be different | |||
for different overlay flows because the BitString encodes the paths | for different overlay flows because the BitString encodes the paths | |||
towards the BFER, so the BitStrings from different BFIR to the same | towards the BFERs, so the BitStrings from different BFIRs to the same | |||
set of BFER will often be different. Likewise, the BitString from | set of BFERs will often be different. Likewise, the BitString from | |||
the same BFIR to the same set of BFER can be different for different | the same BFIR to the same set of BFERs can be different for different | |||
overlay flows for policy reasons such as shortest path trees, Steiner | overlay flows if different policies should be applied to those | |||
trees (minimum cost trees), diverse path trees for redundancy and so | overlay flows, such as shortest path trees, Steiner trees (minimum | |||
on. | cost trees), diverse path trees for redundancy, and so on. | |||
See also [I-D.ietf-bier-multicast-http-response] for an application | See also [BIER-MCAST-OVERLAY] for an application leveraging BIER-TE | |||
leveraging BIER-TE engineered trees. | engineered trees. | |||
3.2.1.3. Changes in the network topology | 3.2.1.3. Changes in the Network Topology | |||
If the network topology changes (not failure based) so that | If the network topology changes (not failure based) so that | |||
adjacencies that are assigned to bit positions are no longer needed, | adjacencies that are assigned to bit positions are no longer needed, | |||
the BIER-TE Controller can re-use those bit positions for new | the BIER-TE controller can reuse those bit positions for new | |||
adjacencies. First, these bit positions need to be removed from any | adjacencies. First, these bit positions need to be removed from any | |||
BFIR flow state and BFR BIFT state, then they can be repopulated, | BFIR flow state and BFR BIFT state. Then, they can be repopulated, | |||
first into BIFT and then into the BFIR. | first into the BIFT and then into the BFIR. | |||
3.2.1.4. Link/Node Failures and Recovery | 3.2.1.4. Link/Node Failures and Recovery | |||
When link or nodes fail or recover in the topology, BIER-TE could | When links or nodes fail or recover in the topology, BIER-TE could | |||
quickly respond with FRR procedures such as [I-D.eckert-bier-te-frr], | quickly respond with "Fast Reroute" (FRR) procedures such as those | |||
the details of which are out of scope for this document. It can also | described in [BIER-TE-PROTECTION], the details of which are out of | |||
more slowly react by recalculating the BitStrings of affected | scope for this document. It can also more slowly react by | |||
multicast flows. This reaction is slower than the FRR procedure | recalculating the BitStrings of affected multicast flows. This | |||
because the BIER-TE Controller needs to receive link/node up/down | reaction is slower than the FRR procedure because the BIER-TE | |||
indications, recalculate the desired BitStrings and push them down | controller needs to receive link/node up/down indications, | |||
into the BFIRs. With FRR, this is all performed locally on a BFR | recalculate the desired BitStrings, and push them down into the | |||
receiving the adjacency up/down notification. | BFIRs. With FRR, this is all performed locally on a BFR receiving | |||
the adjacency up/down notification. | ||||
3.3. The BIER-TE Forwarding Plane | 3.3. The BIER-TE Forwarding Plane | |||
[RFC-editor Q: "is constituted from" / "consists of" / "composed | The BIER-TE forwarding plane consists of the following components: | |||
from..." ???] | ||||
The BIER-TE Forwarding Plane is constituted from the following | ||||
components: | ||||
1. On a BFIR, imposition of the BIER header for packets from overlay | 1. On a BFIR, imposition of the BIER header for packets from overlay | |||
flows. This is driven by a combination of state established by | flows. This is driven by state established by the BIER-TE | |||
the BIER-TE control plane and/or the multicast flow overlay as | control plane, the multicast flow overlay as explained in | |||
explained in Section 3.1. | Section 3.1, or a combination of both. | |||
2. On BFRs (including BFIR and BFER), forwarding/replication of BIER | 2. On BFRs (including BFIRs and BFERs), forwarding/replication of | |||
packets according to their SD, SI, "BitStringLength" (BSL), | BIER packets according to their SD, SI, "BitStringLength" (BSL), | |||
BitString and optionally Entropy fields as explained in | BitString, and, optionally, entropy fields as explained in | |||
Section 4. Processing of other BIER header fields such as DSCP | Section 4. Processing of other BIER header fields, such as the | |||
is outside the scope of this document. | "Differentiated Services Code Point" (DSCP) field, is outside the | |||
scope of this document. | ||||
3. On BFERs, removal of the BIER header and dispatching of the | 3. On BFERs, removal of the BIER header and dispatching of the | |||
payload according to state created by the BIER-TE control plane | payload according to state created by the BIER-TE control plane | |||
and/or overlay layer. | and/or overlay layer. | |||
When the BIER-TE Forwarding Plane receives a packet, it simply looks | 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 | up the bit positions that are set in the BitString of the packet in | |||
the BIFT that was populated by the BIER-TE Controller. For every BP | the BIFT that was populated by the BIER-TE controller. For every BP | |||
that is set in the BitString, and that has one or more adjacencies in | that is set in the BitString and has one or more adjacencies in the | |||
the BIFT, a copy is made according to the type of adjacencies for | BIFT, a copy is made according to the types of adjacencies for that | |||
that BP in the BIFT. Before sending any copy, the BFR clears all BPs | BP in the BIFT. Before sending any copies, the BFR clears all BPs in | |||
in the BitString of the packet for which the BFR has one or more | the BitString of the packet for which the BFR has one or more | |||
adjacencies in the BIFT. Clearing these bits inhibits packets from | adjacencies in the BIFT. Clearing these bits prevents packets from | |||
looping when the BitStrings erroneously includes a forwarding loop. | 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 | |||
See Section 4.2.1. | Section 4.2.1. | |||
3.4. The Routing Underlay | 3.4. The Routing Underlay | |||
For forward_connected() adjacencies, BIER-TE is sending BIER packets | For forward_connected() adjacencies, BIER-TE sends BIER packets to | |||
to directly connected BIER-TE neighbors as L2 (unicasted) BIER | directly connected BIER-TE neighbors as L2 (unicast) BIER packets | |||
packets without requiring a routing underlay. For forward_routed() | without requiring a routing underlay. For forward_routed() | |||
adjacencies, BIER-TE forwarding encapsulates a copy of the BIER | adjacencies, BIER-TE forwarding encapsulates a copy of the BIER | |||
packet so that it can be delivered by the forwarding plane of the | packet so that it can be delivered by the forwarding plane of the | |||
routing underlay to the routable destination address indicated in the | routing underlay to the routable destination address indicated in the | |||
adjacency. See Section 4.2.2 for the adjacency definition. | adjacency. See Section 4.2.2 for details on forward_routed() | |||
adjacencies. | ||||
BIER relies on the routing underlay to calculate paths towards BFERs | BIER relies on the routing underlay to calculate paths towards BFERs | |||
and derive next-hop BFR adjacencies for those paths. This commonly | and derive next-hop BFR adjacencies for those paths. These two steps | |||
relies on BIER specific extensions to the routing protocols of the | commonly rely on BIER-specific extensions to the routing protocols of | |||
routing underlay but may also be established by a controller. In | the routing underlay but may also be established by a controller. In | |||
BIER-TE, the next-hops of a packet are determined by the BitString | BIER-TE, the next hops for a packet are determined by the BitString | |||
through the BIER-TE Controller established adjacencies on the BFR for | through the BIER-TE controller-established adjacencies on the BFR for | |||
the BPs of the BitString. There is thus no need for BFR specific | the BPs of the BitString. There is thus no need for BFR-specific | |||
routing underlay extensions to forward BIER packets with BIER-TE | routing underlay extensions to forward BIER packets with BIER-TE | |||
semantics. | semantics. | |||
Encapsulation parameters can be provisioned by the BIER-TE controller | Encapsulation parameters can be provisioned by the BIER-TE controller | |||
into the forward_connected() or forward_routed() adjacencies directly | into the forward_connected() or forward_routed() adjacencies directly | |||
without relying on a routing underlay. | without relying on a routing underlay. | |||
If the BFR intends to support FRR for BIER-TE, then the BIER-TE | If the BFR intends to support FRR for BIER-TE, then the BIER-TE | |||
forwarding plane needs to receive fast adjacency up/down | forwarding plane needs to receive fast adjacency up/down | |||
notifications: Link up/down or neighbor up/down, e.g. from BFD. | notifications: link up/down or neighbor up/down, e.g., from | |||
Providing these notifications is considered to be part of the routing | "Bidirectional Forwarding Detection" (BFD). Providing these | |||
underlay in this document. | notifications is considered to be part of the routing underlay in | |||
this document. | ||||
3.5. Traffic Engineering Considerations | 3.5. Traffic Engineering Considerations | |||
Traffic Engineering ([I-D.ietf-teas-rfc3272bis]) provides performance | Traffic Engineering [TE-OVERVIEW] provides performance optimization | |||
optimization of operational IP networks while utilizing network | of operational IP networks while utilizing network resources | |||
resources economically and reliably. The key elements needed to | economically and reliably. The key elements needed to effect Traffic | |||
effect TE are policy, path steering and resource management. These | Engineering are policy, path steering, and resource management. | |||
elements require support at the control/controller level and within | These elements require support at the control/controller level and | |||
the forwarding plane. | within the forwarding plane. | |||
Policy decisions are made within the BIER-TE control plane, i.e., | Policy decisions are made within the BIER-TE control plane, i.e., | |||
within BIER-TE Controllers. Controllers use policy when composing | within BIER-TE controllers. Controllers use policy when composing | |||
BitStrings and BFR BIFT state. The mapping of user/IP traffic to | BitStrings and BFR BIFT state. The mapping of user/IP traffic to | |||
specific BitStrings/BIER-TE flows is made based on policy. The | specific BitStrings / BIER-TE flows is made based on policy. The | |||
specific details of BIER-TE policies and how a controller uses them | specific details of BIER-TE policies and how a controller uses them | |||
are out of scope of this document. | are out of scope for this document. | |||
Path steering is supported via the definition of a BitString. | Path steering is supported via the definition of a BitString. | |||
BitStrings used in BIER-TE are composed based on policy and resource | BitStrings used in BIER-TE are composed based on policy and resource | |||
management considerations. For example, when composing BIER-TE | management considerations. For example, when composing BIER-TE | |||
BitStrings, a Controller must take into account the resources | BitStrings, a controller must take into account the resources | |||
available at each BFR and for each BP when it is providing | available at each BFR and for each BP when it is providing | |||
congestion-loss-free services such as Rate Controlled Service | congestion-loss-free services such as Rate-Controlled Service | |||
Disciplines [RCSD94]. Resource availability could be provided for | Disciplines [RCSD94]. Resource availability could be provided, for | |||
example via routing protocol information, but may also be obtained | example, via routing protocol information but may also be obtained | |||
via a BIER-TE control protocol such as NETCONF or any other protocol | via a BIER-TE control protocol such as NETCONF or any other protocol | |||
commonly used by a Controller to understand the resources of the | commonly used by a controller to understand the resources of the | |||
network it operates on. The resource usage of the BIER-TE traffic | network on which it operates. The resource usage of the BIER-TE | |||
admitted by the BIER-TE controller can be solely tracked on the BIER- | traffic admitted by the BIER-TE controller can be solely tracked on | |||
TE Controller based on local accounting as long as no | the BIER-TE controller based on local accounting as long as no | |||
forward_routed() adjacencies are used (see Section 4.2.1 for the | forward_routed() adjacencies are used (see Section 4.2.2 for the | |||
definition of forward_routed() adjacencies). When forward_routed() | definition of forward_routed() adjacencies). When forward_routed() | |||
adjacencies are used, the paths selected by the underlying routing | adjacencies are used, the paths selected by the underlying routing | |||
protocol need to be tracked as well. | protocol need to be tracked as well. | |||
Resource management has implications on the forwarding plane beyond | Resource management has implications for 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 of admitted RCSD | buffers to guarantee the worst-case requirements for admitted RCSD | |||
traffic and potentially policing and/or rate-shaping mechanisms, | traffic and potentially policing and/or rate-shaping mechanisms, | |||
typically done via various forms of queuing. This level of resource | typically done via various forms of queuing. This level of resource | |||
control, while optional, is important in networks that wish to | control, while optional, is important in networks that wish to | |||
support congestion management policies to control or regulate the | support congestion management policies to control or regulate the | |||
offered traffic to deliver different levels of service and alleviate | offered traffic to deliver different levels of service and alleviate | |||
congestion problems, or those networks that wish to control latencies | congestion problems, or those networks that wish to control latencies | |||
experienced by specific traffic flows. | experienced by specific traffic flows. | |||
4. BIER-TE Forwarding | 4. BIER-TE Forwarding | |||
4.1. The BIER-TE Bit Index Forwarding Table (BIFT) | 4.1. The BIER-TE Bit Index Forwarding Table (BIFT) | |||
The BIER-TE BIFT is the equivalent to the BIER BIFT for (non-TE) | The BIER-TE BIFT is equivalent to the (non-TE) BIER BIFT. It exists | |||
BIER. It exists on every BFR running BIER-TE. For every BIER sub- | on every BFR running BIER-TE. For every BIER "subdomain" (SD) in use | |||
domain (SD) in use for BIER-TE, it is a table as shown shown in | for BIER-TE, the BIFT is constructed per the example shown in | |||
Figure 4. That example BIFT assumes a BSL of 8 bit positions (BPs) | Figure 4. The BIFT in the figure assumes a BSL of 8 "bit positions" | |||
in the packets BitString. As in [RFC8279] this BSL is purely used | (BPs) in the packets BitString. As in [RFC8279], this BSL is purely | |||
for the example and not a BIER/BIER-TE supported BSL (minimum BSL is | used as an example and is not a BSL supported by BIER/BIER-TE | |||
64). | (minimum BSL is 64). | |||
A BIER-TE BIFT compares to a BIER BIFT as shown in [RFC8279] as | A BIER-TE BIFT is compared to a BIER BIFT as shown in [RFC8279] as | |||
follows. | follows. | |||
In both BIER and BIER-TE, BIFT rows/entries are indexed in their | In both BIER and BIER-TE, BIFT rows/entries are indexed in their | |||
respective BIER pseudocode ([RFC8279] Section 6.5) and BIER-TE | respective BIER pseudocode ([RFC8279], Section 6.5) and BIER-TE | |||
pseudocode (Section 4.4) by the BIFT-index derived from the packets | pseudocode (Section 4.4) by the BIFT-index derived from the packet's | |||
SI, BSL and the one bit position of the packets BitString (BP) | SI, BSL, and the one bit position of the packets BitString (BP) | |||
addressing the BIFT row: BIFT-index = SI * BSL + BP - 1. BP within a | addressing the BIFT row: BIFT-index = SI * BSL + BP - 1. BPs within | |||
BitString are numbered from 1 to BSL, hence the - 1 offset when | a BitString are numbered from 1 to BSL -- hence, the - 1 offset when | |||
converting to a BIFT-index. This document also uses the notion SI:BP | converting to a BIFT-index. This document also uses the notion | |||
to indicate BIFT rows, [RFC8279] uses the equivalent notion | "SI:BP" to indicate BIFT rows. [RFC8279] uses the equivalent notion | |||
SI:BitString, where the BitString is filled with only the BP for the | "SI:BitString", where the BitString is filled with only the BPs for | |||
BIFT row. | the BIFT row. | |||
In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT- | In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT- | |||
index + 1 and is populated on each BFR with the next-hop "BFR | index + 1 and is populated on each BFR with the next-hop "BFR | |||
Neighbor" (BFR-NBR) towards that BFER. | Neighbor" (BFR-NBR) towards that BFER. | |||
In BIER-TE, each BIFT-index and therefore SI:BP indicates one or more | In BIER-TE, each BIFT-index and, therefore, SI:BP indicates one or, | |||
adjacencies between BFRs in the topology and is only populated with | in the case of reuse of SI:BP, more than one adjacency between BFRs | |||
those adjacencies forwarding entries on the BFR that is the upstream | in the topology. The SI:BP is populated with the adjacency on the | |||
for these adjacencies. The BIFT entry are empty on all other BFRs. | upstream BFR of the adjacency. The BIFT entries are empty on all | |||
other BFRs. | ||||
In BIER, each BIFT row also requires a "Forwarding Bit Mask" (F-BM) | 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 | entry for BIER forwarding rules. In BIER-TE forwarding, an F-BM is | |||
required, but can be used when implementing BIER-TE on forwarding | not required but can be used when implementing BIER-TE on forwarding | |||
hardware derived from BIER forwarding, that must use F-BM. This is | hardware, derived from BIER forwarding, that must use an F-BM. This | |||
discussed in the first BIER-TE forwarding pseudocode in Section 4.4. | is discussed in the first variation of BIER-TE forwarding pseudocode | |||
shown in Section 4.4. | ||||
------------------------------------------------------------------ | ------------------------------------------------------------------- | |||
| 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) | ||||
Figure 4: BIER-TE BIFT with different adjacencies | Figure 4: BIER-TE Bit Index Forwarding Table (BIFT) with | |||
Different Adjacencies | ||||
The BIFT is configured for the BIER-TE data plane of a BFR by the | The BIFT is configured for the BIER-TE data plane of a BFR by the | |||
BIER-TE Controller through an appropriate protocol and data-model. | BIER-TE controller through an appropriate protocol and data model. | |||
The BIFT is then used to forward packets, according to the rules | The BIFT is then used to forward packets, according to the procedures | |||
specified in the BIER-TE Forwarding Procedures. | for the BIER-TE forwarding plane as specified in Section 3.3. | |||
Note that a BIFT index (SI:BP) may be populated in the BIFT of more | Note that a BIFT-index (SI:BP) may be populated in the BIFT of more | |||
than one BFR to save BPs. See Section 5.1.6 for an example of how a | than one BFR to save BPs. See Section 5.1.6 for an example of how a | |||
BIER-TE controller could assign BPs to (logical) adjacencies shared | BIER-TE controller could assign BPs to (logical) adjacencies shared | |||
across multiple BFRs, Section 5.1.3 for an example of assigning the | across multiple BFRs, Section 5.1.3 for an example of assigning the | |||
same BP to different adjacencies, and Section 5.1.9 for general | same BP to different adjacencies, and Section 5.1.9 for general | |||
guidelines regarding re-use of BPs across different adjacencies. | guidelines regarding the reuse of BPs across different adjacencies. | |||
{VRF} indicates the Virtual Routing and Forwarding context into which | {VRF} indicates the Virtual Routing and Forwarding context into which | |||
the BIER payload is to be delivered. This is optional and depends on | the BIER payload is to be delivered. This is optional and depends on | |||
the multicast flow overlay. | the multicast flow overlay. | |||
4.2. Adjacency Types | 4.2. Adjacency Types | |||
4.2.1. Forward Connected | 4.2.1. Forward Connected | |||
A "forward_connected()" adjacency is towards a directly connected BFR | A "forward_connected()" adjacency is an adjacency towards a directly | |||
neighbor using an interface address of that BFR on the connecting | connected BFR-NBR using an interface address of that BFR on the | |||
interface. A forward_connected() adjacency does not route packets | connecting interface. A forward_connected() adjacency does not route | |||
but only L2 forwards them to the neighbor. | packets; only L2 forwards them to the neighbor. | |||
Packets sent to an adjacency with "DoNotClear" (DNC) set in the BIFT | Packets sent to an adjacency with "DoNotClear" (DNC) set in the BIFT | |||
MUST NOT have the bit position for that adjacency cleared when the | 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 | 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 | for copies of a packet made towards other adjacencies. This can be | |||
used for example in ring topologies as explained in Section 5.1.6. | used, for example, in ring topologies as explained in Section 5.1.6. | |||
For protection against loops from misconfiguration (see | For protection against loops caused by misconfiguration (see | |||
Section 5.2.1), DNC is only permissible for forward_connected() | Section 5.2.1), DNC is only permissible for forward_connected() | |||
adjacencies. No need or benefit of DNC for other type of adjacencies | adjacencies. No need or benefit of DNC for other types of | |||
was identified and their risk was not analyzed. | adjacencies was identified, and associated risks were not analyzed. | |||
4.2.2. Forward Routed | 4.2.2. Forward Routed | |||
A "forward_routed()" adjacency is an adjacency towards a BFR that | A "forward_routed()" adjacency is an adjacency towards a BFR that | |||
uses a (tunneling) encapsulation which will cause the packet to be | uses a (tunneling) encapsulation that will cause a packet to be | |||
forwarded by the routing underlay toward the adjacent BFR. This can | forwarded by the routing underlay towards the adjacent BFR indicated | |||
leverage any feasible encapsulation, such as MPLS or tunneling over | via the l3-neighbor parameter of the forward_routed() adjacency. | |||
IP/IPv6, as long as the BIER-TE packet can be identified as a | This can leverage any feasible encapsulation, such as MPLS or | |||
payload. This identification can either rely on the BIER/BIER-TE co- | tunneling over IP/IPv6, as long as the BIER-TE packet can be | |||
existence mechanisms described in Section 4.3, or by explicit support | identified as a payload. This identification can rely on either the | |||
for a BIER-TE payload type in the tunneling encapsulation. | BIER/BIER-TE co-existence mechanisms described in Section 4.3 or | |||
explicit support for a BIER-TE payload type in the tunneling | ||||
encapsulation. | ||||
forward_routed() adjacencies are necessary to pass BIER-TE traffic | Forward_routed() adjacencies are necessary to pass BIER-TE traffic | |||
across non BIER-TE capable routers or to minimize the number of | across routers that are not BIER-TE capable or to minimize the number | |||
required BP by tunneling over (BIER-TE capable) routers on which | of required BPs by tunneling over (BIER-TE-capable) routers on which | |||
neither replication nor path-steering is desired, or simply to | neither replication nor path steering is desired, or simply to | |||
leverage path redundancy and FRR of the routing underlay towards the | leverage the routing underlay's path redundancy and FRR towards the | |||
next BFR. They may also be useful to a multi-subnet adjacent BFR to | next BFR. They may also be useful to a multi-subnet adjacent BFR for | |||
leverage the routing underlay ECMP independent of BIER-TE ECMP | leveraging the routing underlay ECMP independently of BIER-TE ECMP | |||
(Section 4.2.3). | (Section 4.2.3). | |||
4.2.3. ECMP | 4.2.3. ECMP | |||
(non-TE) BIER ECMP is tied to the BIER BIFT processing semantic and | (Non-TE) BIER ECMP is tied to the BIER BIFT processing semantic and | |||
is therefore not directly usable with BIER-TE. | is therefore not directly usable with BIER-TE. | |||
A BIER-TE "Equal Cost Multipath" (ECMP()) adjacency as shown in | A BIER-TE "Equal-Cost Multipath" (ECMP()) adjacency as shown in | |||
Figure 4 for BIFT-index 7 has a list of two or more non-ECMP | Figure 4 for BIFT-index 7 has a list of two or more non-ECMP() | |||
adjacencies as parameters and an optional seed parameter. When a | adjacencies as parameters and an optional seed parameter. When a | |||
BIER-TE packet is copied onto such an ECMP() adjacency, an | BIER-TE packet is copied onto such an ECMP() adjacency, an | |||
implementation specific so-called hash function will select one out | implementation-specific so-called hash function will select one out | |||
of the list's adjacencies to which the packet is forwarded. If the | of the list's adjacencies to which the packet is forwarded. If the | |||
packet's encapsulation contains an entropy field, the entropy field | packet's encapsulation contains an entropy field, the entropy field | |||
SHOULD be respected; two packets with the same value of the entropy | SHOULD be respected; two packets with the same value of the entropy | |||
field SHOULD be sent on the same adjacency. The seed parameter | field SHOULD be sent on the same adjacency. The seed parameter | |||
allows to design hash functions that are easy to implement at high | permits the design of hash functions that are easy to implement at | |||
speed without running into polarization issues across multiple | high speed without running into polarization issues across multiple | |||
consecutive ECMP hops. See Section 5.1.7 for more explanations. | consecutive ECMP hops. See Section 5.1.7 for details. | |||
4.2.4. Local Decap(sulation) | 4.2.4. Local Decap(sulation) | |||
A "local_decap()" adjacency passes a copy of the payload of the BIER- | A "local_decap()" adjacency passes a copy of the payload of the BIER- | |||
TE packet to the protocol ("NextProto") within the BFR (IPv4/IPv6, | TE packet to the protocol ("NextProto") within the BFR (IP/IPv6, | |||
Ethernet,...) responsible for that payload according to the packet | Ethernet,...) responsible for that payload according to the packet | |||
header fields. A local_decap() adjacency turns the BFR into a BFER | header fields. A local_decap() adjacency turns the BFR into a BFER | |||
for matching packets. Local_decap() adjacencies require the BFER to | for matching packets. Local_decap() adjacencies require the BFER to | |||
support routing or switching for NextProto to determine how to | support routing or switching for NextProto to determine how to | |||
further process the packet. | further process the packets. | |||
4.3. Encapsulation / Co-existence with BIER | 4.3. Encapsulation / Co-existence with BIER | |||
Specifications for BIER-TE encapsulation are outside the scope of | Specifications for BIER-TE encapsulation are outside the scope of | |||
this document. This section gives explanations and guidelines. | this document. This section gives explanations and guidelines. | |||
Like [RFC8279], handling of "Maximum Transmission Unit" (MTU) | The handling of "Maximum Transmission Unit" (MTU) limitations is | |||
limitations is outside the scope of this document and instead part of | outside the scope of this document and is not discussed in [RFC8279] | |||
the BIER-TE packet encapsulation and/or flow overlay. See for | either. Instead, this process is part of the BIER-TE packet | |||
example [RFC8296], Section 3. It applies equally to BIER-TE as it | encapsulation and/or flow overlay; for example, see [RFC8296], | |||
does to BIER. | Section 3. It applies equally to BIER-TE and BIER. | |||
Because a BFR needs to interpret the BitString of a BIER-TE packet | Because a BFR needs to interpret the BitString of a BIER-TE packet | |||
differently from a (non-TE) BIER packet, it is necessary to | differently from a (non-TE) BIER packet, it is necessary to | |||
distinguish BIER from BIER-TE packets. In the BIER encapsulation | distinguish BIER packets from BIER-TE packets. In BIER encapsulation | |||
[RFC8296], the BIFT-id field of the packet indicates the BIFT of the | [RFC8296], the BIFT-id field of the packet indicates the BIFT of the | |||
packet. BIER and BIER-TE can therefore be run simultaneously, when | packet. BIER and BIER-TE can therefore be run simultaneously, when | |||
the BIFT-id address space is shared across BIER BIFT and BIER-TE | the BIFT-id address space is shared across BIER BIFTs and BIER-TE | |||
BIFT. Partitioning the BIFT-id address space is subject to BIER-TE/ | BIFTs. Partitioning the BIFT-id address space is subject to BIER-TE/ | |||
BIER control plane procedures. | BIER control plane procedures. | |||
When [RFC8296] is used for BIER with MPLS, BIFT-id address ranges can | When [RFC8296] is used for BIER with MPLS, BIFT-id address ranges can | |||
be dynamically allocated from MPLS label space only for the set of | be dynamically allocated from MPLS label space only for the set of | |||
actually used SD:BSL BIFT. This allows to also allocate non- | actually used SD:BSL BIFTs. This also permits the allocation of non- | |||
overlapping label ranges for BIFT-id that are to be used with BIER-TE | overlapping label ranges for BIFT-ids that are to be used with BIER- | |||
BIFTs. | TE BIFTs. | |||
With MPLS, it is also possible to reuse the same SD space for both | With MPLS, it is also possible to reuse the same SD space for both | |||
BIER-TE and BIER, so that the same SD has both a BIER BIFT with a | 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 | corresponding range of BIFT-ids and disjoint BIER-TE BIFTs with a | |||
non-overlapping range of BIFT-ids. | non-overlapping range of BIFT-ids. | |||
When a fixed mapping from BSL, SD and SI to BIFT-id is used which | Assume that a fixed mapping from BSL, SD, and SI to a BIFT-id is | |||
does not explicitly partition the BIFT-id space between BIER and | used, which does not explicitly partition the BIFT-id space between | |||
BIER-TE, such as proposed for non-MPLS forwarding with [RFC8296] | BIER and BIER-TE -- for example, as proposed for non-MPLS forwarding | |||
encapsulation in [I-D.ietf-bier-non-mpls-bift-encoding] revision 04, | with BIER encapsulation [RFC8296] in [NON-MPLS-BIER-ENCODING], | |||
section 5, then it is necessary to allocate disjoint SDs to BIER and | Section 5. In this case, it is necessary to allocate disjoint SDs to | |||
BIER-TE BIFTs so that both can be addressed by the BIFT-ids. The | BIER and BIER-TE BIFTs so that both can be addressed by the BIFT-ids. | |||
encoding proposed in section 6. of the same document does not | The encoding proposed in Section 6 of [NON-MPLS-BIER-ENCODING] does | |||
statically encode BSL or SD into the BIFT-id, but allows for a | not statically encode the BSL or SD into the BIFT-id, but the | |||
mapping, and hence could provide for the same freedom as when MPLS is | encoding permits a mapping and hence could provide the same freedom | |||
being used (same or different SD for BIER/BIER-TE). | as when MPLS is being used (the same SD, or different SDs for BIER/ | |||
BIER-TE). | ||||
forward_routed() requires an encapsulation that permits to direct | Forward_routed() requires an encapsulation that permits directing | |||
unicast encapsulated BIER-TE packets to a specific interface address | unicast encapsulated BIER-TE packets to a specific interface address | |||
on a target BFR. With MPLS encapsulation, this can simply be done | on a target BFR. With MPLS encapsulation, this can simply be done | |||
via a label stack with that addresses label as the top label - | via a label stack with that address's label as the top label, | |||
followed by the label assigned to the (BSL,SD,SI) BitString. With | followed by the label assigned to the (BSL,SD,SI) BitString. With | |||
non-MPLS encapsulation, some form of IP encapsulation would be | non-MPLS encapsulation, some form of IP encapsulation would be | |||
required (for example IP/GRE). | required (for example, IP/GRE). | |||
The encapsulation used for forward_routed() adjacencies can equally | The encapsulation used for forward_routed() adjacencies can equally | |||
support existing advanced adjacency information such as "loose source | support existing advanced adjacency information such as "loose source | |||
routes" via e.g. MPLS label stacks or appropriate header extensions | routes" via, for example, MPLS label stacks or appropriate header | |||
(e.g. for IPv6). | extensions (e.g., for IPv6). | |||
4.4. BIER-TE Forwarding Pseudocode | 4.4. BIER-TE Forwarding Pseudocode | |||
The following pseudocode, Figure 5, for BIER-TE forwarding is based | The pseudocode for BIER-TE forwarding, as shown in Figure 5, is based | |||
on the (non-TE) BIER forwarding pseudocode of [RFC8279], section 6.5 | on the (non-TE) BIER forwarding pseudocode provided in [RFC8279], | |||
with one modification. | Section 6.5, with one modification. | |||
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] | |||
} | } | |||
} | } | |||
Figure 5: BIER-TE Forwarding Pseudocode for required functions, | ||||
based on BIER Pseudocode | ||||
In step [2], the F-BM is used to clear bit(s) in PacketCopy. This | Figure 5: BIER-TE Forwarding Pseudocode for Required Functions, | |||
step exists in both BIER and BIER-TE, but the F-BMs need to be | Based on BIER Pseudocode | |||
populated differently for BIER-TE than for BIER for the desired | ||||
clearing. | 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 populated differently for BIER-TE than for BIER for the | ||||
desired clearing. | ||||
In BIER, multiple bits of a BitString can have the same BFR-NBR. | 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 | When a received packets BitString has more than one of those bits | |||
set, the BIER replication logic has to avoid that more than one | set, BIER's replication logic has to prevent more than one PacketCopy | |||
PacketCopy is sent to that BFR-NBR ([1]). Likewise, the PacketCopy | from being sent to that BFR-NBR ([1]). Likewise, the PacketCopy sent | |||
sent to a BFR-NBR must clear all bits in its BitString that are not | to a BFR-NBR must clear all bits in its BitString that are not routed | |||
routed across BFR-NBR. This protects against BIER replication on any | across a BFR-NBR. This prevents BIER's replication logic from | |||
possible further BFR to create duplicates ([2]). | creating duplicates on any possible further BFRs ([2]). | |||
To solve both [1] and [2] for BIER, the F-BM of each bit index needs | To solve both [1] and [2] for BIER, the F-BM of each bit index needs | |||
to have all bits set that this BFR wants to route across BFR-NBR. [2] | to have all bits set that this BFR wants to route across a BFR- | |||
clears all other bits in PacketCopy->BitString, and [1] clears those | NBR. [2] clears all other bits in PacketCopy->BitString, and [1] | |||
bits from Packet->BitString after the first PacketCopy. | clears those bits from Packet->BitString after the first PacketCopy. | |||
In BIER-TE, a BFR-NBR in this pseudocode is an adjacency, | In BIER-TE, a BFR-NBR in this pseudocode is an adjacency -- | |||
forward_connected(), forward_routed() or local_decap(). There is no | forward_connected(), forward_routed(), or local_decap(). There is no | |||
need for [2] to suppress duplicates in the way BIER does because in | need for [2] to suppress duplicates in the same way that BIER does, | |||
general, different BP would never have the same adjacency. If a | because in general, different BPs would never have the same | |||
BIER-TE controller actually finds some optimization in which this | adjacency. If a BIER-TE controller actually finds some optimization | |||
would be desirable, then the controller is also responsible to ensure | in which this would be desirable, then the controller is also | |||
that only one of those bits is set in any Packet->BitString, unless | responsible for ensuring that only one of those bits is set in any | |||
the controller explicitly wants for duplicates to be created. | Packet->BitString, unless the controller explicitly wants duplicates | |||
to be created. | ||||
The following points describe how the forwarding bit mask (F-BM) for | The following points describe how the F-BM for each BP is configured | |||
each BP is configured in the BIFT and how this impacts the BitString | in the BIFT and how this impacts the BitString of the packet being | |||
of the packet being processed with that BIFT: | processed with that BIFT: | |||
1. The F-BMs of all BIFT BPs without an adjacency have all their | 1. The F-BMs of all BIFT BPs without an adjacency have all their | |||
bits clear. This will cause [3] to skip further processing of | bits clear. This will cause [3] to skip further processing of | |||
such a BP. | such a BP. | |||
2. All BIFT BPs with an adjacency (with DNC flag clear) have an F-BM | 2. All BIFT BPs with an adjacency (with the DNC flag clear) have an | |||
that has only those BPs set for which this BFR does not have an | F-BM that has only those BPs set for which this BFR does not have | |||
adjacency. This causes [2] to clear all bits from | an adjacency. This causes [2] to clear all bits from | |||
PacketCopy->BitString for which this BFR does have an adjacency. | PacketCopy->BitString for which this BFR does have an adjacency. | |||
3. [1] is not performed for BIER-TE. All bit clearing required by | 3. [1] is not performed for BIER-TE. All bit clearing required by | |||
BIER-TE is performed by [2]. | BIER-TE is performed by [2]. | |||
This Forwarding Pseudocode can support the required BIER-TE | This forwarding pseudocode can support the required BIER-TE | |||
forwarding functions (see Section 4.5), forward_connected(), | forwarding functions (see Section 4.5) -- forward_connected(), | |||
forward_routed() and local_decap(), but not the recommended functions | forward_routed(), and local_decap() -- but cannot support the | |||
DNC flag and multiple adjacencies per bit nor the optional function, | recommended functions (DNC flag and multiple adjacencies per bit) or | |||
ECMP() adjacencies. The DNC flag cannot be supported when using only | the optional function (i.e., ECMP() adjacencies). The DNC flag | |||
[1] to mask bits. | cannot be supported when using only [1] to mask bits. | |||
The modified and expanded Forwarding Pseudocode in Figure 6 specifies | The modified and expanded forwarding pseudocode in Figure 6 specifies | |||
how to support all BIER-TE forwarding functions (required, | how to support all BIER-TE forwarding functions (required, | |||
recommended and optional): | recommended, and optional): | |||
* This pseudocode eliminates per-bit F-BM, therefore reducing the | 1. This pseudocode eliminates per-bit F-BMs, therefore reducing the | |||
size of BIFT state by BSL^2*SI and eliminating the need for per- | size of BIFT state by SI*BSL^2 and eliminating the need for per- | |||
packet-copy BitString masking operations except for adjacencies | packet-copy BitString masking operations, except for adjacencies | |||
with the DNC flag set: | with the DNC flag set: | |||
- AdjacentBits[SI] are bit positions with a non-empty list of | 1.a AdjacentBits[SI] are bit positions with a non-empty list of | |||
adjacencies in this BFR BIFT. This can be computed whenever | adjacencies in this BFR BIFT. This can be computed whenever | |||
the BIER-TE Controller updates (add/removes) adjacencies in the | the BIER-TE controller updates (adds/removes) adjacencies in | |||
BIFT. | the BIFT. | |||
- The BFR needs to create packet copies for these adjacent bits | 1.b The BFR needs to create packet copies for these adjacent | |||
when they are set in the packets BitString. This set of bits | bits when they are set in the packets BitString. This set | |||
is calculated in PktAdjacentBits. | of bits is calculated in PktAdjacentBits. | |||
- All bit positions to which the BFR creates copies have to be | 1.c All bit positions for which the BFR creates copies have to | |||
cleared in packet copies to avoid loops. This is done by | be cleared in packet copies to avoid loops. This is done by | |||
masking the BitString of the packet with ~AdjacentBits[SI]. | masking the BitString of the packet with ~AdjacentBits[SI]. | |||
When an adjacency has DNC set, this bit position is set again | When an adjacency has DNC set, this bit position is set | |||
only for the packet copy towards that bit position. | again only for the packet copy towards that bit position. | |||
* BIFT entries may contain more than one adjacency in support of | 2. BIFT entries may contain more than one adjacency in support of | |||
specific configurations such as Section 5.1.5. The code therefore | specific configurations, such as a hub and multiple spokes | |||
includes a loop over these adjacencies. | (Section 5.1.5). The code therefore includes a loop over these | |||
adjacencies. | ||||
* The ECMP() adjacency is shown. Its parameters are a seed and a | 3. The ECMP() adjacency is also shown in the figure. Its parameters | |||
ListOfAdjacencies from which one is picked. | are a seed and "ListOfAdjacencies", from which one is picked. | |||
* The forward_connected(), forward_routed(), local_decap() | 4. The forward_connected(), forward_routed(), and local_decap() | |||
adjacencies are shown with their parameters. | adjacencies are shown with their parameters. | |||
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 page 26, line 42 ¶ | skipping to change at line 1160 ¶ | |||
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); | |||
} | } | |||
} | } | |||
} | } | |||
} | } | |||
Figure 6: Complete BIER-TE Forwarding Pseudocode for required, | Figure 6: Complete BIER-TE Forwarding Pseudocode for Required, | |||
recommended and optional functions | Recommended, and Optional Functions | |||
4.5. BFR Requirements for BIER-TE forwarding | 4.5. BFR Requirements for BIER-TE Forwarding | |||
BFR that support BIER-TE and BIER MUST support configuration that | BFRs that support BIER-TE and BIER MUST support a configuration that | |||
enables BIER-TE instead of (non-TE) BIER forwarding rules for all | 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 | BIFTs of one or more BIER subdomains. Every BP in a BIER-TE BIFT | |||
MUST support to have zero or one adjacency. BIER-TE forwarding MUST | MUST support having zero or one adjacency. BIER-TE forwarding MUST | |||
support the adjacency types forward_connected() with the DNC flag not | support the adjacency types forward_connected() with the DNC flag not | |||
set, forward_routed() and local_decap(). As explained in | set, forward_routed(), and local_decap(). As explained in | |||
Section 4.4, these required BIER-TE forwarding functions can be | Section 4.4, these required BIER-TE forwarding functions can be | |||
implemented via the same Forwarding Pseudocode as BIER forwarding | implemented via the same forwarding pseudocode as that used for BIER | |||
except for one modification (skipping one masking with F-BM). | forwarding, except for one modification (skipping one masking with an | |||
F-BM). | ||||
BIER-TE forwarding SHOULD support forward_connected() adjacencies | BIER-TE forwarding SHOULD support forward_connected() adjacencies | |||
with a set DNC flag, as this is highly useful to save bits in rings | with the DNC flag set, as this is very useful for saving bits in | |||
(see Section 5.1.6). | rings (see Section 5.1.6). | |||
BIER-TE forwarding SHOULD support more than one adjacency on a bit. | BIER-TE forwarding SHOULD support more than one adjacency on a bit. | |||
This allows to save bits in hub and spoke scenarios (see | This allows bits to be saved in hub-and-spoke scenarios (see | |||
Section 5.1.5). | Section 5.1.5). | |||
BIER-TE forwarding MAY support ECMP() adjacencies to save bits in | BIER-TE forwarding MAY support ECMP() adjacencies to save bits in | |||
ECMP scenarios, see Section 5.1.7 for an example. This is an | ECMP scenarios; see Section 5.1.7 for an example. This is an | |||
optional requirement, because for ECMP deployments using BIER-TE one | optional requirement, because for ECMP deployments using BIER-TE one | |||
can also leverage ECMP of the routing underlay via forwarded_routed | can also leverage the routing underlay ECMP via forward_routed() | |||
adjacencies and/or might prefer to have more explicit control of the | adjacencies and/or might prefer to have more explicit control of the | |||
path chosen via explicit BP/adjacencies for each ECMP path | path chosen via explicit BPs/adjacencies for each ECMP path | |||
alternative. | alternative. | |||
5. BIER-TE Controller Operational Considerations | 5. BIER-TE Controller Operational Considerations | |||
5.1. Bit Position Assignments | 5.1. Bit Position Assignments | |||
This section describes how the BIER-TE Controller can use the | This section describes how the BIER-TE controller can use the | |||
different BIER-TE adjacency types to define the bit positions of a | different BIER-TE adjacency types to define the bit positions of a | |||
BIER-TE domain. | BIER-TE domain. | |||
Because the size of the BitString limits the size of the BIER-TE | Because the size of the BitString limits the size of the BIER-TE | |||
domain, many of the options described exist to support larger | domain, many of the options described here exist to support larger | |||
topologies with fewer bit positions. | topologies with fewer bit positions. | |||
5.1.1. P2P Links | 5.1.1. P2P Links | |||
On a P2P link that connects two BFRs, the same bit position can be | On a "point-to-point" (P2P) link that connects two BFRs, the same bit | |||
used on both BFRs for the adjacency to the neighboring BFR. A P2P | position can be used on both BFRs for the adjacency to the | |||
link requires therefore only one bit position. | neighboring BFR. A P2P link therefore requires only one bit | |||
position. | ||||
5.1.2. BFER | 5.1.2. BFERs | |||
Every non-Leaf BFER is given a unique bit position with a | Every non-leaf BFER is given a unique bit position with a | |||
local_decap() adjacency. | local_decap() adjacency. | |||
5.1.3. Leaf BFERs | 5.1.3. Leaf BFERs | |||
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. | ||||
Consider how redundant disjoint traffic can reach BFER1/BFER2 as | ||||
shown in Figure 7: 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 transit traffic from | ||||
passing through the BFERs, which is commonly applied in these | ||||
topologies. | ||||
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 | |||
Figure 7: Leaf vs. non-Leaf BFER Example | ||||
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) | ||||
router are spokes connected to Provider (P) routers, those PEs are | ||||
Leaf BFERs unless there is a U-turn between two PEs. | ||||
Consider how redundant disjoint traffic can reach BFER1/BFER2 in | Figure 7: Leaf vs. Non-Leaf BFER Example | |||
Figure 7: When BFER1/BFER2 are Non-Leaf BFER 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 in the left-hand picture are | ||||
only guaranteed to be leaf-BFER by fitting routing configuration that | ||||
prohibits transit traffic to pass through the BFERs, which is | ||||
commonly applied in these topologies. | ||||
In most situations, leaf-BFER that are to be addressed via the same | In most situations, leaf BFERs that are to be addressed via the same | |||
BitString can share a single bit position for their local_decap() | BitString can share a single bit position for their local_decap() | |||
adjacency in that BitString and therefore save bit positions. On a | adjacency in that BitString and therefore save bit positions. On a | |||
non-leaf BFER, a received BIER-TE packet may only need to transit the | non-leaf BFER, a received BIER-TE packet may only need to transit the | |||
BFER or it may need to also be decapsulated. Whether or not to | BFER, or it may also need to be decapsulated. Whether or not to | |||
decapsulate the packet therefore needs to be indicated by a unique | decapsulate the packet therefore needs to be indicated by a unique | |||
bit position populated only on the BIFT of this BFER with a | bit position populated only on the BIFT of this BFER with a | |||
local_decap() adjacency. On a leaf-BFER, packets never need to pass | local_decap() adjacency. On a leaf BFER, packets never need to pass | |||
through; any packet received is therefore usually intended to be | through; any packet received is therefore usually intended to be | |||
decapsulated. This can be expressed by a single, shared bit position | decapsulated. This can be expressed by a single, shared bit position | |||
that is populated with a local_decap() adjacency on all leaf-BFER | that is populated with a local_decap() adjacency on all leaf BFERs | |||
addressed by the BitString. | addressed by the BitString. | |||
The possible exception from this leaf-BFER bit position optimization | The possible exceptions to this leaf BFER bit position optimization | |||
can be cases where the bit position on the prior BIER-TE BFR (which | scenario can be cases where the bit position on the prior BIER-TE BFR | |||
created the packet copy for the leaf-BFER in question) is populated | (which created the packet copy for the leaf BFER in question) is | |||
with multiple adjacencies as an optimization, such as in | populated with multiple adjacencies as an optimization -- for | |||
Section 5.1.4 or Section 5.1.5. With either of these two | example, as described in Sections 5.1.4 and 5.1.5. With either of | |||
optimizations, the sender of the packet could only control explicitly | these two optimizations, the sender of the packet could only control | |||
whether the packet was to be decapsulated on the leaf-BFER in | explicitly whether the packet was to be decapsulated on the leaf BFER | |||
question, if the leaf-BFER has a unique bit position for its | in question, if the leaf BFER has a unique bit position for its | |||
local_decap() adjacency. | local_decap() adjacency. | |||
However, if the bit position is shared across leaf-BFER, and packets | However, if the bit position is shared across a leaf BFER and packets | |||
are therefore decapsulated potentially unnecessarily, this may still | are therefore decapsulated -- potentially unnecessarily -- this may | |||
be appropriate if the decapsulated payload of the BIER-TE packet | still be appropriate if the decapsulated payload of the BIER-TE | |||
indicates whether or not the packet needs to be further processed/ | packet indicates whether or not the packets need to be further | |||
received. This is typically true for example if the payload is IP | processed/received. This is typically true, for example, if the | |||
multicast because IP multicast on a BFER would know the membership | payload is IP multicast, because IP multicast on a BFER would know | |||
state of the IP multicast payload and be able to discard it if the | the membership state of the IP multicast payload and be able to | |||
packet was delivered unnecessarily by the BIER-TE layer. If the | discard it if the packets were delivered unnecessarily by the BIER-TE | |||
payload has no such membership indication, and the BFIR wants to have | layer. If the payload has no such membership indication and the BFIR | |||
explicit control about which BFER are to receive and decapsulate a | wants to have explicit control regarding which BFERs are to receive | |||
packet, then these two optimizations can not be used together with | and decapsulate a packet, then these two optimizations cannot be used | |||
shared bit positions optimization for leaf-BFER. | together with shared bit position optimization for a leaf BFER. | |||
5.1.4. LANs | 5.1.4. LANs | |||
In a LAN, the adjacency to each neighboring BFR is given a unique bit | In a LAN, the adjacency to each neighboring BFR is given a unique bit | |||
position. The adjacency of this bit position is a | position. The adjacency of this bit position is a | |||
forward_connected() adjacency towards the BFR and this bit position | forward_connected() adjacency towards the BFR, and this bit position | |||
is populated into the BIFT of all the other BFRs on that LAN. | is populated into the BIFT of all the other BFRs on that LAN. | |||
BFR1 | BFR1 | |||
|p1 | |p1 | |||
LAN1-+-+---+-----+ | LAN1-+-+---+-----+ | |||
p3| p4| p2| | p3| p4| p2| | |||
BFR3 BFR4 BFR7 | BFR3 BFR4 BFR7 | |||
Figure 8: LAN Example | Figure 8: LAN Example | |||
If Bandwidth on the LAN is not an issue and most BIER-TE traffic | 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 can be | should be copied to all neighbors on a LAN, then bit positions can be | |||
saved by assigning just a single bit position to the LAN and | saved by assigning just a single bit position to the LAN and | |||
populating the bit position of the BIFTs of each BFRs on the LAN with | populating the bit position of the BIFTs of each BFR on the LAN with | |||
a list of forward_connected() adjacencies to all other neighbors on | a list of forward_connected() adjacencies to all other neighbors on | |||
the LAN. | the LAN. | |||
This optimization does not work in the case of BFRs redundantly | This optimization does not work in the case of BFRs redundantly | |||
connected to more than one LAN with this optimization because these | connected to more than one LAN with this optimization. These BFRs | |||
BFRs would receive duplicates and forward those duplicates into the | would receive duplicates and forward those duplicates into the other | |||
opposite LANs. Adjacencies of such BFRs into their LAN still need a | LANs. Such BFRs require separate bit positions for each LAN they | |||
separate bit position. | connect to. | |||
5.1.5. Hub and Spoke | 5.1.5. Hub and Spoke | |||
In a setup with a hub and multiple spokes connected via separate p2p | In a setup with a hub and multiple spokes connected via separate P2P | |||
links to the hub, all p2p adjacencies from the hub to the spokes | links to the hub, all P2P adjacencies from the hub to the spokes' | |||
links can share the same bit position. The bit position on the hub's | links can share the same bit position. The bit position on the hub's | |||
BIFT is set up with a list of forward_connected() adjacencies, one | BIFT is set up with a list of forward_connected() adjacencies, one | |||
for each Spoke. | for each spoke. | |||
This option is similar to the bit position optimization in LANs: | This option is similar to the bit position optimization in LANs: | |||
Redundantly connected spokes need their own bit positions, unless | redundantly connected spokes need their own bit positions, unless | |||
they are themselves Leaf-BFER. | they are themselves leaf BFERs. | |||
This type of optimized BP could be used for example when all traffic | This type of optimized BP could be used, for example, when all | |||
is "broadcast" traffic (very dense receiver set) such as live-TV or | traffic is "broadcast" traffic (very dense receiver sets), such as | |||
many-to-many telemetry including situation-awareness (SA). This BP | live TV or many-to-many telemetry, including situational awareness. | |||
optimization can then be used to explicitly steer different traffic | This BP optimization can then be used to explicitly steer different | |||
flows across different ECMP paths in Data-Center or broadband- | traffic flows across different ECMP paths in data-center or | |||
aggregation networks with minimal use of BPs. | broadband-aggregation networks with minimal use of BPs. | |||
5.1.6. Rings | 5.1.6. Rings | |||
In L3 rings, instead of assigning a single bit position for every p2p | 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 | link in the ring, it is possible to save bit positions by setting the | |||
"DoNotClear" (DNC) flag on forward_connected() adjacencies. | "DoNotClear" (DNC) flag on forward_connected() adjacencies. | |||
For the rings shown in Figure 9, a single bit position will suffice | For the ring shown in Figure 9, a single bit position will suffice to | |||
to forward traffic entering the ring at BFRa or BFRb all the way up | forward traffic entering the ring at BFRa or BFRb all the way up to | |||
to BFR1: | BFR1, as follows. | |||
On BFRa, BFRb, BFR30,... BFR3, the bit position is populated with a | On BFRa, BFRb, BFR30,... BFR3, the bit position is populated with a | |||
forward_connected() adjacency pointing to the clockwise neighbor on | forward_connected() adjacency pointing to the clockwise neighbor on | |||
the ring and with DNC set. On BFR2, the adjacency also points to the | the ring and with DNC set. On BFR2, the adjacency also points to the | |||
clockwise neighbor BFR1, but without DNC set. | clockwise neighbor BFR1, but without DNC set. | |||
Handling DNC this way ensures that copies forwarded from any BFR in | Handling DNC this way ensures that copies forwarded from any BFRs in | |||
the ring to a BFR outside the ring will not have the ring bit | the ring to a BFR outside the ring will not have the ring bit | |||
position set, therefore minimizing the chance to create loops. | position set, therefore minimizing the risk of creating loops. | |||
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 | |||
skipping to change at page 31, line 4 ¶ | skipping to change at line 1359 ¶ | |||
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 | |||
Figure 9: Ring Example | Figure 9: Ring Example | |||
Note that this example only permits for packets intended to make it | Note that this example only permits packets intended to make it all | |||
all the way around the ring to enter it at BFRa and BFRb, and that | the way around the ring to enter it at BFRa and BFRb. Note also that | |||
packets will always travel clockwise. If packets should be allowed | packets will always travel clockwise. If packets should be allowed | |||
to enter the ring at any ring BFR, then one would have to use two | to enter the ring at any of the ring's BFRs, then one would have to | |||
ring bit positions. One for each direction: clockwise and | use two ring bit positions, one for each direction: clockwise and | |||
counterclockwise. | counterclockwise. | |||
Both would be set up to stop rotating on the same link, e.g. L1. | Both would be set up to stop rotating on the same link, e.g., L1. | |||
When the ingress ring BFR creates the clockwise copy, it will clear | When the ring's BFIR creates the clockwise copy, it will clear the | |||
the counterclockwise bit position because the DNC bit only applies to | counterclockwise bit position because the DNC bit only applies to the | |||
the bit for which the replication is done. Likewise for the | bit for which the replication is done (likewise for the clockwise bit | |||
clockwise bit position for the counterclockwise copy. As a result, | position for the counterclockwise copy). As a result, the ring's | |||
the ring ingress BFR will send a copy in both directions, serving | BFIR will send a copy in both directions, serving BFRs on either side | |||
BFRs on either side of the ring up to L1. | of the ring up to L1. | |||
5.1.7. Equal Cost MultiPath (ECMP) | ||||
[RFC-Editor: A reviewer (Lars Eggert) noted that the infinite "to | 5.1.7. Equal-Cost Multipath (ECMP) | |||
use" in the following sentence is not correct. The same was also | ||||
noted for several other similar instances. The following URL seems | ||||
to indicate though that this is a per-case decision, which seems | ||||
undefined: https://writingcenter.gmu.edu/guides/choosing-between- | ||||
infinitive-and-gerund-to-do-or-doing. What exactly should be done | ||||
about this ?]. | ||||
An ECMP() adjacency allows to use just one BP to deliver packets to | An ECMP() adjacency allows the use of just one BP to deliver packets | |||
one of N adjacencies instead of one BP for each adjacency. In the | to one of N adjacencies instead of one BP for each adjacency. In the | |||
common example case Figure 10, a link-bundle of three links L1,L2,L3 | common example case shown in Figure 10, a link bundle of three links | |||
connects BFR1 and BFR2, and only one BP is used instead of three BP | L1,L2,L3 connects BFR1 and BFR2, and only one BP is used instead of | |||
to deliver packets from BFR1 to BFR2. | three BPs to deliver packets from BFR1 to BFR2. | |||
--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), | | |||
skipping to change at page 32, line 31 ¶ | skipping to change at line 1411 ¶ | |||
================================================================== | ================================================================== | |||
| 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) | | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
Figure 10: ECMP Example | Figure 10: ECMP Example | |||
This document does not standardize any ECMP algorithm because it is | This document does not standardize any ECMP algorithm because it is | |||
sufficient for implementations to document their freely chosen ECMP | sufficient for implementations to document their freely chosen ECMP | |||
algorithm. Figure 11 shows an example ECMP algorithm, and would | algorithm. Figure 11 shows an example ECMP algorithm and would | |||
double as its documentation: A BIER-TE controller could determine | double as its documentation: a BIER-TE controller could determine | |||
which adjacency is chosen based on the seed and adjacencies | which adjacency is chosen based on the seed and adjacencies | |||
parameters and the packet entropy. | parameters and on packet entropy. | |||
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) | |||
Figure 11: ECMP algorithm Example | Figure 11: ECMP Algorithm Example | |||
In the following example, all traffic from BFR1 towards BFR10 is | In the example shown in Figure 12, all traffic from BFR1 towards | |||
intended to be ECMP load split equally across the topology. This | BFR10 is intended to be ECMP load-split equally across the topology. | |||
example is not meant as a likely setup, but to illustrate that ECMP | This example is not meant as a likely setup; rather, it illustrates | |||
can be used to share BPs not only across link bundles, but also | that ECMP can be used to share BPs not only across link bundles but | |||
across alternative paths across different transit BFR, and it | also across alternative paths across different transit BFRs, and it | |||
explains the use of the seed parameter. | explains the use of the seed parameter. | |||
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 | |||
\ / \ / | \ / \ / | |||
skipping to change at page 34, line 5 ¶ | skipping to change at line 1478 ¶ | |||
| 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| | |||
------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
Figure 12: Polarization Example | Figure 12: Polarization Example | |||
Note that for the following discussion of ECMP, only the BIFT ECMP | Note that for the following discussion of ECMP, only the BIFT ECMP() | |||
adjacencies on BFR1, BFR2, BFR3 are relevant. The re-use of BP | adjacencies on BFR1, BFR2, and BFR3 are relevant. The reuse of BPs | |||
across BFR in this example is further explained in Section 5.1.9 | across BFRs in this example is further explained in Section 5.1.9 | |||
below. | below. | |||
With the setup of ECMP in the topology above, traffic would not be | With the ECMP setup shown in the topology above, traffic would not 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 hash | 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 | 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 | given as parameters to the ECMP: link L11-to-BFR2. BFR2 again | |||
performs again ECMP with two adjacencies on that subset of traffic | performs ECMP with two adjacencies on that subset of traffic using | |||
using the same seed1, and will therefore again select the first of | the same seed1 and will therefore again select the first of its two | |||
its two adjacencies: L21-to-BFR4. And therefore L22 and BFR5 sees no | adjacencies: L21-to-BFR4. Therefore, L22 and BFR5 see no traffic | |||
traffic. Likewise for L31 and BFR6. | (likewise for L31 and BFR6). | |||
This issue in BFR2/BFR3 is called polarization. It results from the | This issue in BFR2/BFR3 is called "polarization". It results from | |||
re-use of the same hash function across multiple consecutive hops in | the reuse of the same hash function across multiple consecutive hops | |||
topologies like these. To resolve this issue, the ECMP() adjacency | in topologies like these. To resolve this issue, the ECMP() | |||
on BFR1 can be set up with a different seed2 than the ECMP() | adjacency on BFR1 can be set up with a different seed2 than the | |||
adjacencies on BFR2/BFR3. BFR2/BFR3 can use the same hash because | ECMP() adjacencies on BFR2/BFR3. BFR2/BFR3 can use the same hash | |||
packets will not sequentially pass across both of them. Therefore, | because packets will not sequentially pass across both of them. | |||
they can also use the same BP 0:7. | Therefore, they can also use the same BP (i.e., 0:7). | |||
Note that ECMP solutions outside of BIER often hide the seed by auto- | Note that ECMP solutions outside of BIER often hide the seed by auto- | |||
selecting it from local entropy such as unique local or next-hop | selecting it from local entropy such as unique local or next-hop | |||
identifiers. Allowing the BIER-TE Controller to explicitly set the | identifiers. Allowing the BIER-TE controller to explicitly set the | |||
seed gives the ability for it to control same/different path | seed gives the BIER-TE controller the ability to control the | |||
selection across multiple consecutive ECMP hops. | selection of the same path or different paths across multiple | |||
consecutive ECMP hops. | ||||
5.1.8. Forward Routed adjacencies | 5.1.8. Forward Routed Adjacencies | |||
5.1.8.1. Reducing bit positions | 5.1.8.1. Reducing Bit Positions | |||
Forward_routed() adjacencies can reduce the number of bit positions | 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() | explicit path selection but rather is loose-hop selection. | |||
adjacencies can also allow to operate BIER-TE across intermediate hop | Forward_routed() adjacencies can also permit BIER-TE operation across | |||
routers that do not support BIER-TE. | intermediate-hop routers that do not support BIER-TE. | |||
Assume that the requirement in Figure 13 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. | ||||
............... | ............... | |||
...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 | |||
Figure 13: Forward Routed Adjacencies Example | Figure 13: Forward Routed Adjacencies Example | |||
Assume the requirement in Figure 13 is to explicitly steer traffic | To enable this, both BFR1 and BFR4 are set up with a forward_routed() | |||
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. | ||||
To enable this, both BFR1 and BFR4 are set up with a forward_routed | ||||
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 | forward_routed() bit position towards an address of BFR2 on link L2, | |||
and a third forward_routed() bit position towards a node address LO | and a third forward_routed() bit position towards a node address LO | |||
of BFR3. | of BFR3. | |||
5.1.8.2. Supporting nodes without BIER-TE | 5.1.8.2. Supporting Nodes without BIER-TE | |||
Forward_routed() adjacencies also enable incremental deployment of | Forward_routed() adjacencies also enable incremental deployment of | |||
BIER-TE. Only the nodes through which BIER-TE traffic needs to be | BIER-TE. Only the nodes through which BIER-TE traffic needs to be | |||
steered - with or without replication - need to support BIER-TE. | steered -- with or without replication -- need to support BIER-TE. | |||
Where they are not directly connected to each other, forward_routed | Where they are not directly connected to each other, forward_routed() | |||
adjacencies are used to pass over non BIER-TE enabled nodes. | adjacencies are used to pass over nodes that are not BIER-TE enabled. | |||
5.1.9. Reuse of bit positions (without DNC) | 5.1.9. Reuse of Bit Positions (without DNC) | |||
Bit positions can be re-used across multiple BFRs to minimize the | BPs can be reused across multiple BFRs to minimize the number of BPs | |||
number of BP needed. This happens when adjacencies on multiple BFRs | needed. This happens when adjacencies on multiple BFRs use the DNC | |||
use the DNC flag as described above, but it can also be done for non- | flag as described above, but it can also be done for non-DNC | |||
DNC adjacencies. This section only discusses this non-DNC case. | adjacencies. This section only discusses this non-DNC case. | |||
Because BP are cleared when passing a BFR with an adjacency for that | Because a given BP is cleared when passing a BFR with an adjacency | |||
BP, reuse of BP across multiple BFRs does not introduce any problems | for that BP, reusing BPs across multiple BFRs does not introduce any | |||
with duplicates or loops that do not also exist when every adjacency | problems with duplicates or loops that do not also exist when every | |||
has a unique BP. Instead, the challenge when reusing BP is whether | adjacency has a unique BP. Instead, the challenge when reusing BPs | |||
it allows to still achieve the desired Tree Engineering goals. | is whether the desired Tree Engineering goals can still be achieved. | |||
BP cannot be reused across two BFRs that would need to be passed | A 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. BP can be set across BFR that would (A) only | paths cannot be built. A BP can be set across BFRs that would only | |||
occur across different paths or (B) across different branches of the | occur across (A) different paths or (B) different branches of the | |||
same tree. | same tree. | |||
An example of (A) was given in Figure 12, where BP 0:7, BP 0:8 and BP | An example of (A) was given in Figure 12, where BP 0:7, BP 0:8, and | |||
0:9 are each reused across multiple BFRs because a single packet/path | BP 0:9 are each reused across multiple BFRs because a single packet/ | |||
would never be able to reach more than one BFR sharing the same BP. | path would never be able to reach more than one BFR sharing the same | |||
BP. | ||||
Assume the example was changed: BFR1 has no ECMP() adjacency for BP | Assume that the example was changed: BFR1 has no ECMP() adjacency for | |||
0:6, but instead BP 0:5 with forward_connected() to BFR2 and BP 0:6 | BP 0:6 but instead has BP 0:5 with forward_connected() to BFR2 and BP | |||
with forward_connected() to BFR3. Packets with both BP 0:5 and BP | 0:6 with forward_connected() to BFR3. Packets with both BP 0:5 and | |||
0:6 would now be able to reach both BFR2 and BFR3 and the still | BP 0:6 would now be able to reach both BFR2 and BFR3, and the still- | |||
existing re-use of BP 0:7 between BFR2 and BFR3 is a case of (B) | existing reuse of BP 0:7 between BFR2 and BFR3 is a case of (B) where | |||
where reuse of BP is perfect because it does not limit the set of | reusing a BP is perfect because it does not limit the set of useful | |||
useful path choices: | path choices, as in the following example. | |||
If instead of reusing BP 0:7, BFR3 used a separate BP 0:10 for its | 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 | ECMP() adjacency, no useful additional path steering options would be | |||
enabled. If duplicates at BFR10 where undesirable, this would be | enabled. If duplicates at BFR10 were undesirable, this would be done | |||
done by not setting BP 0:5 and BP 0:6 for the same packet. If the | by not setting BP 0:5 and BP 0:6 for the same packet. If the | |||
duplicates where desirable (e.g.: resilient transmission), the | duplicates were desirable (e.g., resilient transmission), the | |||
additional BP 0:10 would also not render additional value. | additional BP 0:10 would also not render additional value. | |||
Reuse may also save BPs in larger topologies. Consider the topology | ||||
shown in Figure 14. | ||||
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 | |||
Figure 14: Reuse of BP | Figure 14: Reuse of BPs | |||
Reuse may also save BPs in larger topologies. Consider the topology | A BFIR/sender (e.g., video headend) is attached to area 1, and the | |||
shown in Figure 14. A BFIR/sender (e.g.: video headend) is attached | five areas 2...6 contain receivers/BFERs. Assume that each area has | |||
to area 1, and area 2...6 contain receivers/BFER. Assume each area | a distribution ring, each with two BPs to indicate the direction (as | |||
had a distribution ring, each with two BPs to indicate the direction | explained before). These two BPs could be reused across the five | |||
(as explained before). These two BPs could be reused across the 5 | areas. Packets would be replicated through other BPs from the core | |||
areas. Packets would be replicated through other BPs for the Core to | to the desired subset of areas, and once a packet copy reaches the | |||
the desired subset of areas, and once a packet copy reaches the ring | ring of the area, the two ring BPs come into play. This reuse is a | |||
of the area, the two ring BPs come into play. This reuse is a case | case of (B), but it limits the topology choices: packets can only | |||
of (B), but it limits the topology choices: Packets can only flow | flow around the same direction in the rings of all areas. This may | |||
around the same direction in the rings of all areas. This may or may | or may not be acceptable based on the desired path steering options: | |||
not be acceptable based on the desired path steering options: If | if resilient transmission is the path engineering goal, then it is | |||
resilient transmission is the path engineering goal, then it is | likely a good optimization; however, if the bandwidth of each ring | |||
likely a good optimization, if the bandwidth of each ring was to be | were to be optimized separately, it would not be a good limitation. | |||
optimized separately, it would not be a good limitation. | ||||
5.1.10. Summary of BP optimizations | 5.1.10. Summary of BP Optimizations | |||
This section reviewed a range of techniques by which a BIER-TE | In this section, we reviewed a range of techniques by which a BIER-TE | |||
Controller can create a BIER-TE topology in a way that minimizes the | controller can create a BIER-TE topology in a way that minimizes the | |||
number of necessary BPs. | number of necessary BPs. | |||
Without any optimization, a BIER-TE Controller would attempt to map | Without any optimization, a BIER-TE controller would attempt to map | |||
the network subnet topology 1:1 into the BIER-TE topology and every | the network subnet topology 1:1 into the BIER-TE topology, every | |||
subnet adjacent neighbor requires a forward_connected() BP and every | adjacent neighbor in the subnet would require a forward_connected() | |||
BFER requires a local_decap() BP. | BP, and every BFER would require a local_decap() BP. | |||
The optimizations described are then as follows: | The optimizations described in this document are then as follows: | |||
* P2P links require only one BP (Section 5.1.1). | 1. P2P links require only one BP (Section 5.1.1). | |||
* All leaf-BFER can share a single local_decap() BP (Section 5.1.3). | 2. All leaf BFERs can share a single local_decap() BP | |||
(Section 5.1.3). | ||||
* A LAN with N BFR needs at most N BP (one for each BFR). It only | 3. A LAN with N BFRs needs at most N BPs (one for each BFR). It | |||
needs one BP for all those BFR that are not redundantly connected | only needs one BP for all those BFRs that are not redundantly | |||
to multiple LANs (Section 5.1.4). | connected to multiple LANs (Section 5.1.4). | |||
* A hub with p2p connections to multiple non-leaf-BFER spokes can | 4. A hub with P2P connections to multiple non-leaf BFER spokes can | |||
share one BP to all spokes if traffic can be flooded to all | share one BP with all of the spokes if traffic can be flooded to | |||
spokes, e.g.: because of no bandwidth concerns or dense receiver | all of those spokes, e.g., because of no bandwidth concerns or | |||
sets (Section 5.1.5). | dense receiver sets (Section 5.1.5). | |||
* Rings of BFR can be built with just two BP (one for each | 5. Rings of BFRs can be built with just two BPs (one for each | |||
direction) except for BFR with multiple ring connections - similar | direction), except for BFRs with multiple ring connections -- | |||
to LANs (Section 5.1.6). | similar to LANs (Section 5.1.6). | |||
* ECMP() adjacencies to N neighbors can replace N BP with 1 BP. | 6. ECMP() adjacencies to N neighbors can replace N BPs with one BP. | |||
Multihop ECMP can avoid polarization through different seeds of | Multihop ECMP can avoid polarization through different seeds of | |||
the ECMP algorithm (Section 5.1.7). | the ECMP algorithm (Section 5.1.7). | |||
* Forward_routed() adjacencies allow to "tunnel" across non-BIER-TE | 7. Forward_routed() adjacencies permit "tunneling" across routers | |||
capable routers and across BIER-TE capable routers where no | that are either BIER-TE capable or not BIER-TE capable where no | |||
traffic-steering or replications are required (Section 5.1.8). | traffic steering or replications are required (Section 5.1.8). | |||
* BP can generally be reused across a set of nodes where it can be | 8. A BP can generally be reused across a set of nodes where it can | |||
guaranteed that no path will ever need to traverse more than one | be guaranteed that no path will ever need to traverse more than | |||
node of the set. Depending on scenario, this may limit the | one node of the set. Depending on the scenario, this may limit | |||
feasible path steering options (Section 5.1.9). | the feasible path steering options (Section 5.1.9). | |||
Note that the described list of optimizations is not exhaustive. | Note that this list of optimizations is not exhaustive. Further | |||
Especially when the set of required path steering choices is limited | optimizations of BPs are possible, especially when both the set of | |||
and the set of possible subsets of BFERs that should be able to | required path steering choices and the possible subsets of BFERs that | |||
receive traffic is limited, further optimizations of BP are possible. | should be able to receive traffic are limited. The hub-and-spoke | |||
The hub and spoke optimization is a simple example of such traffic | optimization is a simple example of such traffic-pattern-dependent | |||
pattern dependent optimizations. | optimizations. | |||
5.2. Avoiding Duplicates and Loops | ||||
5.2. Avoiding duplicates and loops | ||||
5.2.1. Loops | 5.2.1. Loops | |||
Whenever BIER-TE creates a copy of a packet, the BitString of that | Whenever BIER-TE creates a copy of a packet, the BitString of that | |||
copy will have all bit positions cleared that are associated with | copy will have all bit positions cleared that are associated with | |||
adjacencies on the BFR. This inhibits looping of packets. The only | adjacencies on the BFR. This prevents packets from looping. The | |||
exception are adjacencies with DNC set. | only exceptions are adjacencies with DNC set. | |||
With DNC set, looping can happen. Consider in Figure 15 that link L4 | ||||
from BFR3 is (inadvertently) plugged into the L1 interface of BFRa | ||||
(instead of BFR2). This creates a loop where the ring's clockwise | ||||
bit position is never cleared for copies of the packets traveling | ||||
clockwise around the ring. | ||||
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 | |||
Figure 15: Miswired Ring Example | Figure 15: Miswired Ring Example | |||
With DNC set, looping can happen. Consider in Figure 15 that link L4 | ||||
from BFR3 is (inadvertently) plugged into the L1 interface of BFRa | ||||
(instead of BFR2). This creates a loop where the rings clockwise bit | ||||
position is never cleared for copies of the packets traveling | ||||
clockwise around the ring. | ||||
To inhibit looping in the face of such physical misconfiguration, | 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 | and the link layer port unique unicast destination address of the | |||
adjacency (e.g. MAC address) protects against closing the loop. | adjacency (e.g., "Media Access Control" (MAC) address) protects | |||
Link layers without port unique link layer addresses should not be | against closing the loop. Link layers without port unique link layer | |||
used with the DNC flag set. | addresses should not be used with the DNC flag set. | |||
5.2.2. Duplicates | 5.2.2. Duplicates | |||
Duplicates happen when the graph expressed by a BitString is not a | ||||
tree but is redundantly connecting BFRs with each other. In | ||||
Figure 16, 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. | ||||
BFIR1 | BFIR1 | |||
/ \ | / \ | |||
/ p2 \ p3 | / p2 \ p3 | |||
BFR2 BFR3 | BFR2 BFR3 | |||
\ p4 / p5 | \ p4 / p5 | |||
\ / | \ / | |||
BFER4 | BFER4 | |||
Figure 16: Duplicates Example | Figure 16: Duplicates Example | |||
Duplicates happen when the graph expressed by a BitString is not a | When links are incorrectly physically reconnected before the BIER-TE | |||
tree but redundantly connecting BFRs with each other. In Figure 16, | controller updates BitStrings in BFIRs, duplicates can happen. Like | |||
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. | ||||
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 in | loops, these can be inhibited by link layer addressing in | |||
forward_connected() adjacencies. | forward_connected() adjacencies. | |||
If interface or loopback addresses used in forward_routed() | If interface or loopback addresses used in forward_routed() | |||
adjacencies are moved from one BFR to another, duplicates can equally | adjacencies are moved from one BFR to another, duplicates are equally | |||
happen. Such re-addressing operations must be coordinated with the | likely to happen. Such readdressing operations must be coordinated | |||
BIER-TE Controller. | with the BIER-TE controller. | |||
5.3. Managing SI, sub-domains and BFR-ids | 5.3. Managing SIs, Subdomains, and BFR-ids | |||
When the number of bits required to represent the necessary hops in | When the number of bits required to represent the necessary hops in | |||
the topology and BFER exceeds the supported BitStringLength (BSL), | the topology and BFERs exceeds the supported "BitStringLength" (BSL), | |||
multiple SIs and/or sub-domains must be used. This section discusses | multiple SIs and/or subdomains must be used. This section discusses | |||
how. | how this is done. | |||
BIER-TE forwarding does not require the concept of BFR-id, but | BIER-TE forwarding does not require the concept of BFR-ids, but | |||
routing underlay, flow overlay and BIER headers may. This section | routing underlay, flow overlay, and BIER headers may. This section | |||
also discusses how BFR-ids can be assigned to BFIR/BFER for BIER-TE. | also discusses how BFR-ids can be assigned to BFIRs/BFERs for BIER- | |||
TE. | ||||
5.3.1. Why SI and sub-domains | 5.3.1. Why SIs and Subdomains? | |||
For (non-TE) BIER and BIER-TE forwarding, the most important result | For (non-TE) BIER and BIER-TE forwarding, the most important result | |||
of using multiple SI and/or sub-domains is the same: Packets that | of using multiple SIs and/or subdomains is the same: multicast flow | |||
need to be sent to BFERs in different SIs or sub-domains require | overlay packets that need to be sent to BFERs in different SIs or | |||
different BIER packets: each one with a BitString for a different | subdomains require multiple BIER packets, each one with a BitString | |||
(SI,sub-domain) combination. Each such BitString uses one BSL sized | for a different (SI,subdomain) combination. Each such BitString uses | |||
SI block in the BIFT of the sub-domain. We call this a BIFT:SI | one BSL-sized SI block in the BIFT of the subdomain. We call this a | |||
(block). | BIFT:SI (block). | |||
For BIER and BIER-TE forwarding themselves there is also no | SIs and subdomains have different purposes in the BIER architecture | |||
difference whether different SIs and/or sub-domains are chosen, but | and also the BIER-TE architecture. This impacts how operators manage | |||
SI and sub-domain have different purposes in the BIER architecture | them and especially how flow overlays will likely use them. | |||
shared by BIER-TE. This impacts how operators are managing them and | ||||
how especially flow overlays will likely use them. | ||||
By default, every possible BFIR/BFER in a BIER network would likely | 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). | be given a BFR-id in subdomain 0 (unless there are > 64k BFIRs/ | |||
BFERs). | ||||
If there are different flow services (or service instances) requiring | If there are different flow services (or service instances) requiring | |||
replication to different subsets of BFERs, then it will likely not be | replication to different subsets of BFERs, then it will likely not be | |||
possible to achieve the best replication efficiency for all of these | possible to achieve the best replication efficiency for all of these | |||
service instances via sub-domain 0. Ideal replication efficiency for | service instances via subdomain 0. Ideal replication efficiency for | |||
N BFER exists in a sub-domain if they are split over not more than | N BFERs exists in a subdomain if they are split over no more than | |||
ceiling(N/BitStringLength) SI. | ceiling(N/BitStringLength) SIs. | |||
If service instances justify additional BIER:SI state in the network, | If service instances justify additional BIER:SI state in the network, | |||
additional sub-domains will be used: BFIR/BFER are assigned BFR-id in | additional subdomains will be used: BFIRs/BFERs are assigned BFR-ids | |||
those sub-domains and each service instance is configured to use the | in those subdomains, and each service instance is configured to use | |||
most appropriate sub-domain. This results in improved replication | the most appropriate subdomain. This results in improved replication | |||
efficiency for different services. | efficiency for different services. | |||
Even if creation of sub-domains and assignment of BFR-id to BFIR/BFER | Even if creation of subdomains and assignment of BFR-ids to BFIRs/ | |||
in those sub-domains is automated, it is not expected that individual | BFERs in those subdomains is automated, it is not expected that | |||
service instances can deal with BFER in different sub-domains. A | individual service instances can deal with BFERs in different | |||
service instance may only support configuration of a single sub- | subdomains. A service instance may only support configuration of a | |||
domain it should rely on. | single subdomain it should rely on. | |||
To be able to easily reuse (and modify as little as possible) | To be able to easily reuse (and modify as little as possible) | |||
existing BIER procedures including flow-overlay and routing underlay, | existing BIER procedures (including flow overlay and routing | |||
when BIER-TE forwarding is added, we therefore reuse SI and sub- | underlay), when BIER-TE forwarding is added, we therefore reuse SIs | |||
domain logically in the same way as they are used in BIER: All | and subdomains logically in the same way as they are used in BIER: | |||
necessary BFIR/BFER for a service use a single BIER-TE BIFT and are | all necessary BFIRs/BFERs for a service use a single BIER-TE BIFT and | |||
split across as many SIs as necessary (see Section 5.3.2). Different | are split across as many SIs as necessary (see Section 5.3.2). | |||
services may use different sub-domains that primarily exist to | Different services may use different subdomains that primarily exist | |||
provide more efficient replication (and for BIER-TE desirable path | to provide more efficient replication (and, for BIER-TE, desirable | |||
steering) for different subsets of BFIR/BFER. | path steering) for different subsets of BFIRs/BFERs. | |||
5.3.2. Assigning bits for the BIER-TE topology | 5.3.2. Assigning Bits for the BIER-TE Topology | |||
In BIER, BitStrings only need to carry bits for BFERs, which leads to | In BIER, BitStrings only need to carry bits for BFERs; this leads to | |||
the model that BFR-ids map 1:1 to each bit in a BitString. | the model where BFR-ids map 1:1 to each bit in a BitString. | |||
In BIER-TE, BitStrings need to carry bits to indicate not only the | In BIER-TE, BitStrings need to carry bits to indicate not only the | |||
receiving BFER but also the intermediate hops/links across which the | receiving BFER but also the intermediate hops/links across which the | |||
packet must be sent. The maximum number of BFER that can be | packet must be sent. The maximum number of BFERs that can be | |||
supported in a single BitString or BIFT:SI depends on the number of | supported in a single BitString or BIFT:SI depends on the number of | |||
bits necessary to represent the desired topology between them. | bits necessary to represent the desired topology between them. | |||
"Desired" topology because it depends on the physical topology, and | "Desired" topology means that it depends on the physical topology and | |||
on the desire of the operator to allow for explicit path steering | the operator's desire to | |||
across every single hop (which requires more bits), or reducing the | ||||
number of required bits by exploiting optimizations such as unicast | 1. permit explicit path steering across every single hop (which | |||
(forward_routed()), ECMP() or flood (DNC) over "uninteresting" sub- | requires more bits), or | |||
parts of the topology - e.g. parts where different trees do not need | ||||
to take different paths due to path steering reasons. | 2. reduce the number of required bits by exploiting optimizations | |||
such as unicast (forward_routed()), ECMP(), or flood (DNC) over | ||||
"uninteresting" sub-parts of the topology, e.g., parts where, for | ||||
path steering reasons, different trees do not need to take | ||||
different paths. | ||||
The total number of bits to describe the topology vs. the number of | 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 | BFERs in a BIFT:SI can range widely based on the size of the topology | |||
and the amount of alternative paths in it. In a BIER-TE topology | and the amount of alternative paths in it. In a BIER-TE topology | |||
crafted by a BIER-TE expert, the higher the percentage of non-BFER | crafted by a BIER-TE expert, the higher the percentage of non-BFER | |||
bits, the higher the likelihood, that those topology bits are not | bits, the higher the likelihood that those topology bits are not just | |||
just BIER-TE overhead without additional benefit, but instead that | BIER-TE overhead without additional benefit but instead will allow | |||
they will allow to express desirable path steering alternatives. | the expression of desirable path steering alternatives. | |||
5.3.3. Assigning BFR-id with BIER-TE | 5.3.3. Assigning BFR-ids with BIER-TE | |||
BIER-TE forwarding does not use the BFR-id, nor does it require for | BIER-TE forwarding does not use BFR-ids, nor does it require that the | |||
the BFIR-id field of the BIER header to be set to a particular value. | 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, | However, other parts of a BIER-TE deployment may need a BFR-id -- | |||
specifically multicast flow overlay signaling and multicast flow | specifically, multicast flow overlay signaling and multicast flow | |||
overlay packet disposition, and in that case BFRs need to also have | overlay packet disposition; in that case, BFRs need to also have BFR- | |||
BFR-ids for BIER-TE SDs. | ids for BIER-TE SDs. | |||
For example, for BIER overlay signaling, BFIRs need to have a BFR-id, | 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 | because this BFIR BFR-id is carried in the BFIR-id field of the BIER | |||
header to indicate to the overlay signaling on the receiving BFER | header to indicate to the overlay signaling on the receiving BFER | |||
which BFIR originated the packet. | which BFIR originated the packet. | |||
In BIER, BFR-id = SI * BSL + BP, such that the SI and BP of a BFER | 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 | that every BFR with a BFR-id has a reserved BP in an SI, even if that | |||
is not necessary for BIER forwarding, because the BFR may never be a | is not necessary for BIER forwarding, because the BFR may never be a | |||
BFER but only a BFIR. | BFER (i.e., will only be a BFIR). | |||
In BIER-TE, for a non-leaf BFER, there is usually a single BP for | In BIER-TE, for a non-leaf BFER, there is usually a single BP for | |||
that BFER with a local_decap() adjacency on the BFER. The BFR-id for | that BFER with a local_decap() adjacency on the BFER. The BFR-id for | |||
such a BFER can therefore be determined using the same procedure as | such a BFER can therefore be determined using the same procedure as | |||
in (non-TE) BIER: BFR-id = SI * BSL + BP. | that used for (non-TE) BIER: BFR-id = SI * BSL + BP. | |||
As explained in Section 5.1.3, leaf BFERs do not need such a unique | As explained in Section 5.1.3, leaf BFERs do not need such a unique | |||
local_decap() adjacency. Likewise, BFIRs that are not also BFERs may | local_decap() adjacency. Likewise, BFIRs that are not also BFERs may | |||
not have a unique local_decap() adjacency either. For all those | not have a unique local_decap() adjacency either. For all those | |||
BFIRs and (leaf) BFERs, the controller needs to determine unique BFR- | BFIRs and (leaf) BFERs, the controller needs to determine unique BFR- | |||
ids that do not collide with the BFR-ids derived from the non-leaf | ids that do not collide with the BFR-ids derived from the non-leaf | |||
BFER local_decap() BPs. | BFER local_decap() BPs. | |||
While this document defines no requirements on how to allocate such | While this document defines no requirements on how to allocate such | |||
BFR-id, a simple option is to derive it from the (SI,BP) of an | BFR-ids, a simple option is to derive it from the (SI,BP) of an | |||
adjacency that is unique to the BFR in question. For a BFIR this can | adjacency that is unique to the BFR in question. For a BFIR, this | |||
be the first adjacency only populated on this BFIR, for a leaf-BFER, | can be the first adjacency that is only populated on this BFIR; for a | |||
this could be the first BP with an adjacency towards that BFER. | leaf BFER, this could be the first BP with an adjacency towards that | |||
BFER. | ||||
5.3.4. Mapping from BFR to BitStrings with BIER-TE | 5.3.4. Mapping from BFRs to BitStrings with BIER-TE | |||
In BIER, applications of the flow overlay on a BFIR can calculate the | 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 | (SI,BP) of a BFER from the BFR-id of the BFER and can therefore | |||
easily determine the BitStrings for a BIER packet to a set of BFERs | easily determine the BitStrings for a BIER packet to a set of BFERs | |||
with known BFR-ids. | with known BFR-ids. | |||
In BIER-TE this mapping needs to be equally supported for flow | In BIER-TE, this mapping needs to be equally supported for flow | |||
overlays. This section outlines two core options, based on what type | overlays. This section outlines two core options, based on what type | |||
of Tree Engineering the BIER-TE controller needs to performs for a | of Tree Engineering the BIER-TE controller needs to perform for a | |||
particular application. | particular application. | |||
"Independent branches": For a given flow overlay instance, the | "Independent branches": For a given flow overlay instance, the | |||
branches from a BFIR to every BFER are calculated by the BIER-TE | branches from a BFIR to every BFER are calculated by the BIER-TE | |||
controller to be independent of the branches to any other BFER. | controller to be independent of the branches to any other BFER. | |||
Shortest path trees are the most common examples of trees with | Shortest path trees are the most common examples of trees with | |||
independent branches. | independent branches. | |||
"Interdependent branches": When a BFER is added or deleted from a | "Interdependent branches": When a BFER is added to or deleted from a | |||
particular distribution tree, the BIER-TE controller has to | particular distribution tree, the BIER-TE controller has to | |||
recalculate the branches to other BFER, because they may need to | recalculate the branches to other BFERs, because they may need to | |||
change. Steiner trees are examples of interdependent branch trees. | change. Steiner trees are examples of interdependent branch | |||
trees. | ||||
If "independent branches" are used, the BIER-TE Controller can signal | If "independent branches" are used, the BIER-TE controller can signal | |||
to the BFIR flow overlay for every BFER an SI:BitString that | 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 | represents the branch to that BFER. The flow overlay on the BFIR can | |||
then independently of the controller calculate the SI:BitString for | then, independently of the controller, calculate the SI:BitString for | |||
all desired BFERs by OR'ing their BitStrings. This allows for flow | all desired BFERs by ORing their BitStrings. This allows flow | |||
overlay applications to operate independently of the controller | overlay applications to operate independently of the controller | |||
whenever it needs to determine which subset of BFERs need to receive | whenever they need to determine which subset of BFERs needs to | |||
a particular packet. | receive a particular packet. | |||
If "interdependent branches" are required, the application would need | If "interdependent branches" are required, an application would need | |||
to inquire the SI:BitString for a given set of BFER whenever the set | to query the SI:BitString for a given set of BFERs whenever the set | |||
changes. | changes. | |||
Note that in either case (unlike in BIER), the bits may need to | Note that in either case (unlike the scenario for BIER), the bits may | |||
change upon link/node failure/recovery, network expansion and network | need to change upon link/node failure/recovery, network expansion, or | |||
resource consumption by other traffic as part of traffic engineering | network resource consumption by other traffic as part of achieving | |||
goals (e.g.: re-optimization of lower priority traffic flows). | Traffic Engineering goals (e.g., reoptimization of lower-priority | |||
Interactions between such BFIR applications and the BIER-TE | traffic flows). Interactions between such BFIR applications and the | |||
Controller do therefore need to support dynamic updates to the | BIER-TE controller do therefore need to support dynamic updates to | |||
SI:BitStrings. | the SIs:BitStrings. | |||
Communications between the BFIR flow overlay and the BIER-TE | Communications between the BFIR flow overlay and the BIER-TE | |||
controller requires some way to identify the BFER. If BFR-ids are | controller require some way to identify the BFERs. If BFR-ids are | |||
used in the deployment, as outlined in Section 5.3.3, then those are | used in the deployment, as outlined in Section 5.3.3, then those are | |||
the natural BFR identifier. If BFR-ids are not used, then any other | the "natural" BFR-ids. If BFR-ids are not used, then any other | |||
unique identifier, such as the BFR-prefix of the BFR ([RFC8279]) | unique identifier, such as a BFR's BFR-prefix [RFC8279], could be | |||
could be used. | used. | |||
5.3.5. Assigning BFR-ids for BIER-TE | 5.3.5. Assigning BFR-ids for BIER-TE | |||
It is not currently determined if a single sub-domain could or should | It is not currently determined if a single subdomain could or should | |||
be allowed to forward both (non-TE) BIER and BIER-TE packets. If | be allowed to forward both (non-TE) BIER and BIER-TE packets. If | |||
this should be supported, there are two options: | this should be supported, there are two options: | |||
A. BIER and BIER-TE have different BFR-id in the same sub-domain. | A. BIER and BIER-TE have different BFR-ids in the same subdomain. | |||
This allows higher replication efficiency for BIER because their BFR- | This allows higher replication efficiency for BIER because the | |||
id can be assigned sequentially, while the BitStrings for BIER-TE | BIER BFR-ids can be assigned sequentially, while the BitStrings | |||
will have also the additional bits for the topology. There is no | for BIER-TE will also have to assign the additional bits for the | |||
relationship between a BFR BIER BFR-id and its BIER-TE BFR-id. | topology adjacencies. There is no relationship between a BFR | |||
BIER BFR-id and its BIER-TE BFR-id. | ||||
B. BIER and BIER-TE share the same BFR-id. The BFR-ids are assigned | B. BIER and BIER-TE share the same BFR-id. The BFR-ids are assigned | |||
as explained above for BIER-TE and simply reused for BIER. The | as explained above for BIER-TE and simply reused for BIER. The | |||
replication efficiency for BIER will be as low as that for BIER-TE in | replication efficiency for BIER will be as low as that for BIER- | |||
this approach. | TE in this approach. | |||
5.3.6. Example bit allocations | 5.3.6. Example Bit Allocations | |||
5.3.6.1. With BIER | 5.3.6.1. With BIER | |||
Consider a network setup with a BSL of 256 for a network topology as | Consider a network setup with a BSL of 256 for a network topology as | |||
shown in Figure 17. The network has 6 areas, each with 170 BFERs, | shown in Figure 17. The network has six areas, each with 170 BFERs, | |||
connecting via a core with 4 (core) BFRs. To address all BFERs with | connecting via a core with four (core) BFRs. To address all BFERs | |||
BIER, 4 SIs are required. To send a BIER packet to all BFER in the | with BIER, four SIs are required. To send a BIER packet to all BFERs | |||
network, 4 copies need to be sent by the BFIR. On the BFIR it does | in the network, four copies need to be sent by the BFIR. On the | |||
not make a difference how the BFR-ids are allocated to BFER in the | BFIR, it does not matter how the BFR-ids are allocated to BFERs in | |||
network, but for efficiency further down in the network it does make | the network, but it does matter for efficiency further down in the | |||
a difference. | network. | |||
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 | |||
Figure 17: Scaling BIER-TE bits by reuse | Figure 17: Scaling BIER-TE Bits by Reuse | |||
With random allocation of BFR-id to BFER, each receiving area would | With random allocation of BFR-ids to BFERs, each receiving area would | |||
(most likely) have to receive all 4 copies of the BIER packet because | (most likely) have to receive all four copies of the BIER packet | |||
there would be BFR-id for each of the 4 SIs in each of the areas. | because there would be BFR-ids for each of the four SIs in each of | |||
Only further towards each BFER would this duplication subside - when | the areas. Only further towards each BFER would this duplication | |||
each of the 4 trees runs out of branches. | subside -- when each of the four trees runs out of branches. | |||
If BFR-ids are allocated intelligently, then all the BFER in an area | If BFR-ids are allocated intelligently, then all the BFERs in an area | |||
would be given BFR-id with as few as possible different SIs. Each | 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. | area would only have to forward one or two packets instead of four. | |||
Given how networks can grow over time, replication efficiency in an | Given how networks can grow over time, replication efficiency in an | |||
area will then also go down over time when BFR-ids are only allocated | area will then also go down over time when BFR-ids are only allocated | |||
sequentially, network wide. An area that initially only has BFR-id | sequentially, network wide. An area that initially only has BFR-ids | |||
in one SI might end up with many SIs over a longer period of growth. | in one SI might end up with many SIs over a longer period of growth. | |||
Allocating SIs to areas with initially sufficiently many spare bits | Allocating SIs to areas that initially have sufficiently many spare | |||
for growths can help to alleviate this issue. Or renumber BFERs | bits for growth can help alleviate this issue. Alternatively, BFERs | |||
after network expansion. In this example one may consider to use 6 | can be renumbered after network expansion. In this example, one may | |||
SIs and assign one to each area. | consider using six SIs and assigning one to each area. | |||
This example shows that intelligent BFR-id allocation within at least | This example shows that intelligent BFR-id allocation within at least | |||
sub-domain 0 can even be helpful or even necessary in BIER. | subdomain 0 can be helpful or even necessary in BIER. | |||
5.3.6.2. With BIER-TE | 5.3.6.2. With BIER-TE | |||
In BIER-TE one needs to determine a subset of the physical topology | In BIER-TE, one needs to determine a subset of the physical topology | |||
and attached BFERs so that the "desired" representation of this | and attached BFERs so that the "desired" representation of this | |||
topology and the BFER fit into a single BitString. This process | topology and the BFERs fit into a single BitString. This process | |||
needs to be repeated until the whole topology is covered. | needs to be repeated until the whole topology is covered. | |||
Once bits/SIs are assigned to topology and BFERs, BFR-id is just a | Once bits/SIs are assigned to the topology and BFERs, BFR-ids are | |||
derived set of identifiers from the operator/BIER-TE Controller as | just a derived set of identifiers from the operator / BIER-TE | |||
explained above. | controller as explained above. | |||
Every time that different sub-topologies have overlap, bits need to | Whenever different subtopologies have overlap, bits need to be | |||
be repeated across the BitStrings, increasing the overall amount of | repeated across the BitStrings, increasing the overall amount of bits | |||
bits required across all BitString/SIs. In the worst case, one | required across all BitStrings/SIs. In the worst case, one assigns | |||
assigns random subsets of BFERs to different SIs. This will result | random subsets of BFERs to different SIs. This will result in an | |||
in an outcome much worse than in (non-TE) BIER: It maximizes the | outcome much worse than in (non-TE) BIER: it maximizes the amount of | |||
amount of unnecessary topology overlap across SI and therefore | unnecessary topology overlap across SIs and therefore reduces the | |||
reduces the number of BFER that can be reached across each individual | number of BFERs that can be reached across each individual SI. | |||
SI. Intelligent BFER to SI assignment and selecting specific | Intelligent BFER-to-SI assignment and selecting specific "desired" | |||
"desired" subtopologies can minimize this problem. | subtopologies can minimize this problem. | |||
To set up BIER-TE efficiently for the topology of Figure 17, the | To set up BIER-TE efficiently for the topology shown in Figure 17, | |||
following bit allocation method can be used. This method can easily | the following bit allocation method can be used. This method can | |||
be expanded to other, similarly structured larger topologies. | easily be expanded to other, similarly structured larger topologies. | |||
Each area is allocated one or more SIs depending on the number of | Each area is allocated one or more SIs, depending on the number of | |||
future expected BFERs and number of bits required for the topology in | future expected BFERs and the number of bits required for the | |||
the area. In this example, 6 SIs, one per area. | topology in the area. In this example, six SIs are used, one per | |||
area. | ||||
In addition, we use 4 bits in each SI: bia, bib, bea, beb: (b)it | In addition, we use four bits in each SI: | |||
(i)ngress (a), (b)it (i)ngress (b), (b)it (e)gress (a), (b)it | ||||
(e)gress (b). These bits will be used to pass BIER packets from any | ||||
BFIR via any combination of ingress area a/b BFR and egress area a/b | ||||
BFR into a specific target area. These bits are then set up with the | ||||
right forward_routed() adjacencies on the BFIR and area edge BFR: | ||||
On all BFIRs in an area j|j=1...6, bia in each BIFT:SI is populated | bia: (b)it (i)ngress (a) | |||
with the same forward_routed(BFRja), and bib with | ||||
forward_routed(BFRjb). On all area edge BFR, bea in | bib: (b)it (i)ngress (b) | |||
bea: (b)it (e)gress (a) | ||||
beb: (b)it (e)gress (b) | ||||
These bits will be used to pass BIER packets from any BFIR via any | ||||
combination of ingress area a/b BFRs and egress area a/b BFRs into a | ||||
specific target area. These bits are then set up with the right | ||||
forward_routed() adjacencies on the BFIRs and area edge BFRs as | ||||
follows. | ||||
On all BFIRs in an area, j|j=1...6, bia in each BIFT:SI is populated | ||||
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|k=1...6 is populated with forward_routed(BFRka) and beb in | |||
BIFT:SI=k with forward_routed(BFRkb). | BIFT:SI=k with forward_routed(BFRkb). | |||
For BIER-TE forwarding of a packet to a subset of BFERs across all | For BIER-TE forwarding of a packet to a subset of BFERs across all | |||
areas, a BFIR would create at most 6 copies, with SI=1...SI=6, In | areas, 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 | each packet, the BitString includes bits for one area and the BFERs | |||
topology plus the four bits to indicate whether to pass this packet | in that area, plus the four bits to indicate whether to pass this | |||
via the ingress area a or b border BFR and the egress area a or b | packet via the ingress area a or b border BFR and the egress area a | |||
border BFR, therefore allowing path steering for those two "unicast" | or b border BFR, therefore allowing path steering for those two | |||
legs: 1) BFIR to ingress area edge and 2) core to egress area edge. | "unicast" legs: 1) BFIR to ingress area edge and 2) core to egress | |||
Replication only happens inside the egress areas. For BFER in the | area edge. Replication only happens inside the egress areas. For | |||
same area as in the BFIR, these four bits are not used. | BFERs that are in the same area as the BFIR, these four bits are not | |||
used. | ||||
5.3.7. Summary | 5.3.7. Summary | |||
BIER-TE can, like BIER, support multiple SIs within a sub-domain. | BIER-TE can, like BIER, support multiple SIs within a subdomain. | |||
This allows to apply the mapping BFR-id = SI * BSL + BP. This allows | This allows application of the mapping BFR-id = SI * BSL + BP. This | |||
to re-use the BIER architecture concept of BFR-id and therefore | also permits the reuse of the BIER architecture concept of BFR-ids | |||
minimize BIER-TE specific functions in possible BIER layer control | and, therefore, minimization of BIER-TE-specific functions in | |||
plane mechanisms with BIER-TE, including flow overlay methods and | possible BIER layer control plane mechanisms with BIER-TE, including | |||
BIER header fields. | flow overlay methods and BIER header fields. | |||
The number of BFIR/BFER possible in a sub-domain is smaller than in | The number of BFIRs/BFERs possible in a subdomain is smaller than in | |||
BIER because BIER-TE uses additional bits for topology. | BIER because BIER-TE uses additional bits for the topology. | |||
Sub-domains (SDs) in BIER-TE can be used like in BIER to create more | Subdomains in BIER-TE can be used as they are in BIER to create more | |||
efficient replication to known subsets of BFERs. | efficient replication to known subsets of BFERs. | |||
Assigning bits for BFERs intelligently into the right SI is more | Assigning bits for BFERs intelligently into the right SI is more | |||
important in BIER-TE than in BIER because of replication efficiency | important in BIER-TE than in BIER because of replication efficiency | |||
and overall amount of bits required. | and the overall amount of bits required. | |||
6. Security Considerations | 6. Security Considerations | |||
If [RFC8296] is used, BIER-TE shares its security considerations. | If "Encapsulation for Bit Index Explicit Replication (BIER) in MPLS | |||
and Non-MPLS Networks" [RFC8296] is used, its security considerations | ||||
also apply to BIER-TE. | ||||
BIER-TE shares the security considerations of BIER, [RFC8279], with | The security considerations of "Multicast Using Bit Index Explicit | |||
the following overriding or additional considerations. | Replication (BIER)" [RFC8279] also apply to BIER-TE, with the | |||
following overriding or additional considerations. | ||||
BIER-TE forwarding explicitly supports unicast "tunneling" of BIER | BIER-TE forwarding explicitly supports unicast "tunneling" of BIER | |||
packets via forward_routed() adjacencies. The BIER domain security | packets via forward_routed() adjacencies. The BIER domain security | |||
model is based on a subset of interfaces on a BFR that connect to | model is based on a subset of interfaces on a BFR that connect to | |||
other BFRs of the same BIER domain. For BIER-TE, this security model | other BFRs of the same BIER domain. For BIER-TE, this security model | |||
equally applies to such unicast "tunneled" BIER packets. This does | equally applies to such unicast "tunneled" BIER packets. This not | |||
not only include the need to filter received unicast "tunneled" BIER | only includes the need to filter received unicast "tunneled" BIER | |||
packets to prohibit injection of such "tunneled" BIER packets from | packets to prohibit the injection of such "tunneled" BIER packets | |||
outside the BIER domain, but also prohibiting forward_routed() | from outside the BIER domain but also the need to prohibit | |||
adjacencies to leak BIER packets from the BIER domain. It SHOULD be | forward_routed() adjacencies from leaking BIER packets from the BIER | |||
possible to configure interfaces to be part of a BIER domain solely | domain. It SHOULD be possible to configure interfaces to be part of | |||
for sending and receiving of unicast "tunneled" BIER packets even if | a BIER domain solely for sending and receiving unicast "tunneled" | |||
the interface can not send/receive BIER encapsulated packets. | BIER packets even if the interface cannot send/receive BIER | |||
encapsulated packets. | ||||
In BIER, the standardized methods for the routing underlays are IGPs | In BIER, the standardized methods for the routing underlays are IGPs | |||
with extensions to distribute BFR-ids and BFR-prefixes. [RFC8401] | with extensions to distribute BFR-ids and BFR-prefixes. [RFC8401] | |||
specifies the extensions for IS-IS and [RFC8444] specifies the | specifies the extensions for IS-IS, and [RFC8444] specifies the | |||
extensions for OSPF. Attacking the protocols for the BIER routing | extensions for OSPF. Attacking the protocols for the BIER routing | |||
underlay or (non-TE) BIER layer control plane, or impairment of any | underlay or (non-TE) BIER layer control plane, or the impairment of | |||
BFR in a domain may lead to successful attacks against the results of | any BFRs in a domain, may lead to successful attacks against the | |||
the routing protocol, enabling DoS attacks against paths or the | information that BIER-TE learns from the routing protocol (routes, | |||
addressing (BFR-id, BFR-prefixes) used by BIER. | next hops, BFR-ids, ...), enabling DoS attacks against paths or the | |||
addressing (BFR-ids, BFR-prefixes) used by BIER. | ||||
The reference model for the BIER-TE layer control plane is a BIER-TE | The reference model for the BIER-TE layer control plane is a BIER-TE | |||
controller. When such a controller is used, impairment of an | controller. When such a controller is used, the impairment of an | |||
individual BFR in a domain causes no impairment of the BIER-TE | individual BFR in a domain causes no impairment of the BIER-TE | |||
control plane on other BFRs. If a routing protocol is used to | control plane on other BFRs. If a routing protocol is used to | |||
support forward_routed() adjacencies, then this is still an attack | support forward_routed() adjacencies, then this is still an attack | |||
vector as in BIER, but only for BIER-TE forward_routed() adjacencies, | vector as in BIER, but only for BIER-TE forward_routed() adjacencies | |||
and not other adjacencies. | and not other adjacencies. | |||
Whereas IGP routing protocols are most often not well secured through | Whereas IGP routing protocols are most often not well secured through | |||
cryptographic authentication and confidentiality, communications | cryptographic authentication and confidentiality, communications | |||
between controllers and routers such as those to be considered for | between controllers and routers such as those to be considered for | |||
the BIER-TE controller/control-plane can be and are much more | the BIER-TE controller / control plane can be, and are, much more | |||
commonly secured with those security properties, for example by using | commonly secured with those security properties -- for example, by | |||
Secure SHell (SSH), [RFC4253] for NETCONF ([RFC6242]), or via | using "Secure Shell" (SSH) [RFC4253] for NETCONF [RFC6242]; or via | |||
Transport Layer Security (TLS), such as [RFC8253] for PCEP, | "Transport Layer Security" (TLS), such as [RFC8253] for PCEP | |||
[RFC5440], or [RFC7589] for NETCONF. BIER-TE controllers SHOULD use | [RFC5440] or [RFC7589] for NETCONF. BIER-TE controllers SHOULD use | |||
security equal to or better than these mechanisms. | security equal to or better than these mechanisms. | |||
When any of these security mechanisms/protocols are used for | When any of these security mechanisms/protocols are used for | |||
communications between a BIER-TE controller and BFRs, their security | communications between a BIER-TE controller and BFRs, their security | |||
considerations apply to BIER-TE. In addition, the security | considerations apply to BIER-TE. In addition, the security | |||
considerations of PCE, [RFC4655] apply. | considerations of "A Path Computation Element (PCE)-Based | |||
Architecture" [RFC4655] apply. | ||||
The most important attack vector in BIER-TE is misconfiguration, | The most important attack vector in BIER-TE is misconfiguration, | |||
either on the BFR themselves or via the BIER-TE controller. | either on the BFRs themselves or via the BIER-TE controller. | |||
Forwarding entries with DNC could be set up to create persistent | Forwarding entries with DNC could be set up to create persistent | |||
loops, in which packets only expire because of TTL. To minimize the | loops, in which packets only expire because of TTL. To minimize the | |||
impact of such attacks (or more likely unintentional misconfiguration | impact of such attacks (or, more likely, unintentional | |||
by operators and/or bad BIER-TE controller software), the BIER-TE | misconfiguration by operators and/or bad BIER-TE controller | |||
forwarding rules are defined to be as strict in clearing bits as | software), the BIER-TE forwarding rules are defined to be as strict | |||
possible. The clearing of all bits with an adjacency on a BFR | in clearing bits as possible. The clearing of all bits with an | |||
prohibits that a looping packet creates additional packet | adjacency on a BFR prohibits a looping packet from creating | |||
amplification through the misconfigured loop on the packet's second | additional packet amplification through the misconfigured loop on the | |||
or further times around the loop, because all relevant adjacency bits | packet's second time or subsequent times around the loop, because all | |||
would have been cleared on the first round through the loop. In | relevant adjacency bits would have been cleared on the first round | |||
result, BIER-TE has the same degree of looping packets as possible | through the loop. As a result, looping packets can occur in BIER-TE | |||
with unintentional or malicious loops in the routing underlay with | to the same degree as is possible with unintentional or malicious | |||
BIER or even with unicast traffic. | loops in the routing underlay with BIER, or even with unicast | |||
traffic. | ||||
Deployments where BIER-TE would likely be beneficial may include | Deployments where BIER-TE would likely be beneficial may include | |||
operational models where actual configuration changes from the | operational models where actual configuration changes from the | |||
controller are only required during non-production phases of the | controller are only required during non-production phases of the | |||
network's life-cycle, such as in embedded networks or in | network's life cycle, e.g., in embedded networks or in manufacturing | |||
manufacturing networks during e.g. plant reworking/repairs. In these | networks during such activities as plant reworking or repairs. In | |||
type of deployments, configuration changes could be locked out when | these types of deployments, configuration changes could be locked out | |||
the network is in production state and could only be (re-)enabled | when the network is in production state and could only be | |||
through reverting the network/installation into non-production state. | (re-)enabled through reverting the network/installation to non- | |||
Such security designs would not only allow to provide additional | production state. Such security designs would not only allow a | |||
layers of protection against configuration attacks, but would | deployment to provide additional layers of protection against | |||
foremost protect the active production process from such | configuration attacks but would, first and foremost, protect the | |||
configuration attacks. | active production process from such configuration attacks. | |||
7. IANA Considerations | 7. IANA Considerations | |||
This document requests no action by IANA. | This document has no IANA actions. | |||
8. Acknowledgements | ||||
The authors would like to thank Greg Shepherd, Ijsbrand Wijnands, | ||||
Neale Ranns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, | ||||
Carsten Borman and Wolfgang Braun for their reviews and suggestions. | ||||
Special thanks to Xuesong Geng for shepherding the document and for | ||||
IESG review/suggestions by Alvaro Retana (responsible AD/RTG), | ||||
Benjamin Kaduk (SEC), Tommy Pauly (TSV), Zaheduzzaman Sarker (TSV), | ||||
Eric Vyncke (INT), Martin Vigoureux (RTG), Robert Wilton (OPS), Eric | ||||
Kline (INT), Lars Eggert (GEN), Roman Danyliv (SEC), Ines Robles | ||||
(RTGDIR), Robert Sparks (Gen-ART), Yingzhen Qu (RTGdir), Martin Duke | ||||
(TSV). | ||||
9. Change log [RFC Editor: Please remove] | ||||
draft-ietf-bier-te-arch: | ||||
13: | ||||
Changed Gregs author association/email. | ||||
Fixed Nits in -12 from Ben Kaduk. | ||||
Fixed Alvaro's concerns: (1) Removed references to SR in Abstract/ | ||||
Overview (2) removed section 4.5. | ||||
12: | ||||
AD review Alvaro Retana. | ||||
Various textual/editorial nits including adding () to all | ||||
instances of forwarding adjacency name instances. | ||||
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. | ||||
3.2 added xref's to relevant sections to the listed control plane | ||||
points. | ||||
4.1 rewrote paragraphs of 4.1 leading up to Figure 4. to eliminate | ||||
any confusion in how the BIFT work and how it compares to the | ||||
notions in rfc8279, as well as better linking it to the | ||||
Pseudocode. | ||||
Moved SR section into appendix. | ||||
TSV review Martin Duke. | ||||
Text/editorial nits. | ||||
4.4 improved text describing handling of F-BM. | ||||
RTGdir review Yingzhen Qu. | ||||
Various text/editorial nits. | ||||
Added notion that BitStrings represent loop free tree for packet | ||||
to abstract and intro. | ||||
Various text nit and editorial improvements. | ||||
Fixed some BFR-id field -> BFIR-id field mistakes. | ||||
Capitalized NETCONF/RESTCONF/YANG, added RFC references. | ||||
Improved Figure 16 with explicitly two links into BFR3 and | ||||
explanatory text. | ||||
Gen-ART review Robert Sparks. | ||||
Various textual nits, editorial improvements. | ||||
3.2 Introduced terms "BIER-TE topology control" and "BIER-TE tree | ||||
control" for the two functional components of the control plane. | ||||
3.2.1 - 3.2 change introduces the open RFC-editor issue of | ||||
appropriate xrfs (to be resolved by RFC-editor). | ||||
3.3 Rewrote last paragraph to better describe loop prevention | ||||
through clearing of bits in BitString. | ||||
4.1 Fixed up text/formula describing mapping between bfr-id, SI:BP | ||||
and SI,BSL and BP. Fix offset bug. | ||||
5.3.6.2 Improved description paragraph explaining overlap of | ||||
topology for different SI. | ||||
5.3.7 Improved first summary paragraph. | ||||
7. Rephrased applicability statement of control plane protocol | ||||
security considerations to BIER-TE security. | ||||
RTGDIR review Ines Robles. | ||||
Fixed up adjacencies in Example 2 and explanation text to be | ||||
explicit about which BFR not only passes, but also receives the | ||||
packet. | ||||
7. (security considerations). Added paragraph about | ||||
forward_routed() and prohibiting BIER packet leaking in/out of | ||||
domain. | ||||
IESG review Roman Danyliv (SEC). | ||||
Several textual/sentence nits/editorials. | ||||
IESG review Lars Eggert (GEN). | ||||
Various good editorial word fixed. | ||||
Pointer to non-false-positive bloom filter work that looks like it | ||||
happened after our IETF discussions documented in this doc, so | ||||
will not add it to doc, but here is URL for folks interested: | ||||
https://ieeexplore.ieee.org/document/8486415. | ||||
Did not change "native" to a different word for inclusivity | ||||
because of my worry there is no estavblished single replacement | ||||
word, making reading/searching/understanding more difficult. | ||||
IESG review Martin Vigeureux (RTG). | ||||
Added back reference to RFC8402. Textual fixes. | ||||
IESG review Eric Kline (INT). | ||||
2.1 Fixed typo in BFR* explanations. | ||||
4.3 Added explanatio about MTU handling. | ||||
IESG review Eric Vyncke (INT). | ||||
Fixed up initial text to introduce various abbreviations. | ||||
2.4 refined wording to "with the _intent_ to easily build common | ||||
forwarding planes...". | ||||
4.2.3 refined text about entropy in ECMP - now taken text from | ||||
rfc8279. | ||||
IESG review Zaheduzzaman Sarker (TSV). | ||||
5.1.7 Refined text explaining documentation of ECMP algorithm. | ||||
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. | ||||
IESG review Ben Kaduk (round 2): | ||||
4.4 Advanced pseudocode still had one wrong "~". Root cause seems | ||||
to have been day 0 problem in pseudocode written for -01, "~" was | ||||
inserted in the wrong one of two code lines. Also enhanced | ||||
textual description and comments in pseudocode, changed variable | ||||
name AdjacentBits to PktAdjacentBits to avoid confusion with | ||||
AdjacentBits[SI]. | ||||
5.1.3 Rewrote last two paragraphs explaining the sharing of bit | ||||
positions for lead-BFER hopefully better. Also detailled how it | ||||
interacts with other optimizations and the type of payload BIER-TE | ||||
packets may carry. | ||||
4.4 (from Carsten Borman) changed spacing in pseudocode to be | ||||
consistent. Fixed {VRF}, clarified pseudocode object syntax, | ||||
typos. | ||||
11: IESG review Ben Kaduk, summary: | ||||
One discuss for bug in pseudocode. turned out to be one cahrcter | ||||
typo. | ||||
Added (non-TE) prefix in places where BIER by itsels had to be | ||||
better disambiguated. | ||||
enhanced text for hub-and-spoke to indicate we're only talking | ||||
about hub to spoke traffic. | ||||
long list ot language fixes/improvement (nits). Thanks a lot!. | ||||
add suggestion to SHOULD use known confidentiality protocols | ||||
between controller and BFR. | ||||
10: AD review Alvaro Retana, summary: | ||||
Note: rfcdiff shows more changes than actually exist because text | ||||
moved around. | ||||
Summary: | ||||
1. restructuring: merged all controller sections under common | ||||
controller ops main section, moved unfitting stuff out to | ||||
other parts of doc. Split Intro section into Overview and | ||||
Intro. Shortened Abstract, moved text into Overview, added | ||||
sections overview. | ||||
2. enhanced/rewrote: 2.3 Comparison with -> Relationship to BIER- | ||||
TE | ||||
3. enhanced/rewrote: 3.2 BIER-TE controller -> BIER-TE control | ||||
plane, 3.2.1 BIER-TE controller, for consistency with rfc8279 | ||||
4. additional subsections for Alvaros asks | ||||
5. added to: 3.3 BIER-TE forwarding plane (consistency with | ||||
rfc8279) | ||||
6. Enhanced description of 4.3/encap considerations to better | ||||
explain how BIER/BIER-TE can run together. | ||||
Notation: Markers (a),(b),... at end of points are references from | ||||
the review discussion with Alvaro to the changes made. | ||||
Details:. | ||||
Throughout text: changed term spelling to rfc8279 - bit positions, | ||||
sub-domain, ... (i). | ||||
Reset changed to clear, also DNR changed to DNC (Do Not Clear) | ||||
(q). | ||||
Abstract: Shortened. Removed name explanation note (Tree | ||||
Engineering), (a). | ||||
1. Introduction -> Overview: Moved important explanation | ||||
paragraph from abstract to Introduction. Fixed text, (a). | ||||
Added bullet point list explanation of structure of document (e). | ||||
Renamed to Overview because that is now more factually correct. | ||||
1.1. Fixed bug in example adding bit p15.(l). | ||||
2. (New - Introduction): Moved section 1.1 - 1.3 (examples, | ||||
comparison with BIER-TE) from Introduction into new "Overview" | ||||
section. Primarily so that "requirements language" section (at | ||||
end of Introduction) is not in middle of document after all the | ||||
Introduction. | ||||
2.1 Removed discussion of encap, moved to 4.2.2 (m). | ||||
2.2 enhanced paragraph suggesting native/overlay topology types, | ||||
also sugest type hybrid (n). | ||||
2.3 Overhauled comparison text BIER/BIER-TE, structured into | ||||
common, different, not-required-by-te, integration-bier-bier-te. | ||||
Changed title to "Relationship" to allow including last point. | ||||
(f). | ||||
2.4 moved Hardware forwarding comparison section into section 2 to | ||||
allow coalescing of sections into section 5 about the controller | ||||
operations (hardware forwarding was in the middle of it, wrong | ||||
place). Shortened/improved third paragraph by pointing to BIFT as | ||||
deciding element for selection between BIER/BIER-TE. Removed | ||||
notion of experimentation (this now targets standard) (g). | ||||
3. (Components): Aligned component name and descriptions better | ||||
with RFC8279. Now describe exactly same three layers. BIER layer | ||||
constituted from BIER-TE control plane and BIER-TE forwarding | ||||
plane. BIER-TE controller is now simply component of BIER-TE | ||||
control plane. (b). | ||||
3.1. shortened/improved paragraph explaining use of SI:BP instead | ||||
of also bfr-id as index into BIFT, rewrote paragraph talking about | ||||
reuse of BPs(o). | ||||
3.2. rewrote explanation of BIER-TE control plane in the style of | ||||
RFC8729 Section 4.2 (BIER layer) with numbered points. Note that | ||||
RFC8729 mixes control and forwarding plane bullet points (this doc | ||||
does not). Merged text from old sections 2.2.1 and 2.2.3 into | ||||
list. (b). | ||||
3.2.1. Expanded/improved explanation of BIER-TE Controller (b). | ||||
3.2.1.1. Added subsection for topology discovery and creation | ||||
(d). | ||||
3.2.1.2. Added subsection for engineered BitStrings as key novel | ||||
aspect not found in BIER. (X). | ||||
3.3. Added numbered list for components of BIER-TE forwarding | ||||
plane (completing the comparable text from RFC8729 Section 4.2). | ||||
3.4 Alvaro does not mind additional example, fixed bugs. | ||||
3.5 Removed notion about using IGP BIER extensions for BIER-TE, | ||||
such as BIFT address ranges. After -10 making use of BIFT | ||||
clearer, it now looks to authors as if use of IGP extensions would | ||||
not be beneficial, as long as we do need to use the BIER-TE | ||||
controller, e.g. unlike in BIER, a BFR could not learn from the | ||||
IGP information what traffic to send towards a particular BIFT-ID, | ||||
but instead that is the core of what the controller needs to | ||||
provide. | ||||
4.2.2 Improved text to explain requirement to identify BIER-TE in | ||||
the tunnel encap and compress description of use-cases (m). | ||||
4.2.3 enhanced ECMP text (p). | ||||
4.3. rewrote most of Encapsulation Considerations to better | ||||
explain to Alvaros question re sharing or not sharing SD via BIER/ | ||||
BIER-TE. Added reference to I-D.ietf-bier-non-mpls-bift-encoding | ||||
as a very helpful example. (f). | ||||
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). | ||||
4.4. Moved BIER-TE Forwarding Pseudocode here to coalesce text | ||||
logically. Changed text to better compare with BIER pseudo | ||||
forwarding code. Numerical list of how F-BM works for BIER-TE. | ||||
Removed efficiency comparison with BIER (too difficult to provide | ||||
sufficient justification, derails from focus of section) (j). | ||||
4.6. (Requirements) Restructured: Removed notion of "basic" BIER- | ||||
TE forwarding, simply referring to it now as "mandatory" BIER-TE | ||||
forwarding. Cleaned up text to have requirements for different | ||||
adjacencies in different paragraphs. (c). | ||||
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). | ||||
5.1.9 Added new separate picture instead of referring to a picture | ||||
later in text, adjusted text (r). | ||||
5.3.2 Changed title to not include word "comparison" to avoid this | ||||
being accounted against Alvaros concern about scattering | ||||
comparison (IMHO text already has little comparison, so title was | ||||
misleading) (h). | ||||
co-authors internal review: | ||||
4.4 Added xref to Figure 5. | ||||
5.2.1 Duplicated ring picture, added visuals for described | ||||
miswiring (s). | ||||
5.2.2 replace "topology" with graph (wrong word). | ||||
5.3.3 rewrote explanation of how to map BFR-id to SI:BP and assign | ||||
them, clarified BFR-id is option. Retitled to better explain | ||||
scope of section. | ||||
5.3.4 Removed considerations in 5.3.4 for sharing BFR-id across | ||||
BIER/BIER-TE (t), changed title to explain how BFIR/BIER-TE | ||||
controller interactions need some form of identifying BFR but this | ||||
does not have to be BFR-id. | ||||
7. Added new security considerations (u). | ||||
09: Incorporated fixes for feedback from Shepherd (Xuesong Geng). | ||||
Added references for Bloom Filters and Rate Controlled Service | ||||
Disciplines. | ||||
1.1 Fixed numbering of example 1 topology explanation. Improved | ||||
language on second example (less abbreviating to avoid confusion | ||||
about meaning). | ||||
1.2 Improved explanation of BIER-TE topology, fixed terminology of | ||||
graphs (BIER-TE topology is a directed graph where the edges are | ||||
the adjacencies). | ||||
2.4 Fixed and amended routing underlay explanations: detailed why | ||||
no need for BFER routing underlay routing protocol extensions, but | ||||
potential to re-use BIER routing underlay routing protocol | ||||
extensions for non-BFER related extensions. | ||||
3.1 Added explanation for VRF and its use in adjacencies. | ||||
08: Incorporated (with hopefully acceptable fixes) for Lou | ||||
suggested section 2.5, TE considerations. | ||||
Fixes are primarily to the point to a) emphasize that BIER-TE does | ||||
not depend on the routing underlay unless forward_routed() | ||||
adjacencies are used, and b) that the allocation and tracking of | ||||
resources does not explicitly have to be tied to BPs, because they | ||||
are just steering labels. Instead, it would ideally come from | ||||
per-hop resource management that can be maintained only via local | ||||
accounting in the controller. | ||||
07: Further reworking text for Lou. | ||||
Renamed BIER-PE to BIER-TE standing for "Tree Engineering" after | ||||
votes from BIER WG. | ||||
Removed section 1.1 (introduced by version 06) because not | ||||
considered necessary in this doc by Lou (for framework doc). | ||||
Added [RFC editor pls. remove] Section to explain name change to | ||||
future reviewers. | ||||
06: Concern by Lou Berger re. BIER-TE as full traffic engineering | ||||
solution. | ||||
Changed title "Traffic Engineering" to "Path Engineering" | ||||
Added intro section of relationship BIER-PE to traffic | ||||
engineering. | ||||
Changed "traffic engineering" term in text" to "path engineering", | ||||
where appropriate | ||||
Other: | ||||
Shortened "BIER-TE Controller Host" to "BIER-TE Controller". | ||||
Fixed up all instances of controller to do this. | ||||
05: Review Jeffrey Zhang. | ||||
Part 2: | ||||
4.3 added note about leaf-BFER being also a propery of routing | ||||
setup. | ||||
4.7 Added missing details from example to avoid confusion with | ||||
routed adjacencies, also compressed explanatory text and better | ||||
justification why seed is explicitly configured by controller. | ||||
4.9 added section discussing generic reuse of BP methods. | ||||
4.10 added section summarizing BP optimizations of section 4. | ||||
6. Rewrote/compressed explanation of comparison BIER/BIER-TE | ||||
forwarding difference. Explained benefit of BIER-TE per-BP | ||||
forwarding being independent of forwarding for other BPs. | ||||
Part 1: | ||||
Explicitly ue forwarded_connected adjcency in ECMP adjcency | ||||
examples to avoid confusion. | ||||
4.3 Add picture as example for leav vs. non-leaf BFR in topology. | ||||
Improved description. | ||||
4.5 Exampe for traffic that can be broadcast -> for single BP in | ||||
hub&spoke. | ||||
4.8.1 Simplified example picture for routed adjacency, explanatory | ||||
text. | ||||
Review from Dirk Trossen: | ||||
Fixed up explanation of ICC paper vs. bloom filter. | ||||
04: spell check run. | ||||
Addded remaining fixes for Sandys (Zhang Zheng) review: | ||||
4.7 Enhance ECMP explanations: | ||||
example ECMP algorithm, highlight that doc does not standardize | ||||
ECMP algorithm. | ||||
Review from Dirk Trossen: | ||||
1. Added mentioning of prior work for traffic engineered paths | ||||
with bloom filters. | ||||
2. Changed title from layers to components and added "BIER-TE | ||||
control plane" to "BIER-TE Controller" to make it clearer, what it | ||||
does. | ||||
2.2.3. Added reference to I-D.ietf-bier-multicast-http-response | ||||
as an example solution. | ||||
2.3. clarified sentence about resetting BPs before sending copies | ||||
(also forgot to mention DNR here). | ||||
3.4. Added text saying this section will be removed unless IESG | ||||
review finds enough redeeming value in this example given how -03 | ||||
introduced section 1.1 with basic examples. | ||||
7.2. Removed explicit numbers 20%/80% for number of topology bits | ||||
in BIER-TE, replaced with more vague (high/low) description, | ||||
because we do not have good reference material Added text saying | ||||
this section will be removed unless IESG review finds enough | ||||
redeeming value in this example given how -03 introduced section | ||||
1.1 with basic examples. | ||||
many typos fixed. Thanks a lot. | ||||
03: Last call textual changes by authors to improve readability: | ||||
removed Wolfgang Braun as co-authors (as requested). | ||||
Improved abstract to be more explanatory. Removed mentioning of | ||||
FRR (not concluded on so far). | ||||
Added new text into Introduction section because the text was too | ||||
difficult to jump into (too many forward pointers). This | ||||
primarily consists of examples and the early introduction of the | ||||
BIER-TE Topology concept enabled by these examples. | ||||
Amended comparison to SR. | ||||
Changed syntax from [VRF] to {VRF} to indicate its optional and to | ||||
make idnits happy. | ||||
Split references into normative / informative, added references. | ||||
02: Refresh after IETF104 discussion: changed intended status back | ||||
to standard. Reasoning: | ||||
Tighter review of standards document == ensures arch will be | ||||
better prepared for possible adoption by other WGs (e.g. DetNet) | ||||
or std. bodies. | ||||
Requirement against the degree of existing implementations is self | ||||
defined by the WG. BIER WG seems to think it is not necessary to | ||||
apply multiple interoperating implementations against an | ||||
architecture level document at this time to make it qualify to go | ||||
to standards track. Also, the levels of support introduced in -01 | ||||
rev. should allow all BIER forwarding engines to also be able to | ||||
support the base level BIER-TE forwarding. | ||||
01: Added note comparing BIER and SR to also hopefully clarify | ||||
BIER-TE vs. BIER comparison re. SR. | ||||
- added requirements section mandating only most basic BIER-TE | ||||
forwarding features as MUST. | ||||
- reworked comparison with BIER forwarding section to only | ||||
summarize and point to pseudocode section. | ||||
- reworked pseudocode section to have one pseudocode that mirrors | ||||
the BIER forwarding pseudocode to make comparison easier and a | ||||
second pseudocode that shows the complete set of BIER-TE | ||||
forwarding options and simplification/optimization possible vs. | ||||
BIER forwarding. Removed MyBitsOfInterest (was pure | ||||
optimization). | ||||
- Added captions to pictures. | ||||
- Part of review feedback from Sandy (Zhang Zheng) integrated. | ||||
00: Changed target state to experimental (WG conclusion), updated | ||||
references, mod auth association. | ||||
- Source now on https://www.github.com/toerless/bier-te-arch | ||||
- Please open issues on the github for change/improvement requests | ||||
to the document - in addition to posting them on the list | ||||
(bier@ietf.). Thanks!. | ||||
draft-eckert-bier-te-arch: | ||||
06: Added overview of forwarding differences between BIER, BIER- | ||||
TE. | ||||
05: Author affiliation change only. | ||||
04: Added comparison to Live-Live and BFIR to FRR section | ||||
(Eckert). | ||||
04: Removed FRR content into the new FRR draft [I-D.eckert-bier- | ||||
te-frr] (Braun). | ||||
- Linked FRR information to new draft in Overview/Introduction | ||||
- Removed BTAFT/FRR from "Changes in the network topology" | ||||
- Linked new draft in "Link/Node Failures and Recovery" | ||||
- Removed FRR from "The BIER-TE Forwarding Layer" | ||||
- Moved FRR section to new draft | ||||
- Moved FRR parts of Pseudocode into new draft | ||||
- Left only non FRR parts | ||||
- removed FrrUpDown(..) and //FRR operations in | ||||
ForwardBierTePacket(..) | ||||
- New draft contains FrrUpDown(..) and ForwardBierTePacket(Packet) | ||||
from bier-arch-03 | ||||
- Moved "BIER-TE and existing FRR to new draft | ||||
- Moved "BIER-TE and Segment Routing" section one level up | ||||
- Thus, removed "Further considerations" that only contained this | ||||
section | ||||
- Added Changes for version 04 | ||||
03: Updated the FRR section. Added examples for FRR key concepts. | ||||
Added BIER-in-BIER tunneling as option for tunnels in backup | ||||
paths. BIFT structure is expanded and contains an additional | ||||
match field to support full node protection with BIER-TE FRR. | ||||
03: Updated FRR section. Explanation how BIER-in-BIER | ||||
encapsulation provides P2MP protection for node failures even | ||||
though the routing underlay does not provide P2MP. | ||||
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, and every SI and sub-domain would be a | ||||
separate BIFT. In BIER, each BIFT covers all SI. This is now | ||||
also how we define it in BIER-TE. | ||||
02: Added Section 5.3 to explain the use of SI, sub-domains and | ||||
BFR-id in BIER-TE and to give an example how to efficiently assign | ||||
bits for a large topology requiring multiple SI. | ||||
02: Added further detailed for rings - how to support input from | ||||
all ring nodes. | ||||
01: Fixed BFIR -> BFER for section 4.3. | ||||
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. | ||||
00: Initial version. | ||||
10. References | 8. References | |||
10.1. Normative References | 8.1. Normative References | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
skipping to change at page 61, line 36 ¶ | skipping to change at line 2181 ¶ | |||
Explicit Replication (BIER)", RFC 8279, | Explicit Replication (BIER)", RFC 8279, | |||
DOI 10.17487/RFC8279, November 2017, | DOI 10.17487/RFC8279, November 2017, | |||
<https://www.rfc-editor.org/info/rfc8279>. | <https://www.rfc-editor.org/info/rfc8279>. | |||
[RFC8296] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., | [RFC8296] Wijnands, IJ., Ed., Rosen, E., Ed., Dolganow, A., | |||
Tantsura, J., Aldrin, S., and I. Meilik, "Encapsulation | Tantsura, J., Aldrin, S., and I. Meilik, "Encapsulation | |||
for Bit Index Explicit Replication (BIER) in MPLS and Non- | for Bit Index Explicit Replication (BIER) in MPLS and Non- | |||
MPLS Networks", RFC 8296, DOI 10.17487/RFC8296, January | MPLS Networks", RFC 8296, DOI 10.17487/RFC8296, January | |||
2018, <https://www.rfc-editor.org/info/rfc8296>. | 2018, <https://www.rfc-editor.org/info/rfc8296>. | |||
10.2. Informative References | 8.2. Informative References | |||
[Bloom70] Bloom, B. H., "Space/time trade-offs in hash coding with | ||||
allowable errors", Comm. ACM 13(7):422-6, July 1970, | ||||
<https://dl.acm.org/doi/10.1145/362686.362692>. | ||||
[I-D.eckert-bier-te-frr] | ||||
Eckert, T., Cauchie, G., Braun, W., and M. Menth, | ||||
"Protection Methods for BIER-TE", Work in Progress, | ||||
Internet-Draft, draft-eckert-bier-te-frr-03, 5 March 2018, | ||||
<https://www.ietf.org/archive/id/draft-eckert-bier-te-frr- | ||||
03.txt>. | ||||
[I-D.ietf-bier-multicast-http-response] | [BIER-MCAST-OVERLAY] | |||
Trossen, D., Rahman, A., Wang, C., and T. Eckert, | Trossen, D., Rahman, A., Wang, C., and T. Eckert, | |||
"Applicability of BIER Multicast Overlay for Adaptive | "Applicability of BIER Multicast Overlay for Adaptive | |||
Streaming Services", Work in Progress, Internet-Draft, | Streaming Services", Work in Progress, Internet-Draft, | |||
draft-ietf-bier-multicast-http-response-06, 10 July 2021, | draft-ietf-bier-multicast-http-response-06, 10 July 2021, | |||
<https://www.ietf.org/archive/id/draft-ietf-bier- | <https://datatracker.ietf.org/doc/html/draft-ietf-bier- | |||
multicast-http-response-06.txt>. | multicast-http-response-06>. | |||
[I-D.ietf-bier-non-mpls-bift-encoding] | [BIER-TE-PROTECTION] | |||
Wijnands, I., Mishra, M., Xu, X., and H. Bidgoli, "An | Eckert, T., Cauchie, G., Braun, W., and M. Menth, | |||
Optional Encoding of the BIFT-id Field in the non-MPLS | "Protection Methods for BIER-TE", Work in Progress, | |||
BIER Encapsulation", Work in Progress, Internet-Draft, | Internet-Draft, draft-eckert-bier-te-frr-03, 5 March 2018, | |||
draft-ietf-bier-non-mpls-bift-encoding-04, 30 May 2021, | <https://datatracker.ietf.org/doc/html/draft-eckert-bier- | |||
<https://www.ietf.org/archive/id/draft-ietf-bier-non-mpls- | te-frr-03>. | |||
bift-encoding-04.txt>. | ||||
[I-D.ietf-bier-te-yang] | [BIER-TE-YANG] | |||
Zhang, Z., Wang, C., Chen, R., Hu, F., Sivakumar, M., and | Zhang, Z., Wang, C., Chen, R., Hu, F., Sivakumar, M., and | |||
H. Chen, "A YANG data model for Tree Engineering for Bit | H. Chen, "A YANG data model for Tree Engineering for Bit | |||
Index Explicit Replication (BIER-TE)", Work in Progress, | Index Explicit Replication (BIER-TE)", Work in Progress, | |||
Internet-Draft, draft-ietf-bier-te-yang-04, 7 November | Internet-Draft, draft-ietf-bier-te-yang-05, 1 May 2022, | |||
2021, <https://www.ietf.org/archive/id/draft-ietf-bier-te- | <https://datatracker.ietf.org/doc/html/draft-ietf-bier-te- | |||
yang-04.txt>. | yang-05>. | |||
[I-D.ietf-roll-ccast] | [Bloom70] Bloom, B. H., "Space/time trade-offs in hash coding with | |||
allowable errors", Comm. ACM 13(7):422-6, | ||||
DOI 10.1145/362686.362692, July 1970, | ||||
<https://dl.acm.org/doi/10.1145/362686.362692>. | ||||
[CONSTRAINED-CAST] | ||||
Bergmann, O., Bormann, C., Gerdes, S., and H. Chen, | Bergmann, O., Bormann, C., Gerdes, S., and H. Chen, | |||
"Constrained-Cast: Source-Routed Multicast for RPL", Work | "Constrained-Cast: Source-Routed Multicast for RPL", Work | |||
in Progress, Internet-Draft, draft-ietf-roll-ccast-01, 30 | in Progress, Internet-Draft, draft-ietf-roll-ccast-01, 30 | |||
October 2017, <https://www.ietf.org/archive/id/draft-ietf- | October 2017, <https://datatracker.ietf.org/doc/html/ | |||
roll-ccast-01.txt>. | draft-ietf-roll-ccast-01>. | |||
[I-D.ietf-teas-rfc3272bis] | ||||
Farrel, A., "Overview and Principles of Internet Traffic | ||||
Engineering", Work in Progress, Internet-Draft, draft- | ||||
ietf-teas-rfc3272bis-16, 24 March 2022, | ||||
<https://www.ietf.org/archive/id/draft-ietf-teas- | ||||
rfc3272bis-16.txt>. | ||||
[ICC] Reed, M. J., Al-Naday, M., Thomos, N., Trossen, D., | [ICC] Reed, M. J., Al-Naday, M., Thomos, N., Trossen, D., | |||
Petropoulos, G., and S. Spirou, "Stateless multicast | Petropoulos, G., and S. Spirou, "Stateless multicast | |||
switching in software defined networks", IEEE | switching in software defined networks", IEEE | |||
International Conference on Communications (ICC), Kuala | International Conference on Communications (ICC), Kuala | |||
Lumpur, Malaysia, 2016, May 2016, | Lumpur, Malaysia, DOI 10.1109/ICC.2016.7511036, May 2016, | |||
<https://ieeexplore.ieee.org/document/7511036>. | <https://ieeexplore.ieee.org/document/7511036>. | |||
[RCSD94] Zhang, H. and D. Domenico, "Rate-Controlled Service | [NON-MPLS-BIER-ENCODING] | |||
Disciplines", Journal of High-Speed Networks, 1994, May | Wijnands, IJ., Mishra, M., Xu, X., and H. Bidgoli, "An | |||
1994, <https://dl.acm.org/doi/10.5555/2692227.2692232>. | Optional Encoding of the BIFT-id Field in the non-MPLS | |||
BIER Encapsulation", Work in Progress, Internet-Draft, | ||||
draft-ietf-bier-non-mpls-bift-encoding-04, 30 May 2021, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-bier- | ||||
non-mpls-bift-encoding-04>. | ||||
[RCSD94] Zhang, H. and D. Ferrari, "Rate-Controlled Service | ||||
Disciplines", Journal of High Speed Networks, Volume 3, | ||||
Issue 4, pp. 389-412, DOI 10.3233/JHS-1994-3405, October | ||||
1994, <https://content.iospress.com/articles/journal-of- | ||||
high-speed-networks/jhs3-4-05>. | ||||
[RFC4253] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | [RFC4253] Ylonen, T. and C. Lonvick, Ed., "The Secure Shell (SSH) | |||
Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253, | Transport Layer Protocol", RFC 4253, DOI 10.17487/RFC4253, | |||
January 2006, <https://www.rfc-editor.org/info/rfc4253>. | January 2006, <https://www.rfc-editor.org/info/rfc4253>. | |||
[RFC4456] Bates, T., Chen, E., and R. Chandra, "BGP Route | [RFC4456] Bates, T., Chen, E., and R. Chandra, "BGP Route | |||
Reflection: An Alternative to Full Mesh Internal BGP | Reflection: An Alternative to Full Mesh Internal BGP | |||
(IBGP)", RFC 4456, DOI 10.17487/RFC4456, April 2006, | (IBGP)", RFC 4456, DOI 10.17487/RFC4456, April 2006, | |||
<https://www.rfc-editor.org/info/rfc4456>. | <https://www.rfc-editor.org/info/rfc4456>. | |||
skipping to change at page 64, line 37 ¶ | skipping to change at line 2324 ¶ | |||
Przygienda, T., Zhang, J., and S. Aldrin, "OSPFv2 | Przygienda, T., Zhang, J., and S. Aldrin, "OSPFv2 | |||
Extensions for Bit Index Explicit Replication (BIER)", | Extensions for Bit Index Explicit Replication (BIER)", | |||
RFC 8444, DOI 10.17487/RFC8444, November 2018, | RFC 8444, DOI 10.17487/RFC8444, November 2018, | |||
<https://www.rfc-editor.org/info/rfc8444>. | <https://www.rfc-editor.org/info/rfc8444>. | |||
[RFC8556] Rosen, E., Ed., Sivakumar, M., Przygienda, T., Aldrin, S., | [RFC8556] Rosen, E., Ed., Sivakumar, M., Przygienda, T., Aldrin, S., | |||
and A. Dolganow, "Multicast VPN Using Bit Index Explicit | and A. Dolganow, "Multicast VPN Using Bit Index Explicit | |||
Replication (BIER)", RFC 8556, DOI 10.17487/RFC8556, April | Replication (BIER)", RFC 8556, DOI 10.17487/RFC8556, April | |||
2019, <https://www.rfc-editor.org/info/rfc8556>. | 2019, <https://www.rfc-editor.org/info/rfc8556>. | |||
[TE-OVERVIEW] | ||||
Farrel, A., Ed., "Overview and Principles of Internet | ||||
Traffic Engineering", Work in Progress, Internet-Draft, | ||||
draft-ietf-teas-rfc3272bis-21, 11 September 2022, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-teas- | ||||
rfc3272bis-21>. | ||||
Appendix A. BIER-TE and Segment Routing (SR) | Appendix A. BIER-TE and Segment Routing (SR) | |||
SR ([RFC8402]) aims to enable lightweight path steering via loose | SR [RFC8402] aims to enable lightweight path steering via loose | |||
source routing. Compared to its more heavy-weight predecessor RSVP- | source routing. For example, compared to its more heavyweight | |||
TE, SR does for example not require per-path signaling to each of | predecessor, RSVP-TE, SR does not require per-path signaling to each | |||
these hops. | of these hops. | |||
BIER-TE supports the same design philosophy for multicast. Like in | BIER-TE supports the same design philosophy for multicast. Like SR, | |||
SR, it relies on source-routing - via the definition of a BitString. | BIER-TE | |||
Like SR, it only requires to consider the "hops" on which either | ||||
replication has to happen, or across which the traffic should be | ||||
steered (even without replication). Any other hops can be skipped | ||||
via the use of routed adjacencies. | ||||
BIER-TE bit position (BP) can be understood as the BIER-TE equivalent | * relies on source routing (via a BitString), and | |||
of "forwarding segments" in SR, but they have a different scope than | ||||
SR forwarding segments. Whereas forwarding segments in SR are global | * only requires consideration of the "hops" either (1) on which | |||
or local, BPs in BIER-TE have a scope that is the group of BFR(s) | replication has to happen or (2) across which the traffic should | |||
that have adjacencies for this BP in their BIFT. This can be called | be steered (even without replication). | |||
"adjacency" scoped forwarding segments. | ||||
Any other hops can be skipped via the use of routed adjacencies. | ||||
BIER-TE "bit positions" (BPs) can be understood as the BIER-TE | ||||
equivalent of "forwarding segments" in SR, but they have a different | ||||
scope than do forwarding segments in SR. Whereas forwarding segments | ||||
in SR are global or local, BPs in BIER-TE have a scope that is | ||||
comprised of one or more BFRs that have adjacencies for the BPs in | ||||
their BIFTs. These segments can be called "adjacency-scoped" | ||||
forwarding segments. | ||||
Adjacency scope could be global, but then every BFR would need an | Adjacency scope could be global, but then every BFR would need an | |||
adjacency for this BP, for example a forward_routed() adjacency with | adjacency for a given BP -- for example, a forward_routed() adjacency | |||
encapsulation to the global SR SID of the destination. Such a BP | with encapsulation to the global SR "Segment Identifier" (SID) of the | |||
would always result in ingress replication though (as in [RFC7988]). | destination. Such a BP would always result in ingress replication, | |||
The first BFR encountering this BP would directly replicate to it. | though (as in [RFC7988]). The first BFR encountering this BP would | |||
Only by using non-global adjacency scope for BPs can traffic be | directly replicate traffic on it. Only by using non-global adjacency | |||
steered and replicated on non-ingress BFR. | scope for BPs can traffic be steered and replicated on a non-BFIR. | |||
SR can naturally be combined with BIER-TE and help to optimize it. | SR can naturally be combined with BIER-TE and can help optimize it. | |||
For example, instead of defining bit positions for non-replicating | For example, instead of defining bit positions for non-replicating | |||
hops, it is equally possible to use segment routing encapsulations | hops, it is equally possible to use SR encapsulations (e.g., SR-MPLS | |||
(e.g. SR-MPLS label stacks) for the encapsulation of | label stacks) for the encapsulation of "forward_routed()" | |||
"forward_routed" adjacencies. | adjacencies. | |||
Note that (non-TE) BIER itself can also be seen to be similar to SR. | Note that (non-TE) BIER itself can also be seen as being similar to | |||
BIER BPs act as global destination Node-SIDs and the BIER BitString | SR. BIER BPs act as global destination Node-SIDs, and the BIER | |||
is simply a highly optimized mechanism to indicate multiple such SIDs | BitString is simply a highly optimized mechanism to indicate multiple | |||
and let the network take care of effectively replicating the packet | such SIDs and let the network take care of effectively replicating | |||
hop-by-hop to each destination Node-SID. What BIER does not allow is | the packet hop by hop to each destination Node-SID. BIER does not | |||
to indicate intermediate hops, or in terms of SR the ability to | allow the indication of intermediate hops or, in terms of SR, the | |||
indicate a sequence of SID to reach the destination. This is what | ability to indicate a sequence of SIDs to reach the destination. On | |||
BIER-TE and its adjacency scoped BP enables. | the other hand, BIER-TE and its adjacency-scoped BPs provide these | |||
capabilities. | ||||
Acknowledgements | ||||
The authors would like to thank Greg Shepherd, IJsbrand Wijnands, | ||||
Neale Ranns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, | ||||
Carsten Bormann, and Wolfgang Braun for their reviews and | ||||
suggestions. | ||||
Special thanks to Xuesong Geng for shepherding this document. | ||||
Special thanks also for IESG review/suggestions by Alvaro Retana | ||||
(responsible AD/RTG), Benjamin Kaduk (SEC), Tommy Pauly (TSV), | ||||
Zaheduzzaman Sarker (TSV), Éric Vyncke (INT), Martin Vigoureux (RTG), | ||||
Robert Wilton (OPS), Erik Kline (INT), Lars Eggert (GEN), Roman | ||||
Danyliw (SEC), Ines Robles (RTGDIR), Robert Sparks (Gen-ART), | ||||
Yingzhen Qu (RTGDIR), and Martin Duke (TSV). | ||||
Authors' Addresses | Authors' Addresses | |||
Toerless Eckert (editor) | Toerless Eckert (editor) | |||
Futurewei Technologies Inc. | Futurewei Technologies Inc. | |||
2330 Central Expy | 2330 Central Expy | |||
Santa Clara, 95050 | Santa Clara, CA 95050 | |||
United States of America | United States of America | |||
Email: tte+ietf@cs.fau.de | Email: tte@cs.fau.de | |||
Michael Menth | Michael Menth | |||
University of Tuebingen | University of Tuebingen | |||
Germany | ||||
Email: menth@uni-tuebingen.de | Email: menth@uni-tuebingen.de | |||
Gregory Cauchie | Gregory Cauchie | |||
KOEVOO | KOEVOO | |||
France | ||||
Email: gregory@koevoo.tech | Email: gregory@koevoo.tech | |||
End of changes. 358 change blocks. | ||||
1825 lines changed or deleted | 1276 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |