<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
<!ENTITY RFC2119 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
<!ENTITY RFC8174 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
<!ENTITY RFC4271 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.4271.xml">
<!ENTITY RFC8279 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8279.xml">
<!ENTITY RFC7938 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.7938.xml">
<!ENTITY RFC8444 SYSTEM "http://xml2rfc.ietf.org/public/rfc/bibxml/reference.RFC.8444.xml">
]>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="3"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<rfc category="std" docName="draft-ietf-bier-idr-extensions-10"
     ipr="trust200902">
  <front>
    <title abbrev="BGP Extensions for BIER">BGP Extensions for BIER</title>

    <author fullname="Xiaohu Xu" initials="X.X." surname="Xu">
      <organization>Midea Group</organization>

      <address>
        <email>xuxh81@midea.com</email>
      </address>
    </author>

    <author fullname="Mach Chen" initials="M.C." surname="Chen">
      <organization>Huawei</organization>

      <address>
        <email>mach.chen@huawei.com</email>
      </address>
    </author>

    <author fullname="Keyur Patel" initials="K.P." surname="Patel">
      <organization>Arrcus, Inc.</organization>

      <address>
        <email>keyur@arrcus.com</email>
      </address>
    </author>

    <author fullname="IJsbrand Wijnands" initials="I.W." surname="Wijnands">
      <organization>Individual</organization>
      <address>
        <email>ice@braindump.be</email>
      </address>
    </author>

    <author fullname="Antoni Przygienda" initials="A.P." surname="Przygienda">
      <organization>Juniper</organization>
      <address>
        <email>prz@juniper.net</email>
      </address>
    </author>
    <author fullname="Zhaohui Zhang" initials="Z." role="editor" surname="Zhang">
      <organization>Juniper</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>

    <abstract>
      <t>Bit Index Explicit Replication (BIER) is a new multicast forwarding
      architecture which doesn't require an explicit tree-building protocol
      and doesn't require intermediate routers to maintain any multicast
      state. BIER is applicable in a multi-tenant data center network
      environment for efficient delivery of Broadcast, Unknown-unicast and
      Multicast (BUM) traffic while eliminating the need for maintaining a
      huge amount of multicast state in the underlay. This document describes
      BGP extensions for advertising the BIER-specific information.</t>
    </abstract>

    <note title="Requirements Language">
      <t>
          The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
          NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED",
          "MAY", and "OPTIONAL" in this document are to be interpreted as
          described in BCP 14 <xref target="RFC2119"/> <xref
          target="RFC8174"/> when, and only when, they appear in all
          capitals, as shown here.
      </t>
    </note>
  </front>

  <middle>
    <section title="Introduction">
      <t>Bit Index Explicit Replication (BIER) [RFC8279] is a new multicast
      forwarding architecture which doesn't require an explicit tree-building
      protocol and doesn't require intermediate routers to maintain any
      multicast state. BIER is applicable in a multi-tenant data center
      network environment for efficient delivery of Broadcast, Unknown-unicast
      and Multicast (BUM) traffic while eliminating the need for maintaining a
      huge amount of multicast state in the underlay. This document describes
      BGP extensions for advertising the BIER-specific information. More
      specifically, in this document, we define a new optional, non-
      transitive BGP attribute, referred to as the BIER attribute, to convey
      the BIER-specific information such as BIER Forwarding Router identifier
      (BFR-id), BitString Length (BSL) and
      so on. In addition, this document specifies procedures to prevent the
      BIER attribute from "leaking out" of a BIER domain.</t>

      <t>These extensions are applicable in those multi-tenant data centers
      where BGP instead of IGP is used as an underlay <xref target="RFC7938"/>. These
      extensions may also be applicable to other BGP based network
      scenarios, e.g., as described in <xref target="I-D.ietf-bier-multicast-as-a-service"/>.</t>
    </section>

    <section anchor="Abbreviations_Terminology" title="Terminology">
      <t>This memo makes use of the terms defined in <xref target="RFC4271"/> and
      [RFC8279].</t>
    </section>

    <section title="BIER Path Attribute">
      <t>This draft defines a new optional, transitive BGP path attribute,
      referred to as the BIER attribute. This attribute can be attached to a
      BGP UPDATE message by the originator so as to indicate the BIER-
      specific information of a particular BFR which is identified by the /32
      or /128 address prefix contained in the NLRI. In other words, if the
      BIER path attribute is present, the NLRI is treated by BIER as a
      "BFR-prefix". When creating a BIER attribute, a BFR needs to include one
      BIER TLV for every Sub-domain that it supports. The
      attribute type code for the BIER Attribute is TBD. The value field of
      the BIER Attribute contains one or more BIER TLV as shown in Figure
      1.</t>

      <t><figure>
          <artwork align="center"><![CDATA[

       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Type=TBD            |            Length             |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Sub-domain   |            BFR-ID             |   Reserved    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       ~                                                               ~
       |                           Sub-TLVs                            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+..........................

]]></artwork>
        </figure><list>
          <t>Type: Two octets encoding the BIER TLV Type: TBD.</t>

          <t>Length: Two octets encoding the length in octets of the TLV,
          including the type and length fields. The length is encoded as an
          unsigned binary integer. (Note that the minimum length is 8,
          indicating that no sub-TLV is present.)</t>

          <t>Sub-domain: a one-octet field encoding the sub-domain ID
          corresponding to the BFR-ID.</t>

          <t>BFR-ID: a two-octet field encoding the BFR-ID.</t>

          <t>Sub-TLVs: contains one or more sub-TLV.</t>
        </list></t>

        <t>The BIER TLV MAY appear multiple times in the BIER Path
        Attribute, one for each sub-domain. There MUST be no more than
        one BIER TLV with the same Sub-domain value; if there is, the
        entire BIER Path Attribute MUST be ignored.
        </t>
        <t>A BIER TLV may have sub-TLVs, which may have their own sub-TLVs.
        All those are referred to as sub-TLVs and share the same Type space,
        regardless of the level.
        </t>
    <section title="BIER MPLS Encapsulation sub-TLV">
      <t>The BIER MPLS Encapsulation sub-TLV matches the OSPFv2
      "BIER MPLS Encapsulation sub-TLV" as specified in Section 2.2
      of <xref target="RFC8444"/>. It MAY appear multiple times in the BIER TLV.
      </t>
      <t>The following is copied verbatim from that section:</t>
      <t>
          <artwork align="center"><![CDATA[
      
   The BIER MPLS Encapsulation Sub-TLV has the following format:

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Max SI    |BS Len |             Label                     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                        sub-TLVs                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type:  TBD1 (To be assigned by IANA).

   Length:  4 or other values (depending on sub-TLVs)

   Max SI:  A 1-octet field encoding the maximum Set Identifier (SI)
      (see Section 1 of [RFC8279]) used in the encapsulation for this
      BIER sub-domain for this BitString length.

   BS Len (BitString Length):  A 4-bit field encoding the supported
      BitString length associated with this BFR-prefix.  The values
      allowed in this field are specified in Section 2 of [RFC8296].

   Label:  A 20-bit value representing the first label in the label range.

   The "label range" is the set of labels beginning with the Label and
   ending with (Label + (Max SI)).  A unique label range is allocated
   for each BitString length and sub-domain-id.  These labels are used
   for BIER forwarding as described in [RFC8279] and [RFC8296].

   The size of the label range is determined by the number of SIs
   (Section 1 of [RFC8279]) that are used in the network.  Each SI maps
   to a single label in the label range: the first label is for SI=0,
   the second label is for SI=1, etc.

   If the label associated with the Maximum Set Identifier exceeds the
   20-bit range, the BIER MPLS Encapsulation Sub-TLV containing the
   error MUST be ignored.

   If the same BitString length is repeated in multiple BIER MPLS
   Encapsulation Sub-TLVs inside the same BIER TLV, all BIER MPLS
   Encapsulation Sub-TLVs in the BIER TLV MUST be ignored.

   Label ranges within all BIER MPLS Encapsulation Sub-TLVs advertised
   by the same BFR MUST NOT overlap.  If an overlap is detected, all
   BIER MPLS Encapsulation Sub-TLVs advertised by the BFR MUST be ignored.
]]></artwork></t>
    </section>

    <section title="BIER Non-MPLS Encapsulation sub-TLV">
      <t>Similar to the concept in <xref target="I-D.ietf-bier-lsr-non-mpls-extensions"/>,
      the BIER non-MPLS Encapsulation sub-TLV is used for non-MPLS encapsulation.
      It matches the OSPFv2 BIER non-MPLS Encapsulation sub TLV as specified in
      Section 3.2 of <xref target="I-D.ietf-bier-lsr-non-mpls-extensions"/>.
      </t>

      <t>The following are copied verbatim from that section.
      Note to RFC Editor: the following copied text must match the
      final text in the RFC for
      <xref target="I-D.ietf-bier-lsr-non-mpls-extensions"/>.
      </t>
          <t><artwork align="center"><![CDATA[

   The non-MPLS Encapsulation Sub-TLV MAY appear multiple times within a
   single BIER TLV.  If the same BitString length is repeated in
   multiple BIER non-MPLS encapsulation Sub-TLVs inside the same BIER
   TLV, the BIER TLV MUST be ignored.

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |              Type             |             Length            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     Max SI    |BS LEN |                  BIFT-id              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   ~                        sub-TLVs                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   Type:  TBD2 (To be assigned by IANA).

   Length:  4 or other values (depending on sub-TLVs)

   Max SI:  A 1 octet field encoding the Maximum Set Identifier
      (Section 1 of [RFC8279]) used in the encapsulation for this BIER
      subdomain for this BitString length.  The first BIFT-id is for SI=0,
      the second BIFT-id is for SI=1, etc.  If the BIFT-id associated with
      the Maximum Set Identifier exceeds the 20-bit range, the sub-TLV
      MUST be ignored.

   BIFT-id:  A 20-bit field representing the first BIFT-id in the BIFT-id
      range.

   BitString Length (BS Len):  A 4 bit field encoding the
      bitstring length (as per [RFC8296]) supported for the encapsulation.

   The "BIFT-id range" is the set of 20-bit values beginning with the
   BIFT-id and ending with (BIFT-id + (Max SI)).  These BIFT-id's are
   used for BIER forwarding as described in [RFC8279] and [RFC8296].

   The size of the BIFT-id range is determined by the number of SI's
   (Section 1 of [RFC8279]) that are used in the network.  Each SI maps
   to a single BIFT-id in the BIFT-id range: the first BIFT-id is for
   SI=0, the second BIFT-id is for SI=1, etc.

   If the BIFT-id associated with the Maximum Set Identifier exceeds
   the 20-bit range, the BIER non-MPLS Encapsulation sub-TLV
   containing the error MUST be ignored.

   BIFT-id ranges within all the BIER non-MPLS Encapsulation sub-
   TLVs advertised by the same BFR MUST NOT overlap.  If an overlap is
   detected, all the BIER non-MPLS Encapsulation sub-TLV advertised
   by the BFR MUST be ignored. However the
   BIFT-id ranges may overlap across different encapsulation types and
   is allowed.  As an example, the BIFT-id value in the non-MPLS
   encapsulation sub-TLV may overlap with the Label value in the
   Label range in BIER MPLS encapsulation sub-TLV.
          ]]></artwork></t>
    </section>

    <section title="BIER Nexthop sub-TLV">
      <t><figure>
          <artwork align="center"><![CDATA[
       0                   1                   2                   3
       0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |             Type=TBD3         |             Length            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                            Nexthop                            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

]]></artwork>
        </figure><list>
          <t>Type: TBD3 (To be assigned by IANA).</t>

          <t>Length: 4 if the Nexthop is IPv4 address and 16 if the Nexthop is IPv6 address</t>

          <t>Nexthop: 4 or 16 octets of IPv4/IPv6 address</t>

        </list></t>
        <t>The BIER Nexthop sub-TLV MAY be included in the MPLS or non-MPLS
        Encapsulation sub-TLV as well as in the top level BIER TLV.
        </t>
    </section>

    </section>

      <section title="Originating/Updating BIER Attribute">
        <t>A BIER Forwarding Egress Router (BFER) MUST attach a BIER attribute
        to its own BIER prefix NLRI. The BIER attribute MUST include one
        BIER TLV for each BIER sub-domain that it supports. Each BIER TLV
        MUST include an MPLS and/or non-MPLS Encapsulation sub-TLV, and SHOULD
        include a BIER Nexthop sub-TLV with the Nexthop set to the
        BIER prefix. If the BIER Nexthop sub-TLV is not included, the BIER prefix
        will be used by receiving BFRs as the BIER nexthop when calculating BIFT.
        </t>
        <t>A BFR/BFER MAY attach a BIER proxy range sub-TLV
        <xref target="I-D.ietf-bier-prefix-redistribute"/> in the BIER TLV.
        In this case it MUST attach a BIER attribute to its own BIER prefix NLRIs.
        Other than this case, a BFR that is not a BFER (i.e., its BFR-ID is 0)
        SHOULD NOT attach a BIER attribute to its own BIER prefix NLRIs
        (if a BIER attribute is attached it will not get used anyway).
        </t>
        <t>When a BFR re-advertises a BGP NLRI with a BIER attribute,
        it SHOULD set/update the BIER Nexthop sub-TLV to use its own BIER prefix,
        in which case it MUST replace the MPLS or non-MPLS Encapsulation sub-TLV
        with its own, i.e., as if the BFR is attaching the
        encapsulation sub-TLV for its own BIER prefix. If it does not
        update the BIER Nexthop sub-TLVs, it MUST NOT update MPLS or
        non-MPLS Encapsulation sub-TLV.
        </t>
        <t>It's possible that the BFR supports some but not all BSLs
        in the received MPLS or non-MPLS Encapsulation sub-TLVs.
        After updating the BIER Nexthop sub-TLV in the top BIER TLV
        to itself, for the BSLs that it does support, the BFR MUST remove
        the BIER Nexthop sub-TLV (if present) in the corresponding Encapsulation
        sub-TLVs. For the BSLs that it does not support, it MUST not update
        those Encapsulation sub-TLVs except that if a BIER Nexthop sub-TLV
        is not included in the Encapsulation sub-TLV, the received BIER Nexthop
        sub-TLV in the top BIER TLV MUST be copied into the Encapsulation
        sub-TLV. All impacted length fields (e.g.,
        the Encapsulation sub-TLV Length, the top level BIER TLV Length) MUST
        be updated accordingly.
        </t>
      <t>Since the BIER attribute is an optional, transitive BGP path
      attribute, a non-BFR BGP speaker could still advertise the received
      route with a BIER attribute.
      </t>
    </section>

    <section title="BIFT Calculation">
      <t>For each sub-domain, a BFR calculates the corresponding BIFTs
      by going through the BIER prefixes whose BIER attribute includes
      a BIER TLV for the sub-domain.
      For a non-zero BFR-id in the BIER TLV, or for each BFR-id
      in the BIER Proxy Range sub-TLV in the BIER TLV of a BIER prefix,
      a BIFT entry is created or updated. The entry's BFR Neighbor
      (BFR-NBR) <xref target="RFC8279"/> is the Nexthop in the BIER
      Nexthop sub-TLV in the corresponding Encapsulation sub-TLV, or
      in the top level BIER TLV if the Encapsulation sub-TLV does not
      have a Nexthop sub-TLV. If there is no Nexthop sub-TLV at all,
      The entry's BFR Neighbor is the BIER prefix itself. The BIER label
      or BIFT-id for the entry is derived from the Label Range in the
      MPLS Encapsulation sub-TLV or from the BIFT-id Range in the
      non-MPLS Encapsulation sub-TLV.
      </t>
      <t>BIER traffic is sent to the BFR-NBR either natively (BIER header
      directly follows a layer 2 header) if the BFR-NBR is directly
      connected, or via a tunnel otherwise. Notice that, if a non-BFR
      BGP speaker re-advertises a BIER prefix (in this case it can not update
      the BIER attribute since it is not capable), or if a BFR BGP speaker
      re-advertises a BIER prefix without updating the BIER Nexthop
      sub-TLV, the BFR receiving the prefix will tunnel BIER traffic - 
      the BGP speaker re-advertising the BIER prefix will not see the
      BIER traffic for the BIER prefix.
      </t>
    </section>

    <section title="Deployment Considerations ">
      <t>It's assumed by this document that the BIER domain is aligned with
      an Administrative Domain (AD) which may be composed of multiple ASes
      (either private or public ASes). Use of the BIER attribute in other
      scenarios is outside the scope of this document.</t>

      <t>A boundary router of the AD that supports the BIER attribute MUST
      support a per-EBGP-session/group policy, that indicates whether the
      attribute is allowed. If it is not allowed, the BIER
      attribute MUST NOT be sent to any EBGP peer of the session/group,
      and the BIER attribute received from the peer MUST be treated exactly as
      if it were an unrecognized non-transitive attribute. That is, "it MUST
      be quietly ignored and not passed along to other BGP peers".</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
      <t>Thanks a lot for Eric Rosen and Peter Psenak for their
      valuable comments on this document.</t>

      <!---->
    </section>

    <section anchor="IANA" title="IANA Considerations">
      <t>IANA is requested to assign a codepoint in the "BGP Path Attributes"
      registry to the BIER attribute.</t>
      <t>IANA is requested to create a registry for "BGP BIER Attribute Types"
      and a registry for "BGP BIER TLV sub-TLV Types".
      The type field for both registry consists of two octets, with
      possible values from 1 to 655355 (the value 0 is reserved). The
      allocation policy for this field is to be "First Come First Serve".
      </t>
      <t>
      Three initial values are to be allocated from the "BGP BIER TLV sub-TLV
      Types" for MPLS Encapsulation,
      non-MPLS Encapsulation, and BIER Nexthop sub-TLV respectively.</t>
    </section>

    <section anchor="Security" title="Security Considerations">
      <t>This document introduces no new security considerations beyond those
      already specified in [RFC4271] and [RFC8279].</t>

      <!---->
    </section>
    <section title="Contributors">
      <t>This document has the following contributors:
    <figure>
    <artwork>
Zheng Zhang
ZTE
zhang.zheng@zte.com.cn
    </artwork>
    </figure>
      </t>
    </section>
  </middle>

  <back>
    <references title="Normative References">
      &RFC2119;
      &RFC8174;
      &RFC4271;
      &RFC8279;
      &RFC8444;
      <?rfc include='reference.I-D.ietf-bier-prefix-redistribute.xml'?>
      <?rfc include='reference.I-D.ietf-bier-lsr-non-mpls-extensions.xml'?>
    </references>

    <references title="Informative References">
      &RFC7938;
      <?rfc include='reference.I-D.ietf-bier-multicast-as-a-service.xml'?>
    </references>
  </back>
</rfc>
