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