| < draft-ietf-bier-te-arch-11.txt | draft-ietf-bier-te-arch-12.txt > | |||
|---|---|---|---|---|
| Network Working Group T.T.E. Eckert, Ed. | Network Working Group T.T.E. Eckert, Ed. | |||
| Internet-Draft Futurewei | Internet-Draft Futurewei | |||
| Intended status: Standards Track G.C. Cauchie | Intended status: Standards Track M.M. Menth | |||
| Expires: 19 May 2022 Bouygues Telecom | Expires: 1 August 2022 University of Tuebingen | |||
| M.M. Menth | G.C. Cauchie | |||
| University of Tuebingen | Bouygues Telecom | |||
| November 2021 | January 2022 | |||
| Tree Engineering for Bit Index Explicit Replication (BIER-TE) | Tree Engineering for Bit Index Explicit Replication (BIER-TE) | |||
| draft-ietf-bier-te-arch-11 | draft-ietf-bier-te-arch-12 | |||
| 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 Replication | steered replication and forwarding for "Bit Index Explicit | |||
| packets (RFC8279). It is called BIER Tree Engineering (BIER-TE) and | Replication" (BIER, RFC8279) packets. It is called BIER Tree | |||
| is intended to be used as the path steering mechanism for Traffic | Engineering (BIER-TE) and is intended to be used as the path steering | |||
| Engineering with BIER. | mechanism for Traffic Engineering with BIER. | |||
| BIER-TE introduces a new semantic for bit positions (BP) that | BIER-TE introduces a new semantic for "bit positions" (BP). They | |||
| indicate adjacencies, as opposed to (non-TE) BIER in which BPs | indicate adjacencies of the network topology, as opposed to (non-TE) | |||
| indicate Bit-Forwarding Egress Routers (BFER). BIER-TE can leverage | BIER in which BPs indicate "Bit-Forwarding Egress Routers" (BFER). A | |||
| BIER forwarding engines with little changes. Co-existence of BIER | BIER-TE packets BitString therefore indicates the edges of the (loop- | |||
| and BIER-TE forwarding in the same domain is possible, for example by | free) tree that the packet is forwarded across by BIER-TE. BIER-TE | |||
| using separate BIER sub-domains (SDs). Except for the optional | can leverage BIER forwarding engines with little changes. Co- | |||
| routed adjacencies, BIER-TE does not require a BIER routing underlay, | existence of BIER and BIER-TE forwarding in the same domain is | |||
| and can therefore operate without depending on an Interior Gateway | possible, for example by using separate BIER "sub-domains" (SDs). | |||
| Routing protocol (IGP). | Except for the optional routed adjacencies, BIER-TE does not require | |||
| a BIER routing underlay, and can therefore operate without depending | ||||
| on an "Interior Gateway Routing protocol" (IGP). | ||||
| As it operates on the same per-packet stateless forwarding | As it operates on the same per-packet stateless forwarding | |||
| principles, BIER-TE can also be a good fit to support multicast path | principles, BIER-TE can also be a good fit to support multicast path | |||
| steering in Segment Routing (SR) networks. | steering in "Segment Routing" (SR) networks. | |||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at https://datatracker.ietf.org/drafts/current/. | Drafts is at https://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on 5 May 2022. | ||||
| This Internet-Draft will expire on 5 July 2022. | ||||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2021 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 (https://trustee.ietf.org/ | |||
| license-info) in effect on the date of publication of this document. | license-info) in effect on the date of publication of this document. | |||
| Please review these documents carefully, as they describe your rights | Please review these documents carefully, as they describe your rights | |||
| and restrictions with respect to this document. Code Components | and restrictions with respect to this document. Code Components | |||
| extracted from this document must include Simplified BSD License text | extracted from this document must include Revised BSD License text as | |||
| as described in Section 4.e of the Trust Legal Provisions and are | described in Section 4.e of the Trust Legal Provisions and are | |||
| provided without warranty as described in the Simplified BSD License. | provided without warranty as described in the Revised BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
| 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.1. Requirements Language . . . . . . . . . . . . . . . . . . 5 | |||
| 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.1. Basic Examples . . . . . . . . . . . . . . . . . . . . . 5 | 2.1. Basic Examples . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.2. BIER-TE Topology and adjacencies . . . . . . . . . . . . 8 | 2.2. BIER-TE Topology and adjacencies . . . . . . . . . . . . 8 | |||
| 2.3. Relationship to BIER . . . . . . . . . . . . . . . . . . 9 | 2.3. Relationship to BIER . . . . . . . . . . . . . . . . . . 9 | |||
| 2.4. Accelerated/Hardware forwarding comparison . . . . . . . 11 | 2.4. Accelerated/Hardware forwarding comparison . . . . . . . 11 | |||
| 3. Components . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 3. Components . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 3.1. The Multicast Flow Overlay . . . . . . . . . . . . . . . 12 | 3.1. The Multicast Flow Overlay . . . . . . . . . . . . . . . 12 | |||
| 3.2. The BIER-TE Control Plane . . . . . . . . . . . . . . . . 12 | 3.2. The BIER-TE Control Plane . . . . . . . . . . . . . . . . 12 | |||
| 3.2.1. The BIER-TE Controller . . . . . . . . . . . . . . . 13 | 3.2.1. The BIER-TE Controller . . . . . . . . . . . . . . . 14 | |||
| 3.2.1.1. BIER-TE Topology discovery and creation . . . . . 14 | 3.2.1.1. BIER-TE Topology discovery and creation . . . . . 14 | |||
| 3.2.1.2. Engineered Trees via BitStrings . . . . . . . . . 14 | 3.2.1.2. Engineered Trees via BitStrings . . . . . . . . . 15 | |||
| 3.2.1.3. Changes in the network topology . . . . . . . . . 15 | 3.2.1.3. Changes in the network topology . . . . . . . . . 16 | |||
| 3.2.1.4. Link/Node Failures and Recovery . . . . . . . . . 15 | 3.2.1.4. Link/Node Failures and Recovery . . . . . . . . . 16 | |||
| 3.3. The BIER-TE Forwarding Plane . . . . . . . . . . . . . . 15 | 3.3. The BIER-TE Forwarding Plane . . . . . . . . . . . . . . 16 | |||
| 3.4. The Routing Underlay . . . . . . . . . . . . . . . . . . 16 | 3.4. The Routing Underlay . . . . . . . . . . . . . . . . . . 17 | |||
| 3.5. Traffic Engineering Considerations . . . . . . . . . . . 16 | 3.5. Traffic Engineering Considerations . . . . . . . . . . . 17 | |||
| 4. BIER-TE Forwarding . . . . . . . . . . . . . . . . . . . . . 17 | 4. BIER-TE Forwarding . . . . . . . . . . . . . . . . . . . . . 18 | |||
| 4.1. The Bit Index Forwarding Table (BIFT) . . . . . . . . . . 17 | 4.1. The BIER-TE Bit Index Forwarding Table (BIFT) . . . . . . 18 | |||
| 4.2. Adjacency Types . . . . . . . . . . . . . . . . . . . . . 18 | 4.2. Adjacency Types . . . . . . . . . . . . . . . . . . . . . 20 | |||
| 4.2.1. Forward Connected . . . . . . . . . . . . . . . . . . 19 | 4.2.1. Forward Connected . . . . . . . . . . . . . . . . . . 21 | |||
| 4.2.2. Forward Routed . . . . . . . . . . . . . . . . . . . 19 | 4.2.2. Forward Routed . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.2.3. ECMP . . . . . . . . . . . . . . . . . . . . . . . . 19 | 4.2.3. ECMP . . . . . . . . . . . . . . . . . . . . . . . . 21 | |||
| 4.2.4. Local Decap(sulation) . . . . . . . . . . . . . . . . 20 | 4.2.4. Local Decap(sulation) . . . . . . . . . . . . . . . . 22 | |||
| 4.3. Encapsulation / Co-existence with BIER . . . . . . . . . 20 | ||||
| 4.4. BIER-TE Forwarding Pseudocode . . . . . . . . . . . . . . 21 | 4.3. Encapsulation / Co-existence with BIER . . . . . . . . . 22 | |||
| 4.5. Basic BIER-TE Forwarding Example . . . . . . . . . . . . 24 | 4.4. BIER-TE Forwarding Pseudocode . . . . . . . . . . . . . . 23 | |||
| 4.6. BFR Requirements for BIER-TE forwarding . . . . . . . . . 26 | 4.5. Basic BIER-TE Forwarding Example . . . . . . . . . . . . 26 | |||
| 5. BIER-TE Controller Operational Considerations . . . . . . . . 27 | 4.6. BFR Requirements for BIER-TE forwarding . . . . . . . . . 28 | |||
| 5.1. Bit position Assignments . . . . . . . . . . . . . . . . 27 | 5. BIER-TE Controller Operational Considerations . . . . . . . . 29 | |||
| 5.1.1. P2P Links . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1. Bit Position Assignments . . . . . . . . . . . . . . . . 29 | |||
| 5.1.2. BFER . . . . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.1. P2P Links . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.1.3. Leaf BFERs . . . . . . . . . . . . . . . . . . . . . 27 | 5.1.2. BFER . . . . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.1.4. LANs . . . . . . . . . . . . . . . . . . . . . . . . 28 | 5.1.3. Leaf BFERs . . . . . . . . . . . . . . . . . . . . . 29 | |||
| 5.1.5. Hub and Spoke . . . . . . . . . . . . . . . . . . . . 29 | 5.1.4. LANs . . . . . . . . . . . . . . . . . . . . . . . . 31 | |||
| 5.1.6. Rings . . . . . . . . . . . . . . . . . . . . . . . . 29 | 5.1.5. Hub and Spoke . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.1.7. Equal Cost MultiPath (ECMP) . . . . . . . . . . . . . 30 | 5.1.6. Rings . . . . . . . . . . . . . . . . . . . . . . . . 32 | |||
| 5.1.8. Forward Routed adjacencies . . . . . . . . . . . . . 33 | 5.1.7. Equal Cost MultiPath (ECMP) . . . . . . . . . . . . . 33 | |||
| 5.1.8.1. Reducing bit positions . . . . . . . . . . . . . 33 | 5.1.8. Forward Routed adjacencies . . . . . . . . . . . . . 36 | |||
| 5.1.8.2. Supporting nodes without BIER-TE . . . . . . . . 34 | 5.1.8.1. Reducing bit positions . . . . . . . . . . . . . 36 | |||
| 5.1.9. Reuse of bit positions (without DNC) . . . . . . . . 34 | 5.1.8.2. Supporting nodes without BIER-TE . . . . . . . . 37 | |||
| 5.1.10. Summary of BP optimizations . . . . . . . . . . . . . 36 | 5.1.9. Reuse of bit positions (without DNC) . . . . . . . . 37 | |||
| 5.2. Avoiding duplicates and loops . . . . . . . . . . . . . . 37 | 5.1.10. Summary of BP optimizations . . . . . . . . . . . . . 38 | |||
| 5.2.1. Loops . . . . . . . . . . . . . . . . . . . . . . . . 37 | 5.2. Avoiding duplicates and loops . . . . . . . . . . . . . . 39 | |||
| 5.2.2. Duplicates . . . . . . . . . . . . . . . . . . . . . 37 | 5.2.1. Loops . . . . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 5.3. Managing SI, sub-domains and BFR-ids . . . . . . . . . . 38 | 5.2.2. Duplicates . . . . . . . . . . . . . . . . . . . . . 40 | |||
| 5.3.1. Why SI and sub-domains . . . . . . . . . . . . . . . 38 | 5.3. Managing SI, sub-domains and BFR-ids . . . . . . . . . . 41 | |||
| 5.3.2. Assigning bits for the BIER-TE topology . . . . . . . 39 | 5.3.1. Why SI and sub-domains . . . . . . . . . . . . . . . 41 | |||
| 5.3.3. Assigning BFR-id with BIER-TE . . . . . . . . . . . . 40 | 5.3.2. Assigning bits for the BIER-TE topology . . . . . . . 42 | |||
| 5.3.4. Mapping from BFR to BitStrings with BIER-TE . . . . . 41 | 5.3.3. Assigning BFR-id with BIER-TE . . . . . . . . . . . . 43 | |||
| 5.3.5. Assigning BFR-ids for BIER-TE . . . . . . . . . . . . 42 | 5.3.4. Mapping from BFR to BitStrings with BIER-TE . . . . . 44 | |||
| 5.3.6. Example bit allocations . . . . . . . . . . . . . . . 42 | 5.3.5. Assigning BFR-ids for BIER-TE . . . . . . . . . . . . 45 | |||
| 5.3.6.1. With BIER . . . . . . . . . . . . . . . . . . . . 42 | 5.3.6. Example bit allocations . . . . . . . . . . . . . . . 45 | |||
| 5.3.6.2. With BIER-TE . . . . . . . . . . . . . . . . . . 43 | 5.3.6.1. With BIER . . . . . . . . . . . . . . . . . . . . 45 | |||
| 5.3.7. Summary . . . . . . . . . . . . . . . . . . . . . . . 44 | 5.3.6.2. With BIER-TE . . . . . . . . . . . . . . . . . . 46 | |||
| 6. BIER-TE and Segment Routing . . . . . . . . . . . . . . . . . 45 | 5.3.7. Summary . . . . . . . . . . . . . . . . . . . . . . . 47 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 46 | 6. Security Considerations . . . . . . . . . . . . . . . . . . . 48 | |||
| 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47 | 7. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 9. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 47 | 8. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 49 | |||
| 10. Change log [RFC Editor: Please remove] . . . . . . . . . . . 47 | 9. Change log [RFC Editor: Please remove] . . . . . . . . . . . 50 | |||
| 11. References . . . . . . . . . . . . . . . . . . . . . . . . . 57 | 10. References . . . . . . . . . . . . . . . . . . . . . . . . . 62 | |||
| 11.1. Normative References . . . . . . . . . . . . . . . . . . 57 | 10.1. Normative References . . . . . . . . . . . . . . . . . . 62 | |||
| 11.2. Informative References . . . . . . . . . . . . . . . . . 57 | 10.2. Informative References . . . . . . . . . . . . . . . . . 63 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 60 | Appendix A. BIER-TE and Segment Routing . . . . . . . . . . . . 66 | |||
| Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 67 | ||||
| 1. Overview | 1. Overview | |||
| BIER-TE is based on architecture, terminology and packet formats with | BIER-TE is based on the (non-TE) BIER architecture, terminology and | |||
| (non-TE) BIER as described in [RFC8279] and [RFC8296]. This document | packet formats as described in [RFC8279] and [RFC8296]. This | |||
| describes BIER-TE in the expectation that the reader is familiar with | document describes BIER-TE in the expectation that the reader is | |||
| these two documents. | familiar with these two documents. | |||
| BIER-TE introduces a new semantic for bit positions (BP) that | BIER-TE introduces a new semantic for "bit positions" (BP). They | |||
| indicate adjacencies, as opposed to BIER in which BPs indicate Bit- | indicate adjacencies of the network topology, as opposed to (non-TE) | |||
| Forwarding Egress Routers (BFER). With BIER-TE, the BIFT of each BFR | BIER in which BPs indicate "Bit-Forwarding Egress Routers" (BFER). A | |||
| is only populated with BP that are adjacent to the BFR in the BIER-TE | BIER-TE packets BitString therefore indicates the edges of the (loop- | |||
| Topology. Other BPs are empty in the BIFT. The BFR replicate and | free) tree that the packet is forwarded across by BIER-TE. With | |||
| forwards BIER packets to adjacent BPs that are set in the packet. | BIER-TE, the "Bit Index Forwarding Table" (BIFT) of each "Bit | |||
| BPs are normally also cleared upon forwarding to avoid duplicates and | Forwarding Router" (BFR) is only populated with BP that are adjacent | |||
| loops. This is detailed further below. | 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 | ||||
| set in the packet. 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 sub-domains. 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 an | |||
| Interior Gateway Routing protocol (IGP). | "Interior Gateway Routing protocol" (IGP). | |||
| As it operates on the same per-packet stateless forwarding | As it operates on the same per-packet stateless forwarding | |||
| principles, BIER-TE can also be a good fit to support multicast path | principles, BIER-TE can also be a good fit to support multicast path | |||
| steering in Segment Routing (SR) networks. | steering in "Segment Routing" (SR) networks ([RFC8402]). | |||
| This document is structured as follows: | This document is structured as follows: | |||
| * Section 2 introduces BIER-TE with two reference forwarding | * Section 2 introduces BIER-TE with two forwarding examples, | |||
| examples, followed by an introduction of the new concepts of the | followed by an introduction of the new concepts of the BIER-TE | |||
| BIER-TE (overlay) topology and finally a summary of the | (overlay) topology and finally a summary of the relationship | |||
| relationship between BIER and BIER-TE and a discussion of | between BIER and BIER-TE and a discussion of accelerated hardware | |||
| 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 | Flow overlay, BIER-TE layer with the BIER-TE control plane | |||
| (including the BIER-TE controller) and BIER-TE forwarding plane, | (including the BIER-TE controller) and BIER-TE forwarding plane, | |||
| and the routing underlay. | 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 type 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, foremost how the BIER-TE controller can optimize the | |||
| use of BP by using specific type of BIER-TE adjacencies for | use of BP by using specific type of BIER-TE adjacencies for | |||
| different type of topological situations, but also how to assign | different type of topological situations, but also how to assign | |||
| bits to avoid loops and duplicates (which in BIER-TE does not come | bits to avoid loops and duplicates (which in BIER-TE does not come | |||
| for free), and finally how SI, sub-domains and BFR-ids can be | for free), and finally how "Set Identifier" (SI), "sub-domain" | |||
| managed by a BIER-TE controller, examples and summary. | (SD) and BFR-ids can be managed by a BIER-TE controller, examples | |||
| and summary. | ||||
| * Section 6 concludes the technology specific sections of document | * Appendix A concludes the technology specific sections of the | |||
| by further relating BIER-TE to Segment Routing (SR). | document by further relating BIER-TE to SR. | |||
| Note that related work, [I-D.ietf-roll-ccast] uses Bloom filters | Note that related work, [I-D.ietf-roll-ccast] 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- | BitString during forwarding to avoid loops. For these reasons, BIER- | |||
| TE uses explicit BitStrings like BIER. The explicit BitStrings of | TE uses explicit BitStrings like BIER. The explicit BitStrings of | |||
| BIER-TE can also be seen as a special type of Bloom filter, and this | BIER-TE can also be seen as a special type of Bloom filter, and this | |||
| is how related work [ICC] describes it. | is how related work [ICC] describes it. | |||
| 1.1. Requirements Language | 1.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 BCP | |||
| 14 [RFC2119], [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
| capitals, as shown here. | capitals, as shown here. | |||
| 2. Introduction | 2. Introduction | |||
| 2.1. Basic Examples | 2.1. Basic Examples | |||
| BIER-TE forwarding is best introduced with simple examples. | BIER-TE forwarding is best introduced with simple examples. These | |||
| examples use formal terms defined later in the document (Figure 4), | ||||
| including forward_connected(), forward_routed() and local_decap(). | ||||
| 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 (BIFT): | |||
| 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 | |||
| p13 -> local_decap | p13 -> local_decap() | |||
| BFR4: p4 -> forward_connected() to BFR2 | BFR4: p4 -> forward_connected() to BFR2 | |||
| p10 -> forward_connected() to BFR5 | p10 -> forward_connected() to BFR5 | |||
| p14 -> local_decap | p14 -> local_decap() | |||
| BFR5: p6 -> forward_connected() to BFR3 | BFR5: p6 -> forward_connected() to BFR3 | |||
| p9 -> forward_connected() to BFR4 | p9 -> forward_connected() to BFR4 | |||
| p12 -> forward_connected() to BFR6 | p12 -> forward_connected() to BFR6 | |||
| BFR6: p11 -> forward_connected() to BFR5 | BFR6: p11 -> forward_connected() to BFR5 | |||
| p15 -> local_decap | p15 -> local_decap() | |||
| Figure 1: BIER-TE basic example | Figure 1: BIER-TE basic example | |||
| Consider the simple network in the above BIER-TE overview example | Consider the simple network in the above BIER-TE overview example | |||
| picture with 6 BFRs. p1...p14 are the bit positions (BP) used. All | picture with 6 BFRs. p1...p15 are the bit positions used. All BFRs | |||
| BFRs can act as an ingress BFR (BFIR), BFR1, BFR3, BFR4 and BFR6 can | can act as an ingress BFR (BFIR), BFR1, BFR3, BFR4 and BFR6 can also | |||
| also be egress BFRs (BFERs). Forward_connected() is the name for | be BFERs. Forward_connected() is the name for adjacencies that are | |||
| adjacencies that are representing subnet adjacencies of the network. | representing subnet adjacencies of the network. Local_decap() is the | |||
| Local_decap() is the name of the adjacency to decapsulate BIER-TE | name of the adjacency to decapsulate BIER-TE packets and pass their | |||
| packets and pass their payload to higher layer processing. | payload to higher layer processing. | |||
| Assume a packet from BFR1 should be sent via BFR4 to BFR6. This | Assume a packet from BFR1 should be sent via BFR4 to BFR6. This | |||
| requires a BitString (p2,p8,p10,p12,p15). When this packet is | 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 in addition to BFR6 via BFR4 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). When this packet is | BitString needs to be (p2,p5,p8,p10,p12,p13,p15). When this packet | |||
| 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 is | |||
| showing the ability of the shown BIER-TE Topology to make the traffic | showing the ability of the shown BIER-TE Topology to make the traffic | |||
| pass across any possible path and be replicated where desired. | 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 to minimize BP assignments, many of which | |||
| are based on assumptions about the required multicast traffic paths | are based on out-of-band knowledge about the required multicast | |||
| and bandwidth consumption in the network. | traffic paths and bandwidth consumption in the network, such as from | |||
| pre-deployment planning. | ||||
| The following picture shows a modified example, in which Rtr2 and | Figure 2 shows a modified example, in which Rtr2 and Rtr5 are assumed | |||
| Rtr5 are assumed not to support BIER-TE, so traffic has to be unicast | not to support BIER-TE, so traffic has to be unicast encapsulated | |||
| encapsulated across them. To emphasize non-L2, but routed/tunneled | across them. To emphasize non-L2, but routed/tunneled forwarding of | |||
| forwarding of BIER-TE packets, these adjacencies are called | BIER-TE packets, these adjacencies are called "forward_routed". | |||
| "forward_routed". Otherwise there is no difference in their | Otherwise, there is no difference in their processing over the | |||
| processing over the aforementioned "forward_connected" adjacencies. | 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 BFIR but not BFER or 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 | |||
| ....> 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 (BIFT): | |||
| 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: p5 -> local_decap | BFR6: p7 -> forward_routed() to BFR3 | |||
| p6 -> local_decap | ||||
| p7 -> forward_routed() to BFR3 | ||||
| p8 -> forward_routed() to BFR4 | p8 -> forward_routed() to BFR4 | |||
| 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 BFR6, the BitString is | To send a BIER-TE packet from BFR1 via BFR3 to be received by BFR6, | |||
| (p1,p5). From BFR1 via BFR4 to BFR6 it is (p2,p6). A packet from | the BitString is (p1,p5,p9). From BFR1 via BFR4 to be received by | |||
| BFR1 to BFR3,BFR4 and from BFR3 to BFR6 uses (p1,p2,p3,p4,p5). A | BFR6, the BitString is (p2,p6,p9). A packet from BFR1 to be received | |||
| packet from BFR1 to BFR3,BFR4 and from BFR4 to BFR uses | by BFR3,BFR4 and from BFR3 to be received by BFR6 uses | |||
| (p1,p2,p3,p4,p6). A packet from BFR1 to BFR4, and from BFR4 to BFR6 | (p1,p2,p3,p4,p5,p9). A packet from BFR1 to be received by BFR3,BFR4 | |||
| and from BFR6 to BFR3 uses (p2,p3,p4,p6,p7). A packet from BFR1 to | and from BFR4 to be received by BFR6 uses (p1,p2,p3,p4,p6,p9). A | |||
| BFR3, and from BFR3 to BFR6 and from BFR6 to BFR4 uses | packet from BFR1 to be received by BFR4, and from BFR4 to be received | |||
| (p1,p3,p4,p5,p8). | by BFR6 and from there to be received by BFR3 uses | |||
| (p2,p3,p4,p6,p7,p9). A packet from BFR1 to be received by BFR3, and | ||||
| from BFR3 to be received by BFR6 there to be received by BFR4 uses | ||||
| (p1,p3,p4,p5,p8,p9). | ||||
| 2.2. BIER-TE Topology and adjacencies | 2.2. 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.1. 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 BP 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 BFR 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 BFR labelled with the BP used for the | adjacencies between the BFRs labelled with the BP used for the | |||
| adjacency. Adjacencies are naturally unidirectional. BP can be | adjacency. Adjacencies are naturally unidirectional. 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 further down in the text. | 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 a "native" 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.3. Relationship to BIER | |||
| BIER-TE is designed so that is forwarding plane is a simple extension | BIER-TE is designed so that its forwarding plane is a simple | |||
| to the (non-TE) BIER forwarding plane, hence allowing for it to be | extension to the (non-TE) BIER forwarding plane, hence allowing for | |||
| added to BIER deployments where it can be beneficial. | it to 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 with needs for path steering but | |||
| without desire for distributed routing protocols. | without desire for 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 packet | 1. The fundamental purpose of per-packet signaled replication | |||
| replication and delivery via a BitString. | and delivery via a BitString. | |||
| 2. The overall architecture consisting of three layers, flow | 2. The overall architecture consisting of three layers, flow | |||
| overlay, BIER(-TE) layer and routing underlay. | overlay, BIER(-TE) layer and routing underlay. | |||
| 3. The supportable encapsulations, [RFC8296] or other (future) | 3. The supported encapsulations [RFC8296]. | |||
| encapsulations. | ||||
| 4. The semantic of all [RFC8296] header elements used by the | 4. The semantic of all [RFC8296] header elements used by the | |||
| BIER-TE forwarding plane other than the semantic of the BP in | BIER-TE forwarding plane other than the semantic of the BP in | |||
| the BitString. | the BitString. | |||
| 5. The BIER forwarding plane, with the exception of how bits | 5. The BIER forwarding plane, except for how bits have to be | |||
| 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 | 1. 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 calculated next-hop toward that BFER. In BIER- | |||
| TE, bits in the BitString of a BIER packet header indicate an | TE, a bit in the BitString of a BIER packet header indicates | |||
| adjacency in the BIER-TE topology, and only the BFRs that are | an adjacency in the BIER-TE topology, and only the BFR that | |||
| the upstream of this adjacency have this bit populated with | is the upstream of that adjacency has its BP populated with | |||
| the adjacency in their BIFT. | the adjacency in its BIFT. | |||
| 2. In BIER, the implied reference option for the core part of | 2. In BIER, the implied reference option 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, such as those standardized in | distributed routing protocols. This includes ISIS/OSPF | |||
| ISIS/OSPF extensions for BIER, [RFC8401] and [RFC8444]. The | extensions for BIER, [RFC8401] and [RFC8444]. | |||
| reference option for the core part of the BIER-TE control | ||||
| plane is the BIER-TE controller. Nevertheless, both BIER and | 3. The reference option for the core part of the BIER-TE control | |||
| BIER-TE BIFT forwarding plane state could equally be | plane is the BIER-TE controller. Nevertheless, both the BIER | |||
| and BIER-TE BIFTs forwarding plane state could equally be | ||||
| populated by any mechanism. | populated by any mechanism. | |||
| 3. Assuming the reference options for the control plane, BIER-TE | 4. Assuming the reference options for the control plane, BIER-TE | |||
| replaces in-network autonomous path calculation by explicit | replaces in-network autonomous path calculation by explicit | |||
| paths calculated by the BIER-TE controller. | 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. BIRTs are not required on BFRs for BIER-TE when using a BIER- | 1. "Bit Index Routing Tables" (BIRTs) are not required on BFRs | |||
| TE controller because the controller can directly populate | for BIER-TE when using a BIER-TE controller because the | |||
| the BIFTs. In BIER, BIRTs are populated by the distributed | controller can directly populate the BIFTs. In BIER, BIRTs | |||
| routing protocol support for BIER, allowing BFRs to populate | are populated by the distributed routing protocol support for | |||
| their BIFTs locally from their BIRTs. Other BIER-TE control | BIER, allowing BFRs to populate their BIFTs locally from | |||
| plane or management plane options may introduce requirements | their BIRTs. Other BIER-TE control plane or management plane | |||
| for BIRTs for BIER-TE BFRs. | options may introduce requirements for BIRTs for BIER-TE | |||
| BFRs. | ||||
| 2. The BIER-TE layer forwarding plane does not require BFRs to | 2. 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 and therefore also no unique BFR-id. See | |||
| for example See Section 5.1.3. | Section 5.1.3. | |||
| 3. Identification of BFRs by the BIER-TE control plane is | 3. 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 use the BFR-id field of the BIER | 4. BIER-TE forwarding does not require the BFIR-id field of the | |||
| 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 | 1. The BIER/BIER-TE packet header needs to allow addressing both | |||
| BIER and BIER-TE BIFT. Depending on the encapsulation | BIER and BIER-TE BIFTs. Depending on the encapsulation | |||
| option, the same SD may or may not be reusable across BIER | option, the same SD may or may not be reusable across BIER | |||
| and BIER-TE. See Section 4.3. In either case, a packet is | and BIER-TE. See Section 4.3. In either case, a packet is | |||
| always only forwarded end-to-end via BIER or via BIER-TE | always only forwarded end-to-end via BIER or via BIER-TE | |||
| (ships in the nights forwarding). | (ships in the nights forwarding). | |||
| 2. BIER-TE deployments will have to assign BFR-ids to BFRs and | 2. BIER-TE deployments will have to assign BFR-ids to BFRs and | |||
| insert them into the BFR-id field of BIER packet headers as | insert them into the BFIR-id field of BIER packet headers as | |||
| BIER does, whenever the deployment uses (unchanged) | BIER does, whenever the deployment uses (unchanged) | |||
| components developed for BIER that use BFR-id, such as | components developed for BIER that use BFR-id, such as | |||
| multicast flow overlays or BIER layer control plane elements. | multicast flow overlays or BIER layer control plane elements. | |||
| See also Section 5.3.3. | See also Section 5.3.3. | |||
| 2.4. Accelerated/Hardware forwarding comparison | 2.4. Accelerated/Hardware forwarding comparison | |||
| Forwarding of BIER-TE is designed to easily build/program common | BIER-TE forwarding rules, especially the BitString parsing are | |||
| forwarding hardware with BIER. The pseudocode in Section 4.4 shows | designed to be as close as possible to those of BIER in the | |||
| how existing (non-TE) BIER/BIFT forwarding can be modified to support | expectation that this eases the programming of BIER-TE forwarding | |||
| the REQUIRED BIER-TE forwarding functionality, by using BIER BIFT's | code and/or BIER-TE forwarding hardware on platforms supporting BIER. | |||
| "Forwarding Bit Mask" (F-BM): Only the clearing of bits to avoid | The pseudocode in Section 4.4 shows how existing (non-TE) BIER/BIFT | |||
| duplicate packets to a BFR's neighbor is skipped in BIER-TE | forwarding can be modified to support the required BIER-TE forwarding | |||
| forwarding because it is not necessary and could not be done when | functionality (Section 4.6), by using BIER BIFT's "Forwarding Bit | |||
| using BIER F-BM. | Mask" (F-BM): Only the clearing of bits to avoid duplicate packets to | |||
| a BFR's neighbor is skipped in BIER-TE forwarding because it is not | ||||
| necessary and could not be done when using 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 being constituted from the same three | |||
| layers as BIER: The "multicast flow overlay", the "BIER layer" and | layers as BIER: The "multicast flow overlay", the "BIER layer" and | |||
| skipping to change at page 12, line 12 ¶ | skipping to change at page 12, line 12 ¶ | |||
| "BIER layer" is constituted from the "BIER-TE forwarding plane" and | "BIER layer" is constituted from the "BIER-TE forwarding plane" and | |||
| the "BIER-TE control plane" represent by the "BIER-TE Controller". | the "BIER-TE control plane" represent 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 described for BIER in | |||
| [RFC8279], Section 4.3. See also Section 3.2.1.2. | [RFC8279], Section 4.3. See also Section 3.2.1.2. | |||
| When a BIER-TE controller is used, then the signaling for the | ||||
| Multicast Flow Overlay may also be preferred to operate through a | ||||
| central point of control. For BGP based overlay flow services such | ||||
| as "Multicast VPN Using BIER" ([RFC8556]) this can be achieved by | ||||
| making the BIER-TE controller operate as a BGP Route Reflector | ||||
| ([RFC4456]) and combining it with signaling through BGP or a | ||||
| different protocol for the BIER-TE controller calculated BitStrings. | ||||
| See Section 3.2.1.2 and Section 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 control plane | |||
| is not explicitly separated from the BIER forwarding plane, but | is not explicitly separated from the BIER forwarding plane, but | |||
| instead their functions are summarized together in Section 4.2. | instead their functions are summarized together in Section 4.2. | |||
| Example standardized options for the BIER control plane include ISIS/ | Example standardized options for the BIER control plane include ISIS/ | |||
| OSPF extensions for BIER, [RFC8401] and [RFC8444]. | OSPF extensions for BIER, [RFC8401] and [RFC8444]. | |||
| For BIER-TE, the control plane includes at minimum the following | For BIER-TE, the control plane includes at minimum the following | |||
| functionality. | functionality. | |||
| 1. During initial provisioning of the network and/or during | 1. BIER-TE topology control: During initial provisioning of the | |||
| modifications of its topology and/or services: protocols and/or | network and/or during modifications of its topology and/or | |||
| procedures to establish BIER-TE BIFTs: | services, the protocols and/or procedures to establish BIER-TE | |||
| BIFTs: | ||||
| 1. Determine the desired BIER-TE topology for a BIER-TE sub- | 1. Determine the desired BIER-TE topology for a BIER-TE sub- | |||
| domains: the native and/or overlay adjacencies that are | domains: the native and/or overlay adjacencies that are | |||
| assigned to BPs. | assigned to BPs. Topology discovery is discussed in | |||
| Section 3.2.1.1 and the various aspects of the BIER-TE | ||||
| controllers determinations about the topology are discussed | ||||
| throughout Section 5 | ||||
| 2. Determine the per-BFR BIFT from the BIER-TE topology. | 2. Determine the per-BFR BIFT from the BIER-TE topology. This is | |||
| achieved by simply extracting the adjacencies of the BFR from | ||||
| the BIER-TE topology and populating the BFRs BIFT with them. | ||||
| 3. Optionally assign BFR-ids to BFIRs for later insertion into | 3. Optionally assign BFR-ids to BFIRs for later insertion into | |||
| BIER-TE headers on BFIRs. Alternatively, bfir-id in BIER | BIER headers on BFIRs as BFIR-id. Alternatively, BFIR-id in | |||
| packet headers may be managed solely by the flow overlay | BIER packet headers may be managed solely by the flow overlay | |||
| layer and/or be unused. | 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 | 4. Install/update the BIFTs into the BFRs and optionally BFR-ids | |||
| into BFIRs. | into BFIRs. This is discussed in Section 3.2.1.1. | |||
| 2. During operations of the network: Protocols and/or procedures to | 2. BIER-TE tree control: During operations of the network, | |||
| support creation/change/removal of overlay flows on BFIRs: | protocols and/or procedures to support creation/change/removal of | |||
| overlay flows on BFIRs: | ||||
| 1. Process the BIER-TE requirements for the multicast overlay | 1. Process the BIER-TE requirements for the multicast overlay | |||
| flow: BFIR and BFERs of the flow as well as policies for the | flow: BFIR and BFERs of the flow as well as policies for the | |||
| path selection of the flow. | path selection of the flow. This is discussed in Section 3.5. | |||
| 2. Determine the BitStrings and optionally Entropy. | 2. Determine the BitStrings and optionally Entropy. This is | |||
| discussed in Section 3.2.1.2, Section 3.5 and Section 5.3.4. | ||||
| 3. Install state on the BFIR to impose the desired BIER packet | 3. Install state on the BFIR to impose the desired BIER packet | |||
| header(s) for packets of the overlay flow. | header(s) for packets of the overlay flow. Different aspects | |||
| of this and the next point are discussed throughout | ||||
| Section 3.2.1 and in Section 4.3, but the main responsibility | ||||
| of these two points is with the Multicast Flow Overlay | ||||
| (Section 3.1), which is architecturally inherited from BIER. | ||||
| 4. Install the necessary state on the BFERs to decapsulate the | 4. 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 | |||
| Notwithstanding other options, this architecture describes the BIER | [RFC-Editor: the following text has three references to anchors | |||
| control plane as shown in Figure 3 to consists of: | topology-control, topology-control-1 and tree-control. | |||
| Unfortunately, XMLv2 does not offer any tagging that reasonable | ||||
| references are generated (i had this problem already in RFCs last | ||||
| year. Please make sure there are useful-to-read cross-references in | ||||
| the RFC in these three places after you convert to XMLv3.] | ||||
| * A single centralized BIER-TE controller. | This architecture describes the BIER-TE control plane as shown in | |||
| Figure 3 to consist of: | ||||
| * Data-models and protocols to communicate between controller and | * A BIER-TE controller. | |||
| BFRs in step 1, such as YANG/Netconf/RestConf. | ||||
| * Protocols to communicate between controller and BFIR in step 2, | * BFR data-models and protocols to communicate between controller | |||
| such as BIER-TE extensions for [RFC5440]. | and BFRs in support of BIER-TE topology control (Section 3.2), | |||
| such as YANG/NETCONF/RESTCONF ([RFC7950]/[RFC6241]/[RFC8040]). | ||||
| The (non-TE) BIER control plane could equally be implemented without | * BFR data-models and protocols to communicate between controller | |||
| any active dynamic components by an operator via CLI on the BFRs. In | and BFIR in support of BIER-TE tree control (Section 3.2), such as | |||
| that case, operator configured local policy on the BFIR would have to | BIER-TE extensions for [RFC5440]. | |||
| determine how to set the appropriate BIER header fields. The BIER-TE | ||||
| control plane could also be decentralized and/or distributed, but | The single, centralized BIER-TE controller is used in this document | |||
| this document does not consider any additional protocols and/or | as reference option for the BIER-TE control plane but other options | |||
| procedures which would then be necessary to coordinate its entities | are equally feasible. The BIER-TE control plane could equally be | |||
| to achieve the above described functionality. | implemented without automated configuration/protocols, by an operator | |||
| via CLI on the BFRs. In that case, operator configured local policy | ||||
| on the BFIR would have to determine how to set the appropriate BIER | ||||
| header fields. The BIER-TE control plane could also be decentralized | ||||
| and/or distributed, but this document does not consider any | ||||
| additional protocols and/or procedures which would then be necessary | ||||
| to coordinate its (distributed/decentralized) entities 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 | |||
| Step 1.1 includes network topology discovery and BIER-TE topology | The first item of BIER-TE topology control (Section 3.2, Paragraph 3, | |||
| Item 2.2.1) 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 BFR 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, such as in industrial environments, | |||
| both discovery and creation can be a manual/offline process. | both 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 protocols including | |||
| extending a Link-State-Protocol (LSP) based IGP into the BIER-TE | extending a "Link-State-Protocol" based IGP into the BIER-TE | |||
| controller itself, [RFC7752] (BGP-LS) or [RFC8345] (Yang topology) as | controller itself, [RFC7752] (BGP-LS) or [RFC8345] (YANG topology) as | |||
| well as BIER-TE specific methods, for example via | well as BIER-TE specific methods, for example via | |||
| [I-D.ietf-bier-te-yang]. These options are non-exhaustive. | [I-D.ietf-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 how | |||
| to minimize the number of BP required and how to assign BP across | to minimize the number of BPs required and how to assign BPs across | |||
| different BitStrings to minimize the number of duplicate packets | different BitStrings to minimize the number of duplicate packets | |||
| across links when delivering an overlay flow to BFER using different | across links when delivering an overlay flow to BFER using different | |||
| SIs/BitStrings. These topics are discussed in Section 5. | 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 is determined, the BIER-TE Controller then | |||
| pushes the BitPositions/adjacencies to the BIFT of the BFRs. On each | pushes the BitPositions/adjacencies to the BIFT of the BFRs. On each | |||
| BFR only those SI:BitPositions are populated that are adjacencies to | BFR only those SI:BitPositions are populated that are adjacencies to | |||
| other BFRs in the BIER-TE topology. | other BFRs in the BIER-TE topology. | |||
| Communications between the BIER-TE Controller and BFRs (beside | Communications between the BIER-TE Controller and BFRs for both BIER- | |||
| topology discovery) is ideally via standardized protocols and data- | TE topology control and BIER-TE tree control is ideally via | |||
| models such as Netconf/RestConf/Yang/PCEP. Vendor-specific CLI on | standardized protocols and data-models such as NETCONF/RESTCONF/YANG/ | |||
| the BFRs is also an option (as in many other SDN solutions lacking | PCEP. Vendor-specific CLI on the BFRs is also an option (as in many | |||
| definition of standardized data model). | other SDN solutions lacking definition 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 BFER in a single sub-domain 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 BFER in the same sub-domain 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 BFER, so the BitStrings from different BFIR to the same | |||
| set of BFER will often be different. Likewise, the BitString from | set of BFER 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 BFER can be different for different | |||
| skipping to change at page 15, line 31 ¶ | skipping to change at page 16, line 28 ¶ | |||
| the details of which are out of scope for this document. It can also | the details of which are out of scope for this document. It can also | |||
| more slowly react by recalculating the BitStrings of affected | more slowly react by recalculating the BitStrings of affected | |||
| multicast flows. This reaction is slower than the FRR procedure | multicast flows. This reaction is slower than the FRR procedure | |||
| because the BIER-TE Controller needs to receive link/node up/down | because the BIER-TE Controller needs to receive link/node up/down | |||
| indications, recalculate the desired BitStrings and push them down | indications, recalculate the desired BitStrings and push them down | |||
| into the BFIRs. With FRR, this is all performed locally on a BFR | into the BFIRs. With FRR, this is all performed locally on a BFR | |||
| receiving the adjacency up/down notification. | receiving the adjacency up/down notification. | |||
| 3.3. The BIER-TE Forwarding Plane | 3.3. The BIER-TE Forwarding Plane | |||
| The BIER-TE Forwarding Plane constitutes of the following components: | [RFC-editor Q: "is constituted from" / "consists of" / "composed | |||
| from..." ???] | ||||
| 1. On BFIR, imposition of BIER header for packets from overlay | The BIER-TE Forwarding Plane is constituted from the following | |||
| components: | ||||
| 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 a combination of state established by | |||
| the BIER-TE control plane and/or the multicast flow overlay as | the BIER-TE control plane and/or the multicast flow overlay as | |||
| explained in Section 3.1. | explained in Section 3.1. | |||
| 2. On BFR (including BFIR and BFER), forwarding/replication of BIER | 2. On BFRs (including BFIR and BFER), forwarding/replication of BIER | |||
| packets according to their BitString as explained below and | packets according to their SD, SI, "BitStringLength" (BSL), | |||
| optionally Entropy. Processing of other BIER header fields such | BitString and optionally Entropy fields as explained in | |||
| as DSCP is outside the scope of this document. | Section 4. Processing of other BIER header fields such as DSCP | |||
| is outside the scope of this document. | ||||
| 3. On BFER, removal of BIER header and dispatching of the payload | 3. On BFERs, removal of the BIER header and dispatching of the | |||
| according to state created by the BIER-TE control plane and/or | payload according to state created by the BIER-TE control plane | |||
| 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 Bit Index Forwarding Table (BIFT) that was populated by the BIER- | the BIFT that was populated by the BIER-TE Controller. For every BP | |||
| TE Controller. For every BP that is set in the BitString, and that | that is set in the BitString, and that has one or more adjacencies in | |||
| has one or more adjacencies in the BIFT, a copy is made according to | the BIFT, a copy is made according to the type of adjacencies for | |||
| the type of adjacencies for that BP in the BIFT. Before sending any | that BP in the BIFT. Before sending any copy, the BFR clears all BPs | |||
| copy, the BFR clears all BPs in the BitString of the packet for which | in the BitString of the packet for which the BFR has one or more | |||
| the BFR has one or more adjacencies in the BIFT, except when the | adjacencies in the BIFT. Clearing these bits inhibits packets from | |||
| adjacency indicates "DoNotClear" (DNC, see Section 4.2.1). This is | looping when the BitStrings erroneously includes a forwarding loop. | |||
| done to inhibit that packets can loop. Because DNC raises the risk | When a forward_connected() adjacency has the "DoNotClear" (DNC) flag | |||
| of packets looping with inmakes it easier to | set, then this BP is re-set for the packet copied to that adjacency. | |||
| See 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 is sending BIER packets | |||
| to directly connected BIER-TE neighbors as L2 (unicasted) BIER | to directly connected BIER-TE neighbors as L2 (unicasted) BIER | |||
| packets without requiring a routing underlay. For forward_routed() | packets 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 the adjacency definition. | |||
| 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. This commonly | |||
| relies on BIER specific extensions to the routing protocols of the | relies on BIER specific extensions to the routing protocols of the | |||
| routing underlay but may also be established by a controller. In | 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 of 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 BFER 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 BFD. | |||
| skipping to change at page 17, line 16 ¶ | skipping to change at page 18, line 20 ¶ | |||
| are out of scope of this document. | are out of scope of 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 it operates on. The resource usage of the BIER-TE traffic | |||
| admitted by the BIER-TE controller can be solely tracked on the BIER- | admitted by the BIER-TE controller can be solely tracked on the BIER- | |||
| TE Controller based on local accounting as long as no | 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.1 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 on the forwarding plane beyond | |||
| skipping to change at page 17, line 39 ¶ | skipping to change at page 18, line 43 ¶ | |||
| 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 Bit Index Forwarding Table (BIFT) | 4.1. The BIER-TE Bit Index Forwarding Table (BIFT) | |||
| The Bit Index Forwarding Table (BIFT) exists in every BFR. For every | The BIER-TE BIFT is the equivalent to the BIER BIFT for (non-TE) | |||
| sub-domain in use, it is a table indexed by SI:bit position and is | BIER. It exists on every BFR running BIER-TE. For every BIER sub- | |||
| populated by the BIER-TE control plane. Each index can be empty or | domain (SD) in use for BIER-TE, it is a table as shown shown in | |||
| contain a list of one or more adjacencies. | Figure 4. That example BIFT assumes a BSL of 8 bit positions (BPs) | |||
| in the packets BitString. As in [RFC8279] this BSL is purely used | ||||
| for the example and not a BIER/BIER-TE supported BSL (minimum BSL is | ||||
| 64). | ||||
| Like BIER, BIER-TE can support multiple sub-domains, each with a | A BIER-TE BIFT compares to a BIER BIFT as shown in [RFC8279] as | |||
| separate BIFT. | follows. | |||
| In [RFC8279], Figure 2, indices into the BIFT are both SI:BitString | In both BIER and BIER-TE, BIFT rows/entries are indexed in their | |||
| and BFR-id, where BitString is indicating a BP: BFR-id = SI * 2^BSL + | respective BIER pseudocode ([RFC8279] Section 6.5) and BIER-TE | |||
| BP. As shown in Figure 4, in BIER-TE, only SI:BP are used as indices | pseudocode (Section 4.4) by the BIFT-index derived from the packets | |||
| into a BIFT because they identify adjacencies and not BFR. | 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 | ||||
| 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 | ||||
| to indicate BIFT rows, [RFC8279] uses the equivalent notion | ||||
| SI:BitString, where the BitString is filled with only the BP for the | ||||
| BIFT row. | ||||
| In BIER, each BIFT-index addresses one BFER by its BFR-id = BIFT- | ||||
| index + 1 and is populated on each BFR with the next-hop "BFR | ||||
| Neighbor" (BFR-NBR) towards that BFER. | ||||
| In BIER-TE, each BIFT-index and therefore SI:BP indicates one or more | ||||
| adjacencies between BFRs in the topology and is only populated with | ||||
| those adjacencies forwarding entries on the BFR that is the upstream | ||||
| for these adjacencies. The BIFT entry are empty on all other BFRs. | ||||
| In BIER, each BIFT rows also requires a "Forwarding Bit Mask" (F-BM) | ||||
| entry for BIER forwarding rules. In BIER-TE forwarding, F-BM is not | ||||
| required, but can be used when implementing BIER-TE on forwarding | ||||
| hardware derived from BIER forwarding, that must use F-BM. This is | ||||
| discussed in the first BIER-TE forwarding pseudocode in Section 4.4. | ||||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | Index: | Adjacencies: | | | BIFT-index | | Adjacencies: | | |||
| | SI:bit position | <empty> or one or more per entry | | | (SI:BP) |(FBM)| <empty> or one or more per entry | | |||
| ================================================================== | ================================================================== | |||
| | 0:1 | forward_connected(interface,neighbor{,DNC}) | | | BIFT indices for Packets with SI=0 | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:2 | forward_connected(interface,neighbor{,DNC}) | | | 0 (0:1) | ... | forward_connected(interface,neighbor{,DNC}) | | |||
| | | forward_connected(interface,neighbor{,DNC}) | | ||||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:3 | local_decap({VRF}) | | | 1 (0:2) | ... | forward_connected(interface,neighbor{,DNC}) | | |||
| | | ... | forward_connected(interface,neighbor{,DNC}) | | ||||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:4 | forward_routed({VRF,}l3-neighbor) | | | ... | ... | ... | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:5 | <empty> | | | 4 (0:5) | ... | local_decap({VRF}) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| | 0:6 | ECMP({adjacency1,...adjacencyN}, seed) | | | 5 (0:6) | ... | forward_routed({VRF,}l3-neighbor) | | |||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| ... | | 6 (0:7) | ... | <empty> | | |||
| | BitStringLength | ... | | ||||
| ------------------------------------------------------------------ | ------------------------------------------------------------------ | |||
| Bit Index Forwarding Table | | 7 (0:8) | ... | ECMP((adjacency1,...adjacencyN){,seed}) | | |||
| ----------------------------------------------------------------- | ||||
| | BIFT indices for BitString/Packet with SI=1 | | ||||
| ------------------------------------------------------------------ | ||||
| | 9 (1:1) | | ... | | ||||
| | ... |... | ... | | ||||
| ------------------------------------------------------------------ | ||||
| BIER-TE Bit Index Forwarding Table (BIFT) | ||||
| Figure 4: BIFT adjacencies | Figure 4: BIER-TE BIFT with different adjacencies | |||
| The BIFT is programmed into the data plane of BFRs by the BIER-TE | The BIFT is configured for the BIER-TE data plane of a BFR by the | |||
| Controller and used to forward packets, according to the rules | BIER-TE Controller through an appropriate protocol and data-model. | |||
| The BIFT is then used to forward packets, according to the rules | ||||
| specified in the BIER-TE Forwarding Procedures. | specified in the BIER-TE Forwarding Procedures. | |||
| 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. See Section 5.1.6 for an example of how a BIER-TE | than one BFR to save BPs. See Section 5.1.6 for an example of how a | |||
| controller could assign BPs to (logical) adjacencies shared across | BIER-TE controller could assign BPs to (logical) adjacencies shared | |||
| multiple BFRs, Section 5.1.3 for an example of assigning the same BP | across multiple BFRs, Section 5.1.3 for an example of assigning the | |||
| to different adjacencies, and Section 5.1.9 for guidelines regarding | same BP to different adjacencies, and Section 5.1.9 for general | |||
| re-use of BPs across different adjacencies. | guidelines regarding re-use 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 towards a directly connected BFR | |||
| neighbor using an interface address of that BFR on the connecting | neighbor using an interface address of that BFR on the connecting | |||
| interface. A forward_connected() adjacency does not route packets | interface. A forward_connected() adjacency does not route packets | |||
| but only L2 forwards them to the neighbor. | but 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 the 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 from 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 type of adjacencies | |||
| was identified and their risk was not analyzed. | was identified and their risk was not analyzed. | |||
| 4.2.2. Forward Routed | 4.2.2. Forward Routed | |||
| A "forward_routed" adjacency is an adjacency towards a BFR that uses | A "forward_routed()" adjacency is an adjacency towards a BFR that | |||
| a (tunneling) encapsulation which will cause the packet to be | uses a (tunneling) encapsulation which will cause the packet to be | |||
| forwarded by the routing underlay toward the adjacent BFR. This can | forwarded by the routing underlay toward the adjacent BFR. This can | |||
| leverage any feasible encapsulation, such as MPLS or tunneling over | leverage any feasible encapsulation, such as MPLS or tunneling over | |||
| IP/IPv6, as long as the BIER-TE packet can be identified as a | IP/IPv6, as long as the BIER-TE packet can be identified as a | |||
| payload. This identification can either rely on the BIER/BIER-TE co- | payload. This identification can either rely on the BIER/BIER-TE co- | |||
| existence mechanisms described in Section 4.3, or by explicit support | existence mechanisms described in Section 4.3, or by explicit support | |||
| for a BIER-TE payload type in the tunneling encapsulation. | 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 non BIER-TE capable routers or to minimize the number of | |||
| required BP by tunneling over (BIER-TE capable) routers on which | required BP 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 path redundancy and FRR of the routing underlay 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 to | |||
| leverage the routing underlay ECMP independent of BIER-TE ECMP | leverage the routing underlay ECMP independent 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 | |||
| are therefore not directly usable with BIER-TE. | is therefore not directly usable with BIER-TE. | |||
| A BIER-TE "Equal Cost Multipath" (ECMP) adjacency has a list of two | A BIER-TE "Equal Cost Multipath" (ECMP()) adjacency as shown in | |||
| or more non-ECMP adjacencies and a seed parameter. When a BIER-TE | Figure 4 for BIFT-index 7 has a list of two or more non-ECMP | |||
| packet is copied onto such an ECMP adjacency, an implementation | adjacencies as parameters and an optional seed parameter. When a | |||
| specific so-called hash function will select one out of the list's | BIER-TE packet is copied onto such an ECMP() adjacency, an | |||
| adjacencies to which the packet is forwarded. This ECMP hash | implementation specific so-called hash function will select one out | |||
| function MUST select the same adjacency from that list for all | of the list's adjacencies to which the packet is forwarded. If the | |||
| packets with the same entropy parameter. The seed parameter allows | packet's encapsulation contains an entropy field, the entropy field | |||
| to design hash functions that are easy to implement at high speed | SHOULD be respected; two packets with the same value of the entropy | |||
| without running into polarization issues across multiple consecutive | field SHOULD be sent on the same adjacency. The seed parameter | |||
| ECMP hops. See Section 5.1.7 for more explanations. | allows to design hash functions that are easy to implement at high | |||
| speed without running into polarization issues across multiple | ||||
| consecutive ECMP hops. See Section 5.1.7 for more explanations. | ||||
| 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-TE | A "local_decap()" adjacency passes a copy of the payload of the BIER- | |||
| packet to the protocol ("NextProto") within the BFR (IPv4/IPv6, | TE packet to the protocol ("NextProto") within the BFR (IPv4/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 packet. | |||
| 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) | ||||
| limitations is outside the scope of this document and instead part of | ||||
| the BIER-TE packet encapsulation and/or flow overlay. See for | ||||
| example [RFC8296], Section 3. It applies equally to BIER-TE as it | ||||
| does to 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 from BIER-TE packets. In the 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 BIFT and BIER-TE | |||
| BIFT. Partitioning the BIFT-id address space is subject to BIER-TE/ | BIFT. 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 BIFT. This allows to also allocate non- | |||
| overlapping label ranges for BIFT-id that are to be used with BIER-TE | overlapping label ranges for BIFT-id that are to be used with BIER-TE | |||
| BIFTs. | 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 and | BIER-TE and BIER, so that the same SD has both a BIER BIFT with a | |||
| corresponding range of BIFT-ids and a disjoint BIER-TE BIFT and non- | corresponding range of BIFT-ids and disjoint BIER-TE BIFTs with a | |||
| overlapping range of BIFT-ids. | non-overlapping range of BIFT-ids. | |||
| When a fixed mapping from BSL, SD, SI is used without specifically | When a fixed mapping from BSL, SD and SI to BIFT-id is used which | |||
| distinguishing BIER and BIER-TE, such as proposed for non-MPLS | does not explicitly partition the BIFT-id space between BIER and | |||
| forwarding with [RFC8296] in [I-D.ietf-bier-non-mpls-bift-encoding] | BIER-TE, such as proposed for non-MPLS forwarding with [RFC8296] | |||
| revision 04, section 5., then it is necessary to allocate disjoint | encapsulation in [I-D.ietf-bier-non-mpls-bift-encoding] revision 04, | |||
| SDs to BIER and BIER-TE BIFT so that both can be addressed by the | section 5, then it is necessary to allocate disjoint SDs to BIER and | |||
| BIFT-ids. The encoding proposed in section 6. of the same document | BIER-TE BIFTs so that both can be addressed by the BIFT-ids. The | |||
| does not statically encode BSL or SD into the BIFT-id, but allows for | encoding proposed in section 6. of the same document does not | |||
| a mapping, and hence could provide for the same freedom as when MPLS | statically encode BSL or SD into the BIFT-id, but allows for a | |||
| is being used (same or different SD for BIER/BIER-TE). | mapping, and hence could provide for the same freedom as when MPLS is | |||
| being used (same or different SD for BIER/BIER-TE). | ||||
| "forward_routed" requires an encapsulation that permits to direct | forward_routed() requires an encapsulation that permits to direct | |||
| 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 addresses 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 e.g. MPLS label stacks or appropriate header extensions | |||
| (e.g. for IPv6). | (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 following pseudocode, Figure 5, for BIER-TE forwarding is based | |||
| on the (non-TE) BIER forwarding pseudocode of [RFC8279], section 6.5 | on the (non-TE) BIER forwarding pseudocode of [RFC8279], section 6.5 | |||
| with one modification. | with one modification. | |||
| skipping to change at page 22, line 23 ¶ | skipping to change at page 24, line 25 ¶ | |||
| PacketCopy is sent to that BFR-NBR ([1]). Likewise, the PacketCopy | PacketCopy is sent to that BFR-NBR ([1]). Likewise, the PacketCopy | |||
| sent to a BFR-NBR must clear all bits in its BitString that are not | sent to a BFR-NBR must clear all bits in its BitString that are not | |||
| routed across BFR-NBR. This protects against BIER replication on any | routed across BFR-NBR. This protects against BIER replication on any | |||
| possible further BFR to create duplicates ([2]). | possible further BFR to create duplicates ([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 BFR-NBR. [2] | |||
| clears all other bits in PacketCopy->BitString, and [1] clears those | clears all other bits in PacketCopy->BitString, and [1] clears those | |||
| bits from Packet->BitString after the first PacketCopy. | bits from Packet->BitString after the first PacketCopy. | |||
| In BIER-TE, a BFR-NBR is an adjacency, forward_connected, | In BIER-TE, a BFR-NBR in this pseudocode is an adjacency, | |||
| forward_routed or local_decap. There is no need for [2] to suppress | forward_connected(), forward_routed() or local_decap(). There is no | |||
| duplicates in the way BIER does because in general, different BP | need for [2] to suppress duplicates in the way BIER does because in | |||
| would never have the same adjacency. If a BIER-TE controller | general, different BP would never have the same adjacency. If a | |||
| actually finds some optimization in which this would be desirable, | BIER-TE controller actually finds some optimization in which this | |||
| then the controller is also responsible to ensure that only one of | would be desirable, then the controller is also responsible to ensure | |||
| those bits is set in any Packet->BitString, unless the controller | that only one of those bits is set in any Packet->BitString, unless | |||
| explicitly wants for duplicates to be created. | the controller explicitly wants for duplicates to be created. | |||
| For BIER-TE, F-BM is handled as follows: | The following points describe how the forwarding bit mask (F-BM) for | |||
| each BP is configured in the BIFT and how this impacts the BitString | ||||
| of the packet being processed with that BIFT: | ||||
| 1. The F-BM of all bits without an adjacency has all bits clear. | 1. The F-BMs of all BIFT BPs without an adjacency have all their | |||
| This will cause [3] to skip further processing of such a bit. | bits clear. This will cause [3] to skip further processing of | |||
| such a BP. | ||||
| 2. All bits with an adjacency (with DNC flag clear) have an F-BM | 2. All BIFT BPs with an adjacency (with DNC flag clear) have an F-BM | |||
| that has only those bits set for which this BFR does not have an | that has only those BPs set for which this BFR does not have an | |||
| adjacency. This causes [2] to clear all bits from | 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.6), forward_connected, | forwarding functions (see Section 4.6), forward_connected(), | |||
| forward_routed() and local decap, but not the RECOMMENDED functions | forward_routed() and local_decap(), but not the recommended functions | |||
| DNC flag and multiple adjacencies per bit nor the OPTIONAL function, | DNC flag and multiple adjacencies per bit nor the optional function, | |||
| ECMP adjacencies. The DNC flag cannot be supported when using only | ECMP() adjacencies. The DNC flag cannot be supported when using only | |||
| [1] to mask bits. | [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 | * This pseudocode eliminates per-bit F-BM, therefore reducing the | |||
| size of BIFT state by BitStringLength^2*SI and eliminating the | size of BIFT state by BSL^2*SI and eliminating the need for per- | |||
| need for per-packet-copy masking operation except for adjacencies | packet-copy BitString masking operations except for adjacencies | |||
| with the DNC flag set: | with the DNC flag set: | |||
| - AdjacentBits[SI] are bits with a non-empty list of adjacencies. | - AdjacentBits[SI] are bit positions with a non-empty list of | |||
| This can be computed whenever the BIER-TE Controller updates | adjacencies in this BFR BIFT. This can be computed whenever | |||
| the adjacencies. | the BIER-TE Controller updates (add/removes) adjacencies in the | |||
| BIFT. | ||||
| - Only the AdjacentBits need to be examined in the loop for | ||||
| packet copies. | ||||
| - The packet's BitString is masked with those AdjacentBits before | - The BFR needs to create packet copies for these adjacent bits | |||
| the loop to avoid doing this repeatedly for every PacketCopy. | when they are set in the packets BitString. This set of bits | |||
| is calculated in PktAdjacentBits. | ||||
| * The code loops over the adjacencies because there may be more than | - All bit positions to which the BFR creates copies have to be | |||
| one adjacency for a bit. | cleared in packet copies to avoid loops. This is done by | |||
| masking the BitString of the packet with ~AdjacentBits[SI]. | ||||
| When an adjacency has DNC set, this bit position is set again | ||||
| only for the packet copy towards that bit position. | ||||
| * When an adjacency has the DNC bit, the bit is set in the packet | * BIFT entries may contain more than one adjacency in support of | |||
| copy (to save bits in rings for example). | specific configurations such as Section 5.1.5. The code therefore | |||
| includes a loop over these adjacencies. | ||||
| * The ECMP adjacency is shown. Its parameters are a | * The ECMP() adjacency is shown. Its parameters are a seed and a | |||
| ListOfAdjacencies from which one is picked. | ListOfAdjacencies from which one is picked. | |||
| * The forward_local, forward_routed, local_decap() adjacencies are | * The forward_connected(), forward_routed(), local_decap() | |||
| 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; | |||
| // Set variable for looping across only adjacent bits | // Determine adjacent bits in the Packets BitString | |||
| AdjacentBits = Packet->BitString & ~AdjacentBits[SI]; | PktAdjacentBits = Packet->BitString & AdjacentBits[SI]; | |||
| // Clear adjacent bits in Packet header to avoid loops | // Clear adjacent bits in Packet header to avoid loops | |||
| Packet->BitString &= ~AdjacentBits[SI]; | Packet->BitString &= ~AdjacentBits[SI]; | |||
| for (Index = GetFirstBitPosition(AdjacentBits); Index ; | ||||
| Index = GetNextBitPosition(AdjacentBits, Index)) { | // Loop over PktAdjacentBits to create packet copies | |||
| foreach adjacency BIFT[Index+Offset] { | for (Index = GetFirstBitPosition(PktAdjacentBits); Index ; | |||
| if(adjacency == ECMP(ListOfAdjacencies, seed) ) { | Index = GetNextBitPosition(PktAdjacentBits, Index)) { | |||
| for adjacency in BIFT[Index+Offset]->Adjacencies { | ||||
| 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]; | |||
| } | } | |||
| PacketCopy = Copy(Packet); | PacketCopy = Copy(Packet); | |||
| switch(adjacency.type) { | switch(adjacency.type) { | |||
| case forward_connected(interface,neighbor,DNC): | case forward_connected(interface,neighbor,DNC): | |||
| if(adjacency.DNC) | if(DNC) | |||
| PacketCopy->BitString |= 1<<(Index-1); | PacketCopy->BitString |= 1<<(Index-1); | |||
| SendToL2Unicast(PacketCopy,interface,neighbor); | SendToL2Unicast(PacketCopy,interface,neighbor); | |||
| case forward_routed({VRF},l3-neighbor): | case forward_routed({VRF,}l3-neighbor): | |||
| SendToL3(PacketCopy,{VRF,}l3-neighbor); | SendToL3(PacketCopy,{VRF,}l3-neighbor); | |||
| case local_decap({VRF},neighbor): | case local_decap({VRF},neighbor): | |||
| DecapBierHeader(PacketCopy); | DecapBierHeader(PacketCopy); | |||
| PassTo(PacketCopy,{VRF,}Packet->NextProto); | PassTo(PacketCopy,{VRF,}Packet->NextProto); | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| 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. Basic BIER-TE Forwarding Example | 4.5. Basic BIER-TE Forwarding Example | |||
| [RFC Editor: remove this section.] | [RFC Editor: remove this section.] | |||
| THIS SECTION TO BE REMOVED IN RFC BECAUSE IT WAS SUPERCEEDED BY | THIS SECTION TO BE REMOVED IN RFC BECAUSE IT WAS SUPERSEDED BY | |||
| SECTION 1.1 EXAMPLE - UNLESS REVIEWERS CHIME IN AND EXPRESS DESIRE TO | SECTION 1.1 EXAMPLE - IN CASE FINAL REVIES FIND A GOOD REASON TO KEEP | |||
| KEEP THIS ADDITIONAL EXAMPLE SECTION. ALVARO RETANA DID NOT MIND | IT, BUT DOESN'T SEEM TO SHOW IMPORTANT NEW STUFF OVER INITIAL | |||
| ANOTHER EXAMPLE. | EXAMPLES. | |||
| Step by step example of basic BIER-TE forwarding. This example does | Step-by-step example of basic BIER-TE forwarding. This example does | |||
| not use ECMP or forward_routed() adjacencies nor does it try to | not use ECMP() or forward_routed() adjacencies nor does it try to | |||
| minimize the number of required BitPositions for the topology. | minimize the number of required BitPositions for the topology. | |||
| [BIER-TE Controller] | [BIER-TE Controller] | |||
| / | \ | / | \ | |||
| v v v | v v v | |||
| . . | . . | |||
| | p13 p1 | . | | p13 p1 | . | |||
| +- BFIR2 --+ | . | +- BFIR2 --+ | . | |||
| | . | p2 p6 | . LAN2 | | . | p2 p6 | . LAN2 | |||
| | . +-- BFR3 --+ . | | | . +-- BFR3 --+ . | | |||
| skipping to change at page 26, line 36 ¶ | skipping to change at page 28, line 36 ¶ | |||
| BitString. The BIFT of BFIR2 has only p2 and p13 populated. Only p2 | BitString. The BIFT of BFIR2 has only p2 and p13 populated. Only p2 | |||
| is in the BitString and this is an adjacency towards BFR3. BFIR2 | is in the BitString and this is an adjacency towards BFR3. BFIR2 | |||
| therefore clears p2 in the BitString and sends a copy towards BFR2. | therefore clears p2 in the BitString and sends a copy towards BFR2. | |||
| BFR3 sees a BitString of p5,p7,p8,p10,p11,p12. For those BPs, it has | BFR3 sees a BitString of p5,p7,p8,p10,p11,p12. For those BPs, it has | |||
| only adjacencies for p7,p8. It creates a copy of the packet to BFER1 | only adjacencies for p7,p8. It creates a copy of the packet to BFER1 | |||
| (due to p7) and one to BFR4 (due to p8). It clears both p7 and p8 | (due to p7) and one to BFR4 (due to p8). It clears both p7 and p8 | |||
| before sending. | before sending. | |||
| BFER1 sees a BitString of p5,p10,p11,p12. For those BPs, it only has | BFER1 sees a BitString of p5,p10,p11,p12. For those BPs, it only has | |||
| an adjacency for p11. p11 is a "local_decap" adjacency installed by | an adjacency for p11. p11 is a local_decap() adjacency installed by | |||
| the BIER-TE Controller to receive a copy of the BIER packet - dispose | the BIER-TE Controller to receive a copy of the BIER packet - dispose | |||
| of the BIER header and pass the payload to IP multicast. IP | of the BIER header and pass the payload to IP multicast. IP | |||
| multicast will then forward the packet out to LAN2 because it did | multicast will then forward the packet out to LAN2 because it did | |||
| receive PIM or IGMP joins on LAN2 for the traffic. | receive PIM or IGMP joins on LAN2 for the traffic. | |||
| Further processing of the packet in BFR4, BFR5 and BFER2 accordingly. | Further processing of the packet in BFR4, BFR5 and BFER2 accordingly. | |||
| 4.6. BFR Requirements for BIER-TE forwarding | 4.6. BFR Requirements for BIER-TE forwarding | |||
| BFR MUST support to configure the BIFT of sub-domains so that they | BFR that support BIER-TE and BIER MUST support configuration that | |||
| use BIER-TE forwarding rules instead of (non-TE) BIER forwarding | enables BIER-TE instead of (non-TE) BIER forwarding rules for all | |||
| rules. Every BP in the BIFT MUST support to have zero or one | BIFT of one or more BIER sub-domains. Every BP in a BIER-TE BIFT | |||
| adjacency. Forwarding MUST support the adjacency types | MUST support to have zero or one adjacency. BIER-TE forwarding MUST | |||
| forward_connected() with clear DNC flag, forward_routed() and | support the adjacency types forward_connected() with the DNC flag not | |||
| local_decap. As explained in Section 4.4, these REQUIRED BIER-TE | set, forward_routed() and local_decap(). As explained in | |||
| forwarding functions can be implemented via the same Forwarding | Section 4.4, these required BIER-TE forwarding functions can be | |||
| Pseudocode as BIER forwarding except for one modification (skipping | implemented via the same Forwarding Pseudocode as BIER forwarding | |||
| one masking with F-BM). | except for one modification (skipping one masking with 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 a set DNC flag, as this is highly useful to save bits in rings | |||
| (see Section 5.1.6). | (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&spoke scenarios (see Section 5.1.5). | This allows to save bits in hub and spoke scenarios (see | |||
| Section 5.1.5). | ||||
| BIER-TE forwarding MAY support ECMP adjacencies to save bits in ECMP | BIER-TE forwarding MAY support ECMP() adjacencies to save bits in | |||
| scenarios, see Section 5.1.7 for an example. This is a MAY | ECMP scenarios, see Section 5.1.7 for an example. This is an | |||
| requirement, because the deployment importance of ECMP adjacencies | optional requirement, because for ECMP deployments using BIER-TE one | |||
| for BIER-TE is unclear as one can also leverage ECMP of the routing | can also leverage ECMP of the routing underlay via forwarded_routed | |||
| underlay via forwarded_routed adjacencies and/or might prefer to have | adjacencies and/or might prefer to have more explicit control of the | |||
| more explicit control of the path chosen via explicit BP/adjacencies | path chosen via explicit BP/adjacencies for each ECMP path | |||
| 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 exist to support larger | |||
| topologies with fewer bit positions (4.1, 4.3, 4.4, 4.5, 4.6, 4.7, | topologies with fewer bit positions. | |||
| 4.8). | ||||
| 5.1.1. P2P Links | 5.1.1. P2P Links | |||
| On a P2P link that connects two BFR, the same bit position can be | On a P2P link that connects two BFRs, the same bit position can be | |||
| used on both BFR for the adjacency to the neighboring BFR. A P2P | used on both BFRs for the adjacency to the neighboring BFR. A P2P | |||
| link requires therefore only one bit position. | link requires therefore only one bit position. | |||
| 5.1.2. BFER | 5.1.2. BFER | |||
| Every non-Leaf BFER is given a unique bit position with a local_decap | Every non-Leaf BFER is given a unique bit position with a | |||
| adjacency. | local_decap() adjacency. | |||
| 5.1.3. Leaf BFERs | 5.1.3. Leaf BFERs | |||
| 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 10: Leaf vs. non-Leaf BFER Example | Figure 10: Leaf vs. non-Leaf BFER Example | |||
| A leaf BFERs is one where incoming BIER-TE packets never need to be | 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 | 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) | BIER-TE domain. For example, in networks where Provider Edge (PE) | |||
| router are spokes connected to Provider (P) routers, those PEs are | router are spokes connected to Provider (P) routers, those PEs are | |||
| Leaf BFERs unless there is a U-turn between two PEs. | Leaf BFERs unless there is a U-turn between two PEs. | |||
| Consider how redundant disjoint traffic can reach BFER1/BFER2 in | Consider how redundant disjoint traffic can reach BFER1/BFER2 in | |||
| Figure 10: When BFER1/BFER2 are Non-Leaf BFER as shown on the right | Figure 10: When BFER1/BFER2 are Non-Leaf BFER as shown on the right- | |||
| hand side, one traffic copy would be forwarded to BFER1 from BFR1, | 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 | 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 | 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 | traffic to BFER2. Note that the BFERs in the left-hand picture are | |||
| only guaranteed to be leaf-BFER by fitting routing configuration that | only guaranteed to be leaf-BFER by fitting routing configuration that | |||
| prohibits transit traffic to pass through the BFERs, which is | prohibits transit traffic to pass through the BFERs, which is | |||
| commonly applied in these topologies. | commonly applied in these topologies. | |||
| All leaf-BFERs in a BIER-TE domain can share a single bit position. | In most situations, leaf-BFER that are to be addressed via the same | |||
| This is possible because the bit position for the adjacency to reach | BitString can share a single bit position for their local_decap() | |||
| the BFER can be used to distinguish whether or not packets should | adjacency in that BitString and therefore save bit positions. On a | |||
| reach the BFER. | 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 | ||||
| decapsulate the packet therefore needs to be indicated by a unique | ||||
| bit position populated only on the BIFT of this BFER with a | ||||
| local_decap() adjacency. On a leaf-BFER, packets never need to pass | ||||
| through; any packet received is therefore usually intended to be | ||||
| decapsulated. This can be expressed by a single, shared bit position | ||||
| that is populated with a local_decap() adjacency on all leaf-BFER | ||||
| addressed by the BitString. | ||||
| This optimization will not work if an upstream interface of the BFER | The possible exception from this leaf-BFER bit position optimization | |||
| is using a bit position optimized as described in the following two | can be cases where the bit position on the prior BIER-TE BFR (which | |||
| sections (LAN, Hub and Spoke). | created the packet copy for the leaf-BFER in question) is populated | |||
| with multiple adjacencies as an optimization, such as in | ||||
| Section 5.1.4 or Section 5.1.5. With either of these two | ||||
| optimizations, the sender of the packet could only control explicitly | ||||
| whether the packet was to be decapsulated on the leaf-BFER in | ||||
| question, if the leaf-BFER has a unique bit position for its | ||||
| local_decap() adjacency. | ||||
| However, if the bit position is shared across leaf-BFER, and packets | ||||
| are therefore decapsulated potentially unnecessarily, this may still | ||||
| be appropriate if the decapsulated payload of the BIER-TE packet does | ||||
| indicate whether or not the packet needs to be further processed/ | ||||
| received. This is typically true for example if the payload is IP | ||||
| multicast because IP multicast on a BFER would know the membership | ||||
| state of the IP multicast payload and be able to discard it if the | ||||
| packet was delivered unnecessarily by the BIER-TE layer. If the | ||||
| payload has no such membership indication, and the BFIR wants to have | ||||
| explicit control about which BFER are to receive and decapsulate a | ||||
| packet, then these two optimizations can not be used together with | ||||
| shared bit positions optimization for leaf-BFER. | ||||
| 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 11: LAN Example | Figure 11: 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 BFRs 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. | |||
| skipping to change at page 29, line 40 ¶ | skipping to change at page 32, line 19 ¶ | |||
| 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-BFER. | |||
| 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 traffic | |||
| is "broadcast" traffic (very dense receiver set) such as live-TV or | is "broadcast" traffic (very dense receiver set) such as live-TV or | |||
| situation-awareness (SA). This BP optimization can then be used to | many-to-many telemetry including situation-awareness (SA). This BP | |||
| explicitly steer different traffic flows across different ECMP paths | optimization can then be used to explicitly steer different traffic | |||
| in Data-Center or broadband-aggregation networks with minimal use of | flows across different ECMP paths in Data-Center or broadband- | |||
| BPs. | 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 12, a single bit position will suffice | For the rings shown in Figure 12, a single bit position will suffice | |||
| to forward traffic entering the ring at BFRa or BFRb all the way up | to forward traffic entering the ring at BFRa or BFRb all the way up | |||
| to BFR1: | to BFR1: | |||
| skipping to change at page 30, line 47 ¶ | skipping to change at page 33, line 23 ¶ | |||
| 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 ingress ring BFR creates the clockwise copy, it will clear | |||
| the counterclockwise bit position because the DNC bit only applies to | the counterclockwise bit position because the DNC bit only applies to | |||
| the bit for which the replication is done. Likewise for the | the bit for which the replication is done. Likewise for the | |||
| clockwise bit position for the counterclockwise copy. As a result, | clockwise bit position for the counterclockwise copy. As a result, | |||
| the ring ingress BFR will send a copy in both directions, serving | the ring ingress BFR will send a copy in both directions, serving | |||
| BFRs on either side of the ring up to L1. | BFRs on either side of the ring up to L1. | |||
| 5.1.7. Equal Cost MultiPath (ECMP) | 5.1.7. Equal Cost MultiPath (ECMP) | |||
| The ECMP adjacency allows to use just one BP per link bundle between | [RFC-Editor: A reviewer (Lars Eggert) noted that the infinite "to | |||
| two BFRs instead of one BP for each p2p member link of that link | use" in the following sentence is not correct. The same was also | |||
| bundle. In Figure 13, one BP is used across L1,L2,L3. | 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 | ||||
| one one of N adjacencies instead of one BP for each adjacency. In | ||||
| the common example case Figure 13, a link-bundle of three links | ||||
| L1,L2,L3 connects BFR1 and BFR2, and only one BP is used instead of | ||||
| three BP to deliver packets from 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 31, line 31 ¶ | skipping to change at page 34, line 31 ¶ | |||
| ================================================================== | ================================================================== | |||
| | 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 13: ECMP Example | Figure 13: 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. This allows the BIER-TE Controller to calculate ECMP | algorithm. Figure 14 shows an example ECMP algorithm, and would | |||
| paths and seeds. Figure 14 shows an example ECMP algorithm: | double as its documentation: A BIER-TE controller could determine | |||
| which adjacency is chosen based on the seed and adjacencies | ||||
| parameters and the 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 14: ECMP algorithm Example | Figure 14: ECMP algorithm Example | |||
| In the following example, all traffic from BFR1 towards BFR10 is | In the following example, all traffic from BFR1 towards BFR10 is | |||
| intended to be ECMP load split equally across the topology. This | intended to be ECMP load split equally across the topology. This | |||
| example is not meant as a likely setup, but to illustrate that ECMP | example is not meant as a likely setup, but to illustrate that ECMP | |||
| skipping to change at page 33, line 22 ¶ | skipping to change at page 36, line 22 ¶ | |||
| 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 2 adjacencies | |||
| given as parameters to the ECMP. It is link L11-to-BFR2. BFR2 | given as parameters to the ECMP. It is link L11-to-BFR2. BFR2 | |||
| performs again ECMP with two adjacencies on that subset of traffic | performs again ECMP with two adjacencies on that subset of traffic | |||
| using the same seed1, and will therefore again select the first of | using the same seed1, and will therefore again select the first of | |||
| its two adjacencies: L21-to-BFR4. And therefore L22 and BFR5 sees no | its two adjacencies: L21-to-BFR4. And therefore L22 and BFR5 sees no | |||
| traffic. Likewise for L31 and BFR6. | traffic. 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 the | |||
| re-use of the same hash function across multiple consecutive hops in | re-use of the same hash function across multiple consecutive hops in | |||
| topologies like these. To resolve this issue, the ECMP adjacency on | topologies like these. To resolve this issue, the ECMP() adjacency | |||
| BFR1 can be set up with a different seed2 than the ECMP adjacencies | on BFR1 can be set up with a different seed2 than the ECMP() | |||
| on BFR2/BFR3. BFR2/BFR3 can use the same hash because packets will | adjacencies on BFR2/BFR3. BFR2/BFR3 can use the same hash because | |||
| not sequentially pass across both of them. Therefore, they can also | packets will not sequentially pass across both of them. Therefore, | |||
| use the same BP 0:7. | they can also use the same BP 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 ability for it to control same/different path | |||
| selection across multiple consecutive ECMP hops. | selection 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 loose-hop selection. Forward_routed() | |||
| adjacencies can also allow to operate BIER-TE across intermediate hop | adjacencies can also allow to operate BIER-TE across intermediate hop | |||
| routers that do not support BIER-TE. | routers that do not support BIER-TE. | |||
| ............... | ............... | |||
| ...BFR1--... ...--L1-- BFR2... | ...BFR1--... ...--L1-- BFR2... | |||
| ... .Routers. ...--L2--/ | ... .Routers. ...--L2--/ | |||
| ...BFR4--... ...------ BFR3... | ...BFR4--... ...--L3-- BFR3... | |||
| ... ...--L4--/ | | ||||
| ............... | | ............... | | |||
| LO | LO | |||
| Network Area 1 | Network Area 1 | |||
| Figure 16: Forward Routed Adjacencies Example | Figure 16: Forward Routed Adjacencies Example | |||
| Assume the requirement in Figure 16 is to explicitly steer traffic | Assume the requirement in Figure 16 is to explicitly steer traffic | |||
| flows that have arrived at BFR1 or BFR4 via a shortest path in the | flows that have arrived at BFR1 or BFR4 via a path in the routing | |||
| routing underlay "Network Area 1" to one of the following three next | 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 | segments: (1) BFR2 via link L1, (2) BFR2 via link L2, or (3) via BFR3 | |||
| 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 | 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 non BIER-TE enabled nodes. | |||
| 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 BFR to minimize the | Bit positions can be re-used across multiple BFRs to minimize the | |||
| number of BP needed. This happens when adjacencies on multiple BFR | number of BP needed. This happens when adjacencies on multiple BFRs | |||
| use the DNC flag as described above, but it can also be done for non- | use the DNC flag as described above, but it can also be done for non- | |||
| DNC adjacencies. This section only discusses this non-DNC case. | DNC adjacencies. This section only discusses this non-DNC case. | |||
| Because BP are cleared when passing a BFR with an adjacency for that | Because BP are cleared when passing a BFR with an adjacency for that | |||
| BP, reuse of BP across multiple BFR does not introduce any problems | BP, reuse of BP across multiple BFRs does not introduce any problems | |||
| with duplicates or loops that do not also exist when every adjacency | with duplicates or loops that do not also exist when every adjacency | |||
| has a unique BP. Instead, the challenge when reusing BP is whether | has a unique BP. Instead, the challenge when reusing BP is whether | |||
| it allows to still achieve the desired Tree Engineering goals. | it allows to still achieve the desired Tree Engineering goals. | |||
| BP cannot be reused across two BFR that would need to be passed | 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. BP can be set across BFR that would (A) only | |||
| occur across different paths or (B) across different branches of the | occur across different paths or (B) across different branches of the | |||
| same tree. | same tree. | |||
| An example of (A) was given in Figure 15, where BP 0:7, BP 0:8 and BP | An example of (A) was given in Figure 15, where BP 0:7, BP 0:8 and BP | |||
| 0:9 are each reused across multiple BFRs because a single packet/path | 0:9 are each reused across multiple BFRs because a single packet/path | |||
| would never be able to reach more than one BFR sharing the same BP. | 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 the example was changed: BFR1 has no ECMP() adjacency for BP | |||
| 0:6, but instead BP 0:5 with forward_connected() to BFR2 and BP 0:6 | 0:6, but instead BP 0:5 with forward_connected() to BFR2 and BP 0:6 | |||
| with forward_connected() to BFR3. Packets with both BP 0:5 and BP | with forward_connected() to BFR3. Packets with both BP 0:5 and BP | |||
| 0:6 would now be able to reach both BFR2 and BFR3 and the still | 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 re-use of BP 0:7 between BFR2 and BFR3 is a case of (B) | |||
| where reuse of BP is perfect because it does not limit the set of | where reuse of BP is perfect because it does not limit the set of | |||
| useful path choices: | useful path choices: | |||
| 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 where undesirable, this would be | |||
| done by not setting BP 0:5 and BP 0:6 for the same packet. If the | done 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 where 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. | |||
| area1 | area1 | |||
| BFR1a BFR1b | BFR1a BFR1b | |||
| / \ | / \ | |||
| .................................... | .................................... | |||
| . Core . | . Core . | |||
| skipping to change at page 36, line 35 ¶ | skipping to change at page 39, line 29 ¶ | |||
| * A hub with p2p connections to multiple non-leaf-BFER spokes can | * 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 to all spokes if traffic can be flooded to all | |||
| spokes, e.g.: because of no bandwidth concerns or dense receiver | spokes, e.g.: because of no bandwidth concerns or dense receiver | |||
| sets (Section 5.1.5). | sets (Section 5.1.5). | |||
| * Rings of BFR can be built with just two BP (one for each | * Rings of BFR can be built with just two BP (one for each | |||
| direction) except for BFR with multiple ring connections - similar | direction) except for BFR with multiple ring connections - similar | |||
| to LANs (Section 5.1.6). | to LANs (Section 5.1.6). | |||
| * ECMP adjacencies to N neighbors can replace N BP with 1 BP. | * ECMP() adjacencies to N neighbors can replace N BP with 1 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 | * Forward_routed() adjacencies allow to "tunnel" across non-BIER-TE | |||
| capable routers and across BIER-TE capable routers where no | capable routers and across BIER-TE capable routers 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 | * BP can generally be reused across a set of nodes where it can be | |||
| guaranteed that no path will ever need to traverse more than one | guaranteed that no path will ever need to traverse more than one | |||
| node of the set. Depending on scenario, this may limit the | node of the set. Depending on scenario, this may limit the | |||
| feasible path steering options (Section 5.1.9). | feasible path steering options (Section 5.1.9). | |||
| Note that the described list of optimizations is not exhaustive. | Note that the described list of optimizations is not exhaustive. | |||
| Especially when the set of required path steering choices is limited | Especially when the set of required path steering choices is limited | |||
| and the set of possible subsets of BFERs that should be able to | and the set of possible subsets of BFERs that should be able to | |||
| receive traffic is limited, further optimizations of BP are possible. | receive traffic is limited, further optimizations of BP are possible. | |||
| The hub & spoke optimization is a simple example of such traffic | The hub and spoke optimization is a simple example of such traffic | |||
| pattern dependent optimizations. | pattern dependent 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 inhibits looping of packets. The only | |||
| exception are adjacencies with DNC set. | exception are adjacencies with DNC set. | |||
| v v | v v | |||
| | | | | | | |||
| L1 | L2 | L3 | L1 | L2 | L3 | |||
| skipping to change at page 40, line 9 ¶ | skipping to change at page 42, line 49 ¶ | |||
| 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 BFER 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 because it depends on the physical topology, and | |||
| on the desire of the operator to allow for explicit path steering | on the desire of the operator to allow for explicit path steering | |||
| across every single hop (which requires more bits), or reducing the | across every single hop (which requires more bits), or reducing the | |||
| number of required bits by exploiting optimizations such as unicast | number of required bits by exploiting optimizations such as unicast | |||
| (forward_routed), ECMP or flood (DNC) over "uninteresting" sub-parts | (forward_routed()), ECMP() or flood (DNC) over "uninteresting" sub- | |||
| of the topology - e.g. parts where different trees do not need to | parts of the topology - e.g. parts where different trees do not need | |||
| take different paths due to path steering reasons. | to take different paths due to path steering reasons. | |||
| 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 BIER-TE overhead without additional benefit, but instead that | just BIER-TE overhead without additional benefit, but instead that | |||
| they will allow to express desirable path steering alternatives. | they will allow to express desirable path steering alternatives. | |||
| 5.3.3. Assigning BFR-id with BIER-TE | 5.3.3. Assigning BFR-id with BIER-TE | |||
| BIER-TE forwarding does not use the BFR-id, nor does it require for | BIER-TE forwarding does not use the BFR-id, nor does it require for | |||
| the BFR-id field of the BIER header to be set to a particular value. | the BFIR-id field of the BIER header to 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 overlay signaling, and in that case BFR need to also | specifically multicast flow overlay signaling and multicast flow | |||
| have BFR-ids for BIER-TE SDs. | overlay packet disposition, and in that case BFRs need to also have | |||
| BFR-ids for BIER-TE SDs. | ||||
| For example, for BIER overlay signaling, BFIR 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 BFR-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 = BSL * SI + 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 but only 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 equally be determined as in BIER: BFR-id = | such a BFER can therefore be determined using the same procedure as | |||
| SI * BitStringLength + BP. | in (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, BFIR who are not also BFER may not | local_decap() adjacency. Likewise, BFIRs that are not also BFERs may | |||
| have a unique local_decap() adjacency either. For all those BFIR and | not have a unique local_decap() adjacency either. For all those | |||
| (leaf) BFER, the controller needs to determine unique BFR-ids that do | BFIRs and (leaf) BFERs, the controller needs to determine unique BFR- | |||
| not collide with the BFR-ids derived from the non-leaf BFER | ids that do not collide with the BFR-ids derived from the non-leaf | |||
| local_decap() BPs. | BFER local_decap() BPs. | |||
| While this document defines no requirements how to allocate such BFR- | While this document defines no requirements on how to allocate such | |||
| id, a simple option is to derive it from the (SI,BP) of an adjacency | BFR-id, a simple option is to derive it from the (SI,BP) of an | |||
| that is unique to the BFR in question. For a BFIR this can be he | adjacency that is unique to the BFR in question. For a BFIR this can | |||
| first adjacency only populated on this BFIR, for a leaf-BFER, this | be the first adjacency only populated on this BFIR, for a leaf-BFER, | |||
| could be the first BP with an adjacency towards that 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 BFR 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 BFER | 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 how | overlays. This section outlines two core options, based on what type | |||
| "complex" the Tree Engineering is that the BIER-TE controller | of Tree Engineering the BIER-TE controller needs to performs for a | |||
| performs 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 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 BFER, 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 BIFR can | |||
| then independently of the controller calculate the SI:BitString for | then independently of the controller calculate the SI:BitString for | |||
| all desired BFER by OR'ing their BitStrings. This allows for flow | all desired BFERs by OR'ing their BitStrings. This allows for flow | |||
| overlay applications to operate independently from the controller | overlay applications to operate independently of the controller | |||
| whenever it needs to determine which subset of BFERs need to receive | whenever it needs to determine which subset of BFERs need to receive | |||
| a particular packet. | a particular packet. | |||
| If "interdependent branches" are required, the application would need | If "interdependent branches" are required, the application would need | |||
| to inquire the SI:BitString for a given set of BFER whenever the set | to inquire the SI:BitString for a given set of BFER whenever the set | |||
| changes. | changes. | |||
| Note that in either case (unlike in BIER), the bits may need to | Note that in either case (unlike in BIER), the bits may need to | |||
| change upon link/node failure/recovery, network expansion and network | change upon link/node failure/recovery, network expansion and network | |||
| resource consumption by other traffic as part of traffic engineering | resource consumption by other traffic as part of traffic engineering | |||
| goals (e.g.: re-optimization of lower priority traffic flows). | goals (e.g.: re-optimization of lower priority traffic flows). | |||
| Interactions between such BFIR applications and the BIER-TE | Interactions between such BFIR applications and the BIER-TE | |||
| Controller do therefore need to support dynamic updates to the | Controller do therefore need to support dynamic updates to the | |||
| SI:BitStrings. | SI:BitStrings. | |||
| Communications between BFIR flow overlay and BIER-TE controller | Communications between the BFIR flow overlay and the BIER-TE | |||
| requires some way to identify BFER. If BFR-ids are used in the | controller requires some way to identify the BFER. If BFR-ids are | |||
| deployment, as outlined in Section 5.3.3, then those are the natural | used in the deployment, as outlined in Section 5.3.3, then those are | |||
| BFR identifier. If BFR-ids are not used, then any other unique | the natural BFR identifier. If BFR-ids are not used, then any other | |||
| identifier, such as the BFR-prefix of the BFR as of [RFC8279] could | unique identifier, such as the BFR-prefix of the BFR ([RFC8279]) | |||
| be used. | could be 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 sub-domain 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-id in the same sub-domain. | |||
| This allows higher replication efficiency for BIER because their BFR- | This allows higher replication efficiency for BIER because their BFR- | |||
| id can be assigned sequentially, while the BitStrings for BIER-TE | id can be assigned sequentially, while the BitStrings for BIER-TE | |||
| will have also the additional bits for the topology. There is no | will have also the additional bits for the topology. There is no | |||
| relationship between a BFR BIER BFR-id and BIER-TE BFR-id. | 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-TE in | |||
| this approach. | 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 | |||
| skipping to change at page 43, line 28 ¶ | skipping to change at page 46, line 16 ¶ | |||
| (most likely) have to receive all 4 copies of the BIER packet because | (most likely) have to receive all 4 copies of the BIER packet because | |||
| there would be BFR-id for each of the 4 SIs in each of the areas. | there would be BFR-id for each of the 4 SIs in each of the areas. | |||
| Only further towards each BFER would this duplication subside - when | Only further towards each BFER would this duplication subside - when | |||
| each of the 4 trees runs out of branches. | each of the 4 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 BFER in an area | |||
| would be given BFR-id with as few as possible different SIs. Each | would be given BFR-id with as few as possible different SIs. 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 4. | |||
| Given how networks can grow over time, replication efficiency in an | Given how networks can grow over time, replication efficiency in an | |||
| area will also easily go down over time when BFR-ids are network wide | area will then also go down over time when BFR-ids are only allocated | |||
| allocated sequentially over time. An area that initially only has | sequentially, network wide. An area that initially only has BFR-id | |||
| BFR-id in one SI might end up with many SIs over a longer period of | in one SI might end up with many SIs over a longer period of growth. | |||
| growth. Allocating SIs to areas with initially sufficiently many | Allocating SIs to areas with initially sufficiently many spare bits | |||
| spare bits for growths can help to alleviate this issue. Or renumber | for growths can help to alleviate this issue. Or renumber BFERs | |||
| BFERs after network expansion. In this example one may consider to | after network expansion. In this example one may consider to use 6 | |||
| use 6 SIs and assign one to each area. | SIs and assign 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. | sub-domain 0 can even 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 BFER 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 topology and BFERs, BFR-id is just a | |||
| derived set of identifiers from the operator/BIER-TE Controller as | derived set of identifiers from the operator/BIER-TE Controller as | |||
| explained above. | explained above. | |||
| Every time that different sub-topologies have overlap, bits need to | Every time that different sub-topologies have overlap, bits need to | |||
| be repeated across the BitStrings, increasing the overall amount of | be repeated across the BitStrings, increasing the overall amount of | |||
| bits required across all BitString/SIs. In the worst case, random | bits required across all BitString/SIs. In the worst case, one | |||
| subsets of BFERs are assigned to different SIs. This is much worse | assigns random subsets of BFERs to different SIs. This will result | |||
| than in (non-TE) BIER because it not only reduces replication | in an outcome much worse than in (non-TE) BIER: It maximizes the | |||
| efficiency with the same number of overall bits, but even further - | amount of unnecessary topology overlap across SI and therefore | |||
| because more bits are required due to duplication of bits for | reduces the number of BFER that can be reached across each individual | |||
| topology across multiple SIs. Intelligent BFER to SI assignment and | SI. Intelligent BFER to SI assignment and selecting specific | |||
| selecting specific "desired" subtopologies can minimize this problem. | "desired" subtopologies can minimize this problem. | |||
| To set up BIER-TE efficiently for the topology of Figure 20, the | To set up BIER-TE efficiently for the topology of Figure 20, the | |||
| following bit allocation method can be used. This method can easily | following bit allocation method can be used. This method can easily | |||
| be expanded to other, similarly structured larger topologies. | 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 number of bits required for the topology in | |||
| the area. In this example, 6 SIs, one per area. | the area. In this example, 6 SIs, one per area. | |||
| In addition, we use 4 bits in each SI: bia, bib, bea, beb: (b)it | In addition, we use 4 bits in each SI: bia, bib, bea, beb: (b)it | |||
| (i)ngress (a), (b)it (i)ngress (b), (b)it (e)gress (a), (b)it | (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 | (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 | 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 | 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: | right forward_routed() adjacencies on the BFIR and area edge BFR: | |||
| On all BFIRs in an area j|j=2...6, bia in each BIFT:SI is populated | 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 | with the same forward_routed(BFRja), and bib with | |||
| forward_routed(BFRjb). On all area edge BFR, bea in | forward_routed(BFRjb). On all area edge BFR, bea in | |||
| BIFT:SI=k|k=2...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). For this setup we do not | BIFT:SI=k with forward_routed(BFRkb). | |||
| consider area 1 because we assume the BIER-TE setup is just for | ||||
| sending traffic from area 1 into area 2...6, for example bcause the | ||||
| broadcast headends are in area 1 for an IPTV BIER-TE setup. | ||||
| 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 6 copies, with SI=1...SI=6, In | |||
| each packet, the bits indicate bits for topology and BFER in that | each packet, the bits indicate bits for topology and BFER in that | |||
| topology plus the four bits to indicate whether to pass this packet | topology plus the four bits to indicate whether to pass this packet | |||
| via the ingress area a or b border BFR and the egress area a or b | via the ingress area a or b border BFR and the egress area a or b | |||
| border BFR, therefore allowing path steering for those two "unicast" | border BFR, therefore allowing path steering for those two "unicast" | |||
| legs: 1) BFIR to ingress area edge and 2) core to egress area edge. | legs: 1) BFIR to ingress area edge and 2) core to egress area edge. | |||
| Replication only happens inside the egress areas. For BFER in the | Replication only happens inside the egress areas. For BFER in the | |||
| same area as in the BFIR, these four bits are not used. | same area as in 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 to | BIER-TE can, like BIER, support multiple SIs within a sub-domain. | |||
| allow re-using the concept of BFR-id and therefore minimize BIER-TE | This allows to apply the mapping BFR-id = SI * BSL + BP. This allows | |||
| specific functions in any possible BIER layer control plane used in | to re-use the BIER architecture concept of BFR-id and therefore | |||
| conjunction with BIER-TE, flow overlay methods and BIER headers. | minimize BIER-TE specific functions in possible BIER layer control | |||
| plane mechanisms with BIER-TE, including flow overlay methods and | ||||
| BIER header fields. | ||||
| The number of BFIR/BFER possible in a sub-domain is smaller than in | The number of BFIR/BFER possible in a sub-domain is smaller than in | |||
| BIER because BIER-TE uses additional bits for topology. | BIER because BIER-TE uses additional bits for topology. | |||
| Sub-domains (SDs) in BIER-TE can be used like in BIER to create more | Sub-domains (SDs) in BIER-TE can be used like 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 overall amount of bits required. | |||
| 6. BIER-TE and Segment Routing | 6. Security Considerations | |||
| SR aims to enable lightweight path steering via loose source routing. | ||||
| Compared to its more heavy-weight predecessor RSVP-TE, SR does for | ||||
| example not require per-path signaling to each of these hops. | ||||
| BIER-TE supports the same design philosophy for multicast. Like in | ||||
| SR, it relies on source-routing - via the definition of a BitString. | ||||
| 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 | ||||
| of "forwarding segments" in SR, but they have a different scope than | ||||
| SR forwarding segments. Whereas forwarding segments in SR are global | ||||
| or local, BPs in BIER-TE have a scope that is the group of BFR(s) | ||||
| that have adjacencies for this BP in their BIFT. This can be called | ||||
| "adjacency" scoped forwarding segments. | ||||
| Adjacency scope could be global, but then every BFR would need an | ||||
| adjacency for this BP, for example a forward_routed() adjacency with | ||||
| encapsulation to the global SR SID of the destination. Such a BP | ||||
| would always result in ingress replication though (as in [RFC7988]). | ||||
| The first BFR encountering this BP would directly replicate to it. | ||||
| Only by using non-global adjacency scope for BPs can traffic be | ||||
| steered and replicated on non-ingress BFR. | ||||
| SR can naturally be combined with BIER-TE and help to optimize it. | ||||
| For example, instead of defining bit positions for non-replicating | ||||
| hops, it is equally possible to use segment routing encapsulations | ||||
| (e.g. SR-MPLS label stacks) for the encapsulation of | ||||
| "forward_routed" adjacencies. | ||||
| Note that (non-TE) BIER itself can also be seen to be similar to SR. | ||||
| BIER BPs act as global destination Node-SIDs and the BIER BitString | ||||
| is simply a highly optimized mechanism to indicate multiple such SIDs | ||||
| and let the network take care of effectively replicating the packet | ||||
| hop-by-hop to each destination Node-SID. What BIER does not allow is | ||||
| to indicate intermediate hops, or in terms of SR the ability to | ||||
| indicate a sequence of SID to reach the destination. This is what | ||||
| BIER-TE and its adjacency scoped BP enables. | ||||
| 7. Security Considerations | ||||
| If [RFC8296] is used, BIER-TE shares its security considerations. | If [RFC8296] is used, BIER-TE shares its security considerations. | |||
| BIER-TE shares the security considerations of BIER, [RFC8279], with | BIER-TE shares the security considerations of BIER, [RFC8279], with | |||
| the following overriding or additional considerations. | the following overriding or additional considerations. | |||
| BIER-TE forwarding explicitly supports unicast "tunneling" of BIER | ||||
| packets via forward_routed() adjacencies. The BIER domain security | ||||
| model is based on a subset of interfaces on a BFR that connect to | ||||
| other BFRs of the same BIER domain. For BIER-TE, this security model | ||||
| equally applies to such unicast "tunneled" BIER packets. This does | ||||
| not only include the need to filter received unicast "tunneled" BIER | ||||
| packets to prohibit injection of such "tunneled" BIER packets from | ||||
| outside the BIER domain, but also prohibiting forward_routed() | ||||
| adjacencies to leak BIER packets from the BIER domain. It SHOULD be | ||||
| possible to configure interfaces to be part of a BIER domain solely | ||||
| for sending and receiving of unicast "tunneled" BIER packets even if | ||||
| the interface can not 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 impairment of any | |||
| BFR in a domain may lead to successful attacks against the results of | BFR in a domain may lead to successful attacks against the results of | |||
| the routing protocol, enabling DoS attacks against paths or the | the routing protocol, enabling DoS attacks against paths or the | |||
| addressing (BFR-id, BFR-prefixes) used by BIER. | addressing (BFR-id, 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 individual | controller. When such a controller is used, impairment of an | |||
| BFR in a domain causes no impairment of the BIER-TE control plane on | individual BFR in a domain causes no impairment of the BIER-TE | |||
| other BFR. If a routing protocol is used to support forward_routed() | control plane on other BFRs. If a routing protocol is used to | |||
| adjacencies, then this is still an attack vector as in BIER, but only | support forward_routed() adjacencies, then this is still an attack | |||
| for BIER-TE forward_routed() adjacencies, and not other adjacencies. | vector as in BIER, but only for BIER-TE forward_routed() 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 using | |||
| Secure SHell (SSH), [RFC4253] for NetConf ([RFC6241]), or via | 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. | |||
| For additional, BIER-TE independent security considerations for the | When any of these security mechanisms/protocols are used for | |||
| use of a central BIER-TE controller, the security section of the | communications between a BIER-TE controller and BFRs, their security | |||
| protocols and security options in the previous paragraph apply. In | considerations apply to BIER-TE. In addition, the security | |||
| addition, the security considerations of [RFC4655] apply. | considerations of PCE, [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 BFR 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 misconfiguration | |||
| by operators and/or bad BIER-TE controller software), the BIER-TE | by operators and/or bad BIER-TE controller software), the BIER-TE | |||
| forwarding rules are defined to be as strict in clearing bits as | forwarding rules are defined to be as strict in clearing bits as | |||
| possible. The clearing of all bits with an adjacency on a BFR | possible. The clearing of all bits with an adjacency on a BFR | |||
| prohibits that a looping packet creates additional packet | prohibits that a looping packet creates additional packet | |||
| skipping to change at page 47, line 28 ¶ | skipping to change at page 49, line 39 ¶ | |||
| network's life-cycle, such as in embedded networks or in | network's life-cycle, such as in embedded networks or in | |||
| manufacturing networks during e.g. plant reworking/repairs. In these | manufacturing networks during e.g. plant reworking/repairs. In these | |||
| type of deployments, configuration changes could be locked out when | type of deployments, configuration changes could be locked out when | |||
| the network is in production state and could only be (re-)enabled | the network is in production state and could only be (re-)enabled | |||
| through reverting the network/installation into non-production state. | through reverting the network/installation into non-production state. | |||
| Such security designs would not only allow to provide additional | Such security designs would not only allow to provide additional | |||
| layers of protection against configuration attacks, but would | layers of protection against configuration attacks, but would | |||
| foremost protect the active production process from such | foremost protect the active production process from such | |||
| configuration attacks. | configuration attacks. | |||
| 8. IANA Considerations | 7. IANA Considerations | |||
| This document requests no action by IANA. | This document requests no action by IANA. | |||
| 9. Acknowledgements | 8. Acknowledgements | |||
| The authors would like to thank Greg Shepherd, Ijsbrand Wijnands, | The authors would like to thank Greg Shepherd, Ijsbrand Wijnands, | |||
| Neale Ranns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, | Neale Ranns, Dirk Trossen, Sandy Zheng, Lou Berger, Jeffrey Zhang, | |||
| Alvaro Retana and Wolfgang Braun for their reviews and suggestions. | Carsten Borman and Wolfgang Braun for their reviews and suggestions. | |||
| 10. Change log [RFC Editor: Please remove] | 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: | draft-ietf-bier-te-arch: | |||
| 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: | 11: IESG review Ben Kaduk, summary: | |||
| One discuss for bug in pseudocode. turned out to be one cahrcter | One discuss for bug in pseudocode. turned out to be one cahrcter | |||
| typo. | typo. | |||
| Added (non-TE) prefix in places where BIER by itsels had to be | Added (non-TE) prefix in places where BIER by itsels had to be | |||
| better disambiguated. | better disambiguated. | |||
| enhanced text for hub-and-spoke to indicate we're only talking | enhanced text for hub-and-spoke to indicate we're only talking | |||
| about hub to spoke traffic. | about hub to spoke traffic. | |||
| skipping to change at page 55, line 36 ¶ | skipping to change at page 60, line 50 ¶ | |||
| BIER forwarding. Removed MyBitsOfInterest (was pure | BIER forwarding. Removed MyBitsOfInterest (was pure | |||
| optimization). | optimization). | |||
| - Added captions to pictures. | - Added captions to pictures. | |||
| - Part of review feedback from Sandy (Zhang Zheng) integrated. | - Part of review feedback from Sandy (Zhang Zheng) integrated. | |||
| 00: Changed target state to experimental (WG conclusion), updated | 00: Changed target state to experimental (WG conclusion), updated | |||
| references, mod auth association. | references, mod auth association. | |||
| - Source now on http://www.github.com/toerless/bier-te-arch | - Source now on https://www.github.com/toerless/bier-te-arch | |||
| - Please open issues on the github for change/improvement requests | - Please open issues on the github for change/improvement requests | |||
| to the document - in addition to posting them on the list | to the document - in addition to posting them on the list | |||
| (bier@ietf.). Thanks!. | (bier@ietf.). Thanks!. | |||
| draft-eckert-bier-te-arch: | draft-eckert-bier-te-arch: | |||
| 06: Added overview of forwarding differences between BIER, BIER- | 06: Added overview of forwarding differences between BIER, BIER- | |||
| TE. | TE. | |||
| 05: Author affiliation change only. | 05: Author affiliation change only. | |||
| skipping to change at page 57, line 20 ¶ | skipping to change at page 62, line 34 ¶ | |||
| all ring nodes. | all ring nodes. | |||
| 01: Fixed BFIR -> BFER for section 4.3. | 01: Fixed BFIR -> BFER for section 4.3. | |||
| 01: Added explanation of SI, difference to BIER ECMP, | 01: Added explanation of SI, difference to BIER ECMP, | |||
| consideration for Segment Routing, unicast FRR, considerations for | consideration for Segment Routing, unicast FRR, considerations for | |||
| encapsulation, explanations of BIER-TE Controller and CLI. | encapsulation, explanations of BIER-TE Controller and CLI. | |||
| 00: Initial version. | 00: Initial version. | |||
| 11. References | 10. References | |||
| 11.1. Normative References | 10.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 57, line 45 ¶ | skipping to change at page 63, line 11 ¶ | |||
| 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>. | |||
| 11.2. Informative References | 10.2. Informative References | |||
| [Bloom70] Bloom, B. H., "Space/time trade-offs in hash coding with | [Bloom70] Bloom, B. H., "Space/time trade-offs in hash coding with | |||
| allowable errors", Comm. ACM 13(7):422-6, July 1970, | allowable errors", Comm. ACM 13(7):422-6, July 1970, | |||
| <http://gnunet.org/papers/p422-bloom.pdf>. | <https://dl.acm.org/doi/10.1145/362686.362692>. | |||
| [I-D.eckert-bier-te-frr] | [I-D.eckert-bier-te-frr] | |||
| Eckert, T., Cauchie, G., Braun, W., and M. Menth, | Eckert, T., Cauchie, G., Braun, W., and M. Menth, | |||
| "Protection Methods for BIER-TE", Work in Progress, | "Protection Methods for BIER-TE", Work in Progress, | |||
| Internet-Draft, draft-eckert-bier-te-frr-03, 5 March 2018, | Internet-Draft, draft-eckert-bier-te-frr-03, 5 March 2018, | |||
| <https://www.ietf.org/archive/id/draft-eckert-bier-te-frr- | <https://www.ietf.org/archive/id/draft-eckert-bier-te-frr- | |||
| 03.txt>. | 03.txt>. | |||
| [I-D.ietf-bier-multicast-http-response] | [I-D.ietf-bier-multicast-http-response] | |||
| Trossen, D., Rahman, A., Wang, C., and T. Eckert, | Trossen, D., Rahman, A., Wang, C., and T. Eckert, | |||
| skipping to change at page 59, line 16 ¶ | skipping to change at page 64, line 34 ¶ | |||
| <https://ieeexplore.ieee.org/document/7511036>. | <https://ieeexplore.ieee.org/document/7511036>. | |||
| [RCSD94] Zhang, H. and D. Domenico, "Rate-Controlled Service | [RCSD94] Zhang, H. and D. Domenico, "Rate-Controlled Service | |||
| Disciplines", Journal of High-Speed Networks, 1994, May | Disciplines", Journal of High-Speed Networks, 1994, May | |||
| 1994, <https://dl.acm.org/doi/10.5555/2692227.2692232>. | 1994, <https://dl.acm.org/doi/10.5555/2692227.2692232>. | |||
| [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 | ||||
| Reflection: An Alternative to Full Mesh Internal BGP | ||||
| (IBGP)", RFC 4456, DOI 10.17487/RFC4456, April 2006, | ||||
| <https://www.rfc-editor.org/info/rfc4456>. | ||||
| [RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path | [RFC4655] Farrel, A., Vasseur, J.-P., and J. Ash, "A Path | |||
| Computation Element (PCE)-Based Architecture", RFC 4655, | Computation Element (PCE)-Based Architecture", RFC 4655, | |||
| DOI 10.17487/RFC4655, August 2006, | DOI 10.17487/RFC4655, August 2006, | |||
| <https://www.rfc-editor.org/info/rfc4655>. | <https://www.rfc-editor.org/info/rfc4655>. | |||
| [RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation | [RFC5440] Vasseur, JP., Ed. and JL. Le Roux, Ed., "Path Computation | |||
| Element (PCE) Communication Protocol (PCEP)", RFC 5440, | Element (PCE) Communication Protocol (PCEP)", RFC 5440, | |||
| DOI 10.17487/RFC5440, March 2009, | DOI 10.17487/RFC5440, March 2009, | |||
| <https://www.rfc-editor.org/info/rfc5440>. | <https://www.rfc-editor.org/info/rfc5440>. | |||
| [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., | |||
| and A. Bierman, Ed., "Network Configuration Protocol | and A. Bierman, Ed., "Network Configuration Protocol | |||
| (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011, | |||
| <https://www.rfc-editor.org/info/rfc6241>. | <https://www.rfc-editor.org/info/rfc6241>. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | ||||
| Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011, | ||||
| <https://www.rfc-editor.org/info/rfc6242>. | ||||
| [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | [RFC7589] Badra, M., Luchuk, A., and J. Schoenwaelder, "Using the | |||
| NETCONF Protocol over Transport Layer Security (TLS) with | NETCONF Protocol over Transport Layer Security (TLS) with | |||
| Mutual X.509 Authentication", RFC 7589, | Mutual X.509 Authentication", RFC 7589, | |||
| DOI 10.17487/RFC7589, June 2015, | DOI 10.17487/RFC7589, June 2015, | |||
| <https://www.rfc-editor.org/info/rfc7589>. | <https://www.rfc-editor.org/info/rfc7589>. | |||
| [RFC7752] Gredler, H., Ed., Medved, J., Previdi, S., Farrel, A., and | [RFC7752] Gredler, H., Ed., Medved, J., Previdi, S., Farrel, A., and | |||
| S. Ray, "North-Bound Distribution of Link-State and | S. Ray, "North-Bound Distribution of Link-State and | |||
| Traffic Engineering (TE) Information Using BGP", RFC 7752, | Traffic Engineering (TE) Information Using BGP", RFC 7752, | |||
| DOI 10.17487/RFC7752, March 2016, | DOI 10.17487/RFC7752, March 2016, | |||
| <https://www.rfc-editor.org/info/rfc7752>. | <https://www.rfc-editor.org/info/rfc7752>. | |||
| [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", | ||||
| RFC 7950, DOI 10.17487/RFC7950, August 2016, | ||||
| <https://www.rfc-editor.org/info/rfc7950>. | ||||
| [RFC7988] Rosen, E., Ed., Subramanian, K., and Z. Zhang, "Ingress | [RFC7988] Rosen, E., Ed., Subramanian, K., and Z. Zhang, "Ingress | |||
| Replication Tunnels in Multicast VPN", RFC 7988, | Replication Tunnels in Multicast VPN", RFC 7988, | |||
| DOI 10.17487/RFC7988, October 2016, | DOI 10.17487/RFC7988, October 2016, | |||
| <https://www.rfc-editor.org/info/rfc7988>. | <https://www.rfc-editor.org/info/rfc7988>. | |||
| [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF | ||||
| Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017, | ||||
| <https://www.rfc-editor.org/info/rfc8040>. | ||||
| [RFC8253] Lopez, D., Gonzalez de Dios, O., Wu, Q., and D. Dhody, | [RFC8253] Lopez, D., Gonzalez de Dios, O., Wu, Q., and D. Dhody, | |||
| "PCEPS: Usage of TLS to Provide a Secure Transport for the | "PCEPS: Usage of TLS to Provide a Secure Transport for the | |||
| Path Computation Element Communication Protocol (PCEP)", | Path Computation Element Communication Protocol (PCEP)", | |||
| RFC 8253, DOI 10.17487/RFC8253, October 2017, | RFC 8253, DOI 10.17487/RFC8253, October 2017, | |||
| <https://www.rfc-editor.org/info/rfc8253>. | <https://www.rfc-editor.org/info/rfc8253>. | |||
| [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., | [RFC8345] Clemm, A., Medved, J., Varga, R., Bahadur, N., | |||
| Ananthakrishnan, H., and X. Liu, "A YANG Data Model for | Ananthakrishnan, H., and X. Liu, "A YANG Data Model for | |||
| Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March | Network Topologies", RFC 8345, DOI 10.17487/RFC8345, March | |||
| 2018, <https://www.rfc-editor.org/info/rfc8345>. | 2018, <https://www.rfc-editor.org/info/rfc8345>. | |||
| [RFC8401] Ginsberg, L., Ed., Przygienda, T., Aldrin, S., and Z. | [RFC8401] Ginsberg, L., Ed., Przygienda, T., Aldrin, S., and Z. | |||
| Zhang, "Bit Index Explicit Replication (BIER) Support via | Zhang, "Bit Index Explicit Replication (BIER) Support via | |||
| IS-IS", RFC 8401, DOI 10.17487/RFC8401, June 2018, | IS-IS", RFC 8401, DOI 10.17487/RFC8401, June 2018, | |||
| <https://www.rfc-editor.org/info/rfc8401>. | <https://www.rfc-editor.org/info/rfc8401>. | |||
| [RFC8402] Filsfils, C., Ed., Previdi, S., Ed., Ginsberg, L., | ||||
| Decraene, B., Litkowski, S., and R. Shakir, "Segment | ||||
| Routing Architecture", RFC 8402, DOI 10.17487/RFC8402, | ||||
| July 2018, <https://www.rfc-editor.org/info/rfc8402>. | ||||
| [RFC8444] Psenak, P., Ed., Kumar, N., Wijnands, IJ., Dolganow, A., | [RFC8444] Psenak, P., Ed., Kumar, N., Wijnands, IJ., Dolganow, A., | |||
| 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., | ||||
| and A. Dolganow, "Multicast VPN Using Bit Index Explicit | ||||
| Replication (BIER)", RFC 8556, DOI 10.17487/RFC8556, April | ||||
| 2019, <https://www.rfc-editor.org/info/rfc8556>. | ||||
| Appendix A. BIER-TE and Segment Routing | ||||
| SR (xref target="RFC8402"/>) aims to enable lightweight path steering | ||||
| via loose source routing. Compared to its more heavy-weight | ||||
| predecessor RSVP-TE, SR does for example not require per-path | ||||
| signaling to each of these hops. | ||||
| BIER-TE supports the same design philosophy for multicast. Like in | ||||
| SR, it relies on source-routing - via the definition of a BitString. | ||||
| 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 | ||||
| of "forwarding segments" in SR, but they have a different scope than | ||||
| SR forwarding segments. Whereas forwarding segments in SR are global | ||||
| or local, BPs in BIER-TE have a scope that is the group of BFR(s) | ||||
| that have adjacencies for this BP in their BIFT. This can be called | ||||
| "adjacency" scoped forwarding segments. | ||||
| Adjacency scope could be global, but then every BFR would need an | ||||
| adjacency for this BP, for example a forward_routed() adjacency with | ||||
| encapsulation to the global SR SID of the destination. Such a BP | ||||
| would always result in ingress replication though (as in [RFC7988]). | ||||
| The first BFR encountering this BP would directly replicate to it. | ||||
| Only by using non-global adjacency scope for BPs can traffic be | ||||
| steered and replicated on non-ingress BFR. | ||||
| SR can naturally be combined with BIER-TE and help to optimize it. | ||||
| For example, instead of defining bit positions for non-replicating | ||||
| hops, it is equally possible to use segment routing encapsulations | ||||
| (e.g. SR-MPLS label stacks) for the encapsulation of | ||||
| "forward_routed" adjacencies. | ||||
| Note that (non-TE) BIER itself can also be seen to be similar to SR. | ||||
| BIER BPs act as global destination Node-SIDs and the BIER BitString | ||||
| is simply a highly optimized mechanism to indicate multiple such SIDs | ||||
| and let the network take care of effectively replicating the packet | ||||
| hop-by-hop to each destination Node-SID. What BIER does not allow is | ||||
| to indicate intermediate hops, or in terms of SR the ability to | ||||
| indicate a sequence of SID to reach the destination. This is what | ||||
| BIER-TE and its adjacency scoped BP enables. | ||||
| 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, 95050 | |||
| United States of America | United States of America | |||
| Email: tte+ietf@cs.fau.de | Email: tte+ietf@cs.fau.de | |||
| Gregory Cauchie | ||||
| Bouygues Telecom | ||||
| Email: GCAUCHIE@bouyguestelecom.fr | ||||
| Michael Menth | Michael Menth | |||
| University of Tuebingen | University of Tuebingen | |||
| Email: menth@uni-tuebingen.de | Email: menth@uni-tuebingen.de | |||
| Gregory Cauchie | ||||
| Bouygues Telecom | ||||
| Email: GCAUCHIE@bouyguestelecom.fr | ||||
| End of changes. 194 change blocks. | ||||
| 561 lines changed or deleted | 890 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||