<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?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-idr-bier-te-path-05"
     ipr="trust200902">
  <front>
    <title abbrev="BIER-TE Path">BGP for BIER-TE Path</title>

     <author initials="H" surname="Chen" fullname="Huaimo Chen">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <street></street>
          <city>Boston, MA</city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>hchen.ietf@gmail.com</email>
      </address>
    </author>

    <author fullname="Mike McBride" initials="M" surname="McBride">
      <organization>Futurewei</organization>
      <address>
        <email>michael.mcbride@futurewei.com</email>
      </address>
    </author>

    <author fullname="Ran Chen" initials="R" surname="Chen">
      <organization>ZTE Corporation</organization>
      <address>
        <email>chen.ran@zte.com.cn</email>
      </address>
    </author>
<!--
    <author fullname="Robert Raszuk" initials="R" surname="Raszuk">
      <organization>NTT Network Innovations</organization>
      <address>
        <email>robert@raszuk.net</email>
      </address>
    </author>
-->
    <author fullname="Gyan S. Mishra" initials="G" surname="Mishra">
      <organization>Verizon Inc.</organization>
      <address>
        <postal>
          <street>13101 Columbia Pike</street>
          <city>Silver Spring</city>
          <code>MD 20904</code>
          <country>USA</country>
        </postal>
        <phone> 301 502-1347</phone>
        <email>gyan.s.mishra@verizon.com</email>
      </address>
    </author>

     <author initials="A" fullname="Aijun Wang" 
            surname="Wang">
      <organization>China Telecom</organization>
      <address>
        <postal>
          <street>Beiqijia Town, Changping District</street>
          <city>Beijing</city>
          <region> </region>
          <code>102209</code>
          <country>China</country>
        </postal>
        <email>wangaj3@chinatelecom.cn</email>
      </address>
    </author>

     <author initials="Y" fullname="Yisong Liu" 
            surname="Liu">
      <organization>China Mobile</organization>
      <address>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>

   <author initials="Y" fullname="Yanhe Fan" 
            surname="Fan">
      <organization>Casa Systems</organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>yfan@casa-systems.com</email>
      </address>
    </author>

     <author initials="B" fullname="Boris Khasanov" 
            surname="Khasanov">
      <organization>Yandex LLC</organization>
      <address>
        <postal>
          <street></street>
          <city>Moscow</city>
          <region></region>
          <code></code>
          <country></country>
        </postal>
        
        <email>bhassanov@yahoo.com</email>
      </address>
    </author>

   <author initials="L" fullname="Lei Liu" 
            surname="Liu">
      <organization>Fujitsu</organization>
      <address>
        <postal>
          <street> </street>
          <city> </city>
          <region></region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>liulei.kddi@gmail.com</email>
      </address>
    </author>

   <author initials="X" fullname="Xufeng Liu" 
            surname="Liu">
      <organization>Alef Edge</organization>
      <address>
        <postal>
          <street> </street>
          <city> </city>
          <region> </region>
          <code></code>
          <country>USA</country>
        </postal>
        <email>xufeng.liu.ietf@gmail.com</email>
      </address>
    </author>

<!--
    <author initials="M" fullname="Mehmet Toy" 
            surname="Toy">
      <organization> Verizon </organization>
      <address>
        <postal>
          <street></street>
          <city></city>
          <region></region>
          <country>USA</country>
        </postal>
        <email>mehmet.toy@verizon.com</email>
      </address>
     </author>

     <author initials="Z" fullname="Zhenqiang Li" 
            surname="Li">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <street>32 Xuanwumen West Ave, Xicheng District</street>
          <city>Beijing</city>
          <region> </region>
          <code>100053</code>
          <country>China</country>
        </postal>
        <email>lizhengqiang@chinamobile.com</email>
      </address>
    </author>
-->

    <date year="2025"/>

    <abstract>
     <t>This document describes extensions to
      Border Gateway Protocol (BGP) for distributing 
      a Bit Index Explicit Replication Traffic/Tree Engineering (BIER-TE) 
      path. 
      A new Tunnel Type for BIER-TE path 
      is defined to encode the information about a BIER-TE path.</t>
    </abstract>

    <note title="Requirements Language">
      <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
      "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
      document are to be interpreted as described in <xref
      target="RFC2119"></xref> <xref target="RFC8174"></xref>
      when, and only when, they appear in all
      capitals, as shown here.</t>
    </note>
  </front>

  <middle>
    <section title="Introduction">

	
    <t><xref target="RFC9262"/> introduces Bit Index 
        Explicit Replication (BIER) Tree Engineering (BIER-TE).
        It is an architecture for per-packet stateless explicit  
        point to multipoint (P2MP) multicast path/tree, which
        is called BIER-TE path, and
        based on the BIER architecture defined 
        in <xref target="RFC8279"/>.</t>

     <t>A Bit-Forwarding Router (BFR) in a BIER-TE domain has 
        a BIER-TE Bit Index Forwarding Table (BIFT).
        A BIER-TE BIFT on a BFR comprises a forwarding entry for 
        a BitPosition (BP) assigned to each of the adjacencies of the BFR. 
        If the BP represents a forward connected adjacency, 
        the forwarding entry for the BP forwards the multicast packet 
        with the BP to the directly connected BFR neighbor of the adjacency.
        If the BP represents a BFER (i.e., egress node) 
        or say a local decap adjacency,
        the forwarding entry for the BP decapsulates the multicast packet
        with the BP and passes a copy of the payload of the packet
        to the packet's NextProto within the BFR.</t> 

     <t>A Bit-Forwarding Ingress Router (BFIR) in a BIER-TE domain
        receives the information or instructions about 
        which multicast flows/packets are mapped to which BIER-TE paths 
        that are represented by BitPositions or say BitStrings.
        After receiving the information or instructions,
        the ingress node/router encapsulates the multicast packets 
        with the BitStrings for the corresponding BIER-TE paths,
        replicates and forwards the packets with the BitStrings
        along the BIER-TE paths.

        When the BitStrings is for a regular BIER path, the multicast 
        packet is forwarded along the BIER path.</t>

     <t>This document proposes some procedures and extensions 
         to BGP for distributing a BIER-TE path to      
         the Bit-Forwarding Ingress Router (BFIR) of the path.
         It specifies a way of encoding the information about 
         a BIER-TE path in a BGP UPDATE message,
         which can be distributed to the BFIR of the path.</t> 
<!--
      <t>This document defines a new Subsequent Address Family
         Identifier (SAFI). In a BGP UPDATE message, 
         this new SAFI and the existing AFI for IPv4/IPv6 pair
         uses a new NLRI for indicating a BIER-TE Path.
         The information about the path is included in 
         the attributes.</t>
-->


    <section title="Terminologies">
    <t>The following terminologies are used in this document.
      <list style="hanging" hangIndent="6">
       <t hangText="BIER:">Bit Index Explicit Replication.</t>
       <t hangText="BIER-TE:">BIER Tree Engineering.</t>
       <t hangText="BFR:">Bit-Forwarding Router.</t>
       <t hangText="BFIR:">Bit-Forwarding Ingress Router.</t>
       <t hangText="BFER:">Bit-Forwarding Egress Router.</t>
       <t hangText="BFR-id:">BFR Identifier. 
          It is a number in the range [1,65535].</t>
       <t hangText="BFR-NBR:">BFR Neighbor.</t>

       <t hangText="BFR-prefix:">An IP address (either IPv4 or IPv6) of a BFR.</t>
       <t hangText="BIRT:">Bit Index Routing Table. 
          It is a table that maps from the BFR-id (in a particular sub-domain)
          of a BFER to the BFR-prefix of that BFER, and to the BFR-NBR 
          on the path to that BFER.</t>
       <t hangText="BIFT:">Bit Index Forwarding Table.</t>
       <t hangText="P-tunnel:">A multicast tunnel through the network 
          of one or more SPs.</t>
       <t hangText="PMSI:">Provider Multicast Service Interface.
          PMSI is an abstraction that represents a multicast service
          for carrying packets.  A PMSI is instantiated via one or 
          more P-tunnels.</t>
       <t hangText="I-PMSI A-D Route:">Inclusive PMSI Auto-Discovery
          route.</t>
       <t hangText="S-PMSI A-D route:">Selective PMSI Auto-Discovery
          route.</t>
       <t hangText="x-PMSI A-D route:">A route that is either 
          an I-PMSI A-D route or an S-PMSI A-D route.</t>
      </list>
     </t>
    </section> <!-- Terminologies -->
    </section> <!-- Introduction -->


    <section title="Overview of BGP for BIER-TE Path">
      <t>This section briefs the BGP for BIER-TE path and illustrates 
         some details through a simple example BIER-TE topology.</t>

      <section title="Example BIER-TE Topology with BGP">
        <t>An example BIER-TE domain topology using SDN controller 
           with a BGP to distribute BIER-TE path
           is shown in <xref target="bier-top-1"/>.
           There are 8 nodes/BFRs A, B, C, D, E, F, G and H in the domain.
           Nodes/BFRs A, H, E, F and D are BFIRs (i.e., ingress nodes) 
           or BFERs (i.e., egress nodes).
           The controller has a BGP session with 
           each of the edge nodes in the domain, 
           including BFIRs (i.e., ingress nodes A, H, E, F and D),
           and each of the non edge nodes in the domain
           (i.e., nodes B, C and G).
 
           Note that some of connections and the BGP on each edge 
           node are not shown in the figure.
           
           <figure anchor="bier-top-1" 
           title="Example BIER-TE Topology with Controller">
  <artwork> <![CDATA[
                    +------------------------------------+
                    |      SND controller with BGP       |
                    +------------------------------------+
                    /        ...         \               \
                   /                      \               \
                  /                    4'  \   17'    18'  \ 
                 /            /-----------( G )----------( H )
                /            /           19'\_______   12'/4
               /            /                _______)____/   
              /            /                /      (_____      
             /            /3'              /             \   
            /   1'   2'  /    5'     6'   /11'  13'    20'\ 
 (CE) --- ( A )--------( B )------------( C )------------( D )
            5            \7'              \15'       14'   1 
                          \                \
                           \8'   9'    10'  \16'
                          ( E )------------( F )
                            3                2   ]]></artwork>
</figure>

           Nodes/BFRs D, F, E, H and A are BFERs (or BFIRs) and have 
           local decap adjacency BitPositions 1, 2, 3, 4, and 5 respectively.
</t>
<!--
           For simplicity, these BPs are represented by (SI:BitString),
           where SI = 0 and BitString is of 8 bits. 
           BPs 1, 2, 3, 4, and 5 are represented by
           1 (0:00000001), 2 (0:00000010), 3 (0:00000100), 4 (0:00001000) 
           and 5 (0:00010000) respectively. </t>
-->

         <t>The BitPositions for the forward connected adjacencies 
            are represented by i', where i is from 1 to 20. 
</t>
<!--
            In one option, they are encoded as (n+i), 
            where n is a power of 2 such as 32768.
            For simplicity, these BitPositions are represented 
            by (SI:BitString),
            where SI = (6 + (i-1)/8) and BitString is of 8 bits. 
            BitPositions i' (i from 1 to 20) are represented by
            1'(6:00000001), 2'(6:00000010), 3'(6:00000100), 4'(6:00001000), 
            5'(6:00010000), 6'(6:00100000), 7'(6:01000000), 8'(6:10000000),
            9'(7:00000001), 10'(7:00000010), . . . , 16'(7:10000000),
            17'(8:00000001), 18'(8:00000010), . . . , 20'(8:00001000).</t>
-->
<!--
        <t>For a link between two nodes X and Y, 
           there are two BitPositions for two forward connected adjacencies.
           These two forward connected adjacency BitPositions are assigned 
           on nodes X and Y respectively. 
           The BitPosition assigned on X is the forward connected 
           adjacency from Y to X.
           The BitPosition assigned on Y is the forward connected 
           adjacency from X to Y.</t>

        <t>For example, for the link between nodes B and C in the figure,
           two forward connected adjacency BitPositions 5' and 6' 
           are assigned to two ends of the link.
           BitPosition 5' is assigned on node B to B's end of the link. 
           It is the forward connected adjacency from C to B.
           BitPosition 6' is assigned on node C to C's end of the link. 
           It is the forward connected adjacency from B to C.</t>
-->
      </section> <!-- Example BIER-TE Topology with BGP -->


<!--
      <section title="BIER-TE BIFT on a BFR">
        <t>Every BFR in a BIER-TE domain has 
           a BIER-TE BIFT. 
           For the BIER-TE topology in <xref target="bier-top-1"/>,
           each of 8 nodes/BFRs A, B, C, D, E, F, G and H 
           has its BIER-TE BIFT for the topology.</t>

        <t>The controller sends each
           BFR all its BitPositions 
           including its local decap adjacency BitPosition and 
           forward connected adjacency BitPositions 
           after the BitPositions are determined and assigned 
           in the controller.
           For example, the controller sends  
           BFR A BitPosition 5 and 
           BitPosition 2', where the former is A's local decap 
           adjacency BitPosition and the latter is 
           A's forward connected adjacency BitPosition from A to B.

           The controller sends BFR B
           BitPositions 1', 4', 6' and 8', which are 
           B's forward connected adjacency BitPositions from 
           B to A, G, C and E respectively.</t>

        <t>When a BFR (i.e., the BGP running on the BFR) 
           receives its BitPositions from the controller,
           it creates its BIER-TE BIFT based on them.
           For example, when BFR A receives its BitPositions,  
           it creates its BIER-TE BIFT, which is shown in
           <xref target="bift-bfr-a"/>. 
           There are two forwarding entries in the BIFT.</t>

         <t>The 1st forwarding entry in the BIFT will locally decapsulate  
            a multicast packet with BitPosition 5 and pass a copy of the  
            payload of the packet to the packet's NextProto.</t>
         <t>The 2nd forwarding entry in the BIFT will forward a multicast  
            packet with BitPosition 2' to B.

<figure anchor="bift-bfr-a" 
        title="BIER-TE BIFT on BFR A">
  <artwork> <![CDATA[
           +==================+==============+============+
           |   Adjacency BP   |    Action    |  BFR-NBR   |
           |  (SI:BitString)  |              | (Next Hop) |
           +==================+==============+============+
           | 5  (0:00000005)  | local-decap  |            |
           +==================+==============+============+
           | 2' (6:00000010)  | fw-connected |     B      |
           +==================+==============+============+]]></artwork>
</figure> 
       </t>

         <t>When BFR B receives its BitPositions 1', 4', 6' and 8',  
           it creates its BIER-TE BIFT, which is shown in
           <xref target="bift-bfr-b"/>. 
           There are four forwarding entries in the BIFT.</t>

         <t>The 1st forwarding entry in the BIFT will forward a multicast   
            packet with BitPosition 1' to A.</t>
         <t>The 2nd forwarding entry in the BIFT will forward a multicast  
            packet with BitPosition 4' to G.</t>
         <t>The 3rd forwarding entry in the BIFT will forward a multicast  
            packet with BitPosition 6' to C.</t>
         <t>The 4-th forwarding entry in the BIFT will forward a multicast 
            packet with BitPosition 8' to E.

<figure anchor="bift-bfr-b" 
        title="BIER-TE BIFT on BFR B">
  <artwork> <![CDATA[
           +==================+==============+============+
           |   Adjacency BP   |    Action    |  BFR-NBR   |
           |  (SI:BitString)  |              | (Next Hop) |
           +==================+==============+============+
           | 1' (6:00000001)  | fw-connected |     A      |
           +==================+==============+============+
           | 4' (6:00001000)  | fw-connected |     G      |
           +==================+==============+============+
           | 6' (6:00100000)  | fw-connected |     C      |
           +==================+==============+============+
           | 8' (6:10000000)  | fw-connected |     E      |
           +==================+==============+============+]]></artwork>
</figure>
         </t>
      </section> 
-->
<!-- BIER-TE BIFT on a BFR -->


      <section title="Distributing Path to Ingress">
        <t>This section describes how the SDN controller distributes 
           a BIER-TE path to its ingress node.</t>

        <t>Suppose that node A in <xref target="bier-top-1"/>
           wants to have a BIER-TE path  
           from ingress node A to egress nodes H and F.
           The path satisfies a set of constraints.

           The controller obtains the 
           request from an application or user configuration.
           It finds a BIER-TE path satisfying the constraints
           and distributes the path to ingress node A.</t>

        <t>The controller advertises 
           a BGP Update message to all its BGP peers, 
           where the message contains the information about the path,
           a route target (RT) matching
           the BGP identifier (ID) of ingress node A.
           Each of the BGP peers advertises the received Update
           to its BGP neighbors 
           according to normal BGP propagation rules.
           Eventually, ingress node A accepts this message 
           after determining the RT in the message matches its BGP ID
           and installs a forwarding entry for the BIER-TE path,
           which imports the packets to be transported by the path
           into the path.
           </t>
<!--
        <t>In another case, ingress node A 
           sends a request for the path to the controller. 
           The request contains the set of constraints, 
           the ingress node and the egress nodes.
           After receiving the request, the controller computes
           a BIER-TE path, which satisfies the constraints
           and is from the given ingress node
           to the egress nodes. 
           The controller distributes a Update message 
           with the explicit path to ingress node A.</t>  
-->
<!--
        <t>For example, assume that   
           the BIER-TE path computed by the controller
           traverses 
           the link/adjacency from A to B (indicated by BP 2'),
           the link/adjacency from B to G (indicated by BP 4') and 
           the link/adjacency from B to C (indicated by BP 6'), 
           the link/adjacency from G to H (indicated by BP 18'), 
           and the link/adjacency from C to F (indicated by BP 16').
           This path is represented by {2', 4', 6', 16', 18', 2, 4}, 
           where BitPositions 2 and 4 indicate egress nodes F and H 
           respectively.
           The Update message distributed to the BGP on node A 
           by the controller 
           contains the path represented by 
           {2', 4', 6', 16', 18', 2, 4}.</t>

     <t>After receiving the BIER-TE path, the ingress node 
        installs a forwarding entry for the path.
        For any packet from CE to be 
        transported by the path, the ingress node encapsulates 
        the packet with the BitPositions representing the path and
        forwards the packet according to its BIFT.</t>
 
     <t>For example, when ingress node A receives the path 
        represented by BitPositions {2', 4', 6', 16', 18', 2, 4}, it 
        installs a forwarding entry for the path. Node A 
        encapsulates a packet to be carried by the path 
        with a BIER header containing BitPositions 
        {2', 4', 6', 16', 18', 2, 4} using the entry and forwards 
        the encapsulated packet along the path according to its BIFT.</t>

     <t>A forwards the packet to B according to the forwarding
        entry for BP 2' in its BIFT.</t>

     <t>After receiving the packet from A,
        B forwards the packet to G and C according to the forwarding 
        entries for BPs 4' and 6' in B's BIFT respectively.
        The packet received by G has path {16', 18', 2, 4}.
        The packet received by C has path {16', 18', 2, 4}. </t> 

     <t>After receiving the packet from B, G sends the
        packet to H according to the forwarding 
        entry for BP 18' in G's BIFT.</t> 

     <t>After receiving the packet from B, C sends the
        packet to F according to the forwarding 
        entry for BP 16' in C's BIFT.</t> 

     <t>Egress node H of the BIER-TE path receives
        the packet with BitPosition 4. It decapsulates the
        packet and pass the payload of
        the packet to the packet's NextProto.</t>

     <t>Egress node F of the BIER-TE path receives
        the packet with BitPosition 2. It decapsulates the
        packet and pass the payload of
        the packet to the packet's NextProto.</t>
-->
      </section> <!-- Procedures on Ingress -->
    </section> <!-- Overview of BGP for BIER-TE -->


    <section title="Extensions to BGP">

      <t>This section defines a new Tunnel Type (or say TLV) 
         for BIER-TE path/tunnel 
         under Tunnel Encapsulation Attribute and a new SAFI.
      This new SAFI and the existing AFI for IPv4/IPv6 pair
      uses a new NLRI for indicating a BIER-TE Path.
       </t>

      <section title="New SAFI and NLRI">
        <t>A new SAFI, called BIER-TE path SAFI, is defined.
        Its codepoint (TBD1) is to be assigned by IANA.

        This new SAFI and the existing AFI for IPv4/IPv6 pair 
        uses a new NLRI,
        which is defined as follows:

        <figure anchor="nlri-formet" 
                title="NLRI Format">
            <artwork><![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
+-+-+-+-+-+-+-+-+
|  NLRI Length  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Distinguisher (4 octets)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Tunnel Identifier (11/23 octets)              ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
          </figure>

Where:
<list style="hanging">
<t hangText="  NLRI Length:"> 1 octet represents the length of NLRI.
   If the Length is anything other than 15 or 27, the NLRI is corrupt 
   and the enclosing UPDATE message MUST be ignored.</t>
<t hangText="  Distinguisher:"> 4 octet value uniquely identifies 
   the content/BIER-TE path. </t>
<t hangText="  Tunnel Identifier:"> 11/23 octet value contains:
               <list style="hanging" hangIndent="6"> 
                 <t hangText=" * sub-domain-id (1 octet):">
                    It is id of the sub domain through which 
                    the BIER-TE tunnel crosses.</t>
                 <t hangText=" *  BFR-id (2 octets):">
                    It is the BFR-id of the BFIR of the BIER-TE tunnel.</t>
                 <t hangText=" * Tunnel-ID (4 octets):">
                    It is a number uniquely identifying 
                    a BIER-TE tunnel within the BFIR and sub domain.</t>
                 <t hangText=" * BFR-prefix (4/16 octets):">
                    It is a BFR-prefix of the BFIR of the BIER-TE tunnel.
                    It occupies 4 octets for IPv4 and 
                    16 octets for IPv6.</t>
               </list></t>
</list>
</t>
      </section> <!-- New SAFI and NLRI -->
   
      <section title="New Tunnel Type for BIER-TE">

      <t>A new Tunnel Type (or say TLV), called BIER-TE Path or Tunnel, 
         is defined under Tunnel Encapsulation Attribute in
         <xref target="RFC9012"/>. 
         Its codepoint is to be assigned by IANA.         
         This new TLV with a number of new sub-TLVs 
         encodes the information about a BIER-TE path.</t>

      <t>The structure encoding the information about a BIER-TE 
         path is shown below.
        <figure>
            <artwork><![CDATA[
    Attributes:
        Tunnel Encaps Attribute (23)
            Tunnel Type (TBD2): BIER-TE Path
                Path BitStrings sub-TLV
                Path Name sub-TLV
                Traffic Description sub-TLV
                ]]></artwork>
          </figure>

Where:
<list style="symbols">
<t>Tunnel Type (TBD2) is to be assigned by IANA.</t>
<t>Path BitStrings sub-TLV encodes the bit positions of the
   BIER-TE path. </t>
<t>Path Name sub-TLV encodes the name of a BIER-TE path.</t>
<!--
<t>Service sub-TLV encodes the identifier (ID) of the service
   that is carried by the BIER-TE path.</t>
-->
<t>Traffic Description sub-TLV encodes the multicast traffic 
   that is transported by the BIER-TE path.</t>
</list>
</t>
    </section> <!-- New Tunnel Type -->

       <section anchor="path-bp-sub-TLV" 
             title="Path BitStrings Sub-TLV">
      <t>The bit positions of a BIER-TE path are encoded in a
         Path BitStrings sub-TLV. 
         The format of the sub-TLV is illustrated below.</t>
<t>
<figure anchor="path-bp-sub-tlv-formet" 
        title="Path BitStrings Sub-TLV Format">
<artwork> <![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 (variable)      |  BitStringLen |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                BIFT-id-1              |  RSV  |     SI-1      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            BitString-1                        ~
|                                                               ~
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
:                                                               :
:                                                               :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                BIFT-id-n              |  RSV  |     SI-n      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            BitString-n                        ~ 
|                                                               ~ 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
</t>
<t>
     <list style="hanging">
       <t hangText="Type:"> Its value (TBD3) is to be assigned by IANA.</t>
       <t hangText="Length:">It is variable.</t>

       <t hangText="BitStringLen (Bit String Length) - 8 bits:"> 
          The length in bits of the BitString field according to 
          <xref target="RFC8296"/>. 
          If k is the length of the BitString, the value of BitStringLen
          is log2(k)-5. For example, BitStringLen = 1 indicates k = 64,
          BitStringLen = 7 indicates k = 4096.</t>
<!--
         <t hangText="sub-domain-id:">Unique value identifying the BIER 
            sub-domain within the BIER domain.</t>
         <t hangText="MT-ID:">Multi-Topology ID identifying the topology 
            that is associated with the BIER sub-domain.</t>
-->
      <t hangText="&lt;BIFT-id, SI, BitString&gt; tuple:">
      Each tuple &lt;BIFT-id-i, SI-i, BitString-i&gt; (i = 1, 2, ..., n)
      represents/encodes a set of bit positions on the BIER-TE path
      with a BIFT ID. 
      All the tuples in the sub-TLV 
      represent/encode the BIER-TE path 
      (i.e., all the bit positions of the BIER-TE path).</t>
      </list>
</t>
      </section> <!-- Path BitPositions Sub-TLV -->

      <section anchor="path-name" title="Path Name Sub-TLV">
      <t>The name of a BIER-TE path is encoded in a
         Path Name sub-TLV. 
         The format of the sub-TLV is illustrated below.</t>
<t>
<figure anchor="path-name-sub-tlv-formet" 
        title="Path Name Sub-TLV Format">
<artwork> <![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 (TBD4) |        Length (variable)      |   Reserved    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                        Path Name String                     //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
</figure>
</t>
<t>
     <list style="hanging">
       <t hangText="Type:"> Its value (TBD4) is to be assigned by IANA.</t>
       <t hangText="Length:">It is variable.</t>
       <t hangText="Reserved:">MUST be set to zero by the sender 
          and MUST be ignored by the receiver.</t>

      <t hangText="Path Name String:">
      It represents/encodes the name of the BIER-TE path 
      in a string of chars.</t>
      </list>
</t>
      </section> <!-- Path Name Sub-TLV -->

    <section anchor="Traffic-sub-TLV" 
             title="Traffic Description Sub-TLVs">
      <t>A Traffic Description Sub-TLV describes the traffic to be 
      imported into a BIER-TE path. 
      Two Traffic Description Sub-TLVs are defined. 
      They are multicast traffic sub-TLVs for IPv4 and IPv6.</t>

      <t>The multicast traffic sub-TLVs for IPv4 and IPv6
         are shown in <xref target="traffic-ipv4-sub-tlv"/> and
         <xref target="traffic-ipv6-sub-tlv"/>
         respectively.

<figure anchor="traffic-ipv4-sub-tlv" 
        title="Multicast Traffic for IPv4 Sub-TLV">
<artwork> <![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 (TBD5) |             Length            |   Reserved    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |        Reserved           |S|G|  Src Mask Len | Grp Mask Len  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                Source Address (up to 4 bytes)                 ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |            Group Multicast Address (up to 4 bytes)            ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>

<figure anchor="traffic-ipv6-sub-tlv" 
        title="Multicast Traffic for IPv6 Sub-TLV">
<artwork> <![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 (TBD6) |             Length            |   RESERVED    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |        Reserved           |S|G|  Src Mask Len | Grp Mask Len  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Source Address                         ~
 ~                       (up to 16 bytes)                        ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                   Group multicast Address                     ~
 ~                       (up to 16 bytes)                        ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
</t>
<t>
   The address fields and address mask lengths of the two Multicast
   Traffic
   sub-TLVs contain source and group prefixes for matching
   against packets noting that the two address fields are up to 32 bits
   for an IPv4 Multicast Traffic and up to 
   128 bits for an IPv6 Multicast Traffic.
</t>
<t>
   The Reserved field MUST be set to zero and ignored on receipt.
</t>
<t>
   Two bit flags (S and G) are defined to describe the multicast
   wildcarding in use.  If the S bit is set, then source wildcarding is
   in use and the values in the Source Mask Length and Source Address
   fields MUST be ignored.  If the G bit is set, then group wildcarding
   is in use and the values in the Group Mask Length and Group multicast
   Address fields MUST be ignored.  The G bit MUST NOT be set unless the
   S bit is also set: if a Multicast Traffic sub-TLV is received
   with S bit = 0 and G bit = 1 the receiver MUST respond with an error
   (Malformed Multicast Traffic).
</t>
<t>
   The three multicast mappings may be achieved as follows:
</t>
<t>     
    <list style="hanging" hangIndent="6">
       <t hangText="(S, G):"> 
          S bit = 0, G bit = 0, the Source Address and Group
          multicast Address prefixes are both used to define 
          the multicast traffic.</t>
       <t hangText="(*, G):"> 
          S bit = 1, G bit = 0, the Group multicast Address prefix
          is used to define the multicast traffic, but the Source 
          Address prefix is ignored.</t>
       <t hangText="(*, *):"> 
          S bit = 1, G bit = 1, the Source Address and Group
          multicast Address prefixes are both ignored.</t>
    </list>
</t>

    </section> <!-- Traffic Description sub-TLVs -->


<!--
    <section anchor="Service-sub-TLV"
             title="Service Sub-TLVs">
      <t>A Service Sub-TLV contains a service ID or label to be added 
      into a packet to be carried by a BIER-TE path.
      It has three formats: 
      the first one for the service identified by a label,
      the second one for the service identified by a service 
      identifier (ID) of 32 bits, and 
      the third one for the service identified by a service 
      identifier (ID) of 128 bits. 
      Their formats are illustrated below.</t>
<t>
<figure anchor="service-label-sub-tlv" 
        title="Service Label Sub-TLV">
<artwork> <![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 (TBD7) |           Length (5)          |   Reserved    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |        zero           |       Service Label (20 bits)         |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
</t>
<t>
     <list style="hanging">
       <t hangText="Type:"> Its value (TBD5) is to be assigned by IANA.</t>
       <t hangText="Length:"> 5.</t>
       <t hangText="Reserved:">MUST be set to zero by the sender 
          and MUST be ignored by the receiver.</t>
       <t hangText="Service Label:">the least significant 20 bits. 
          It represents a label of 20 bits.</t>
      </list>
</t>


<t>
<figure anchor="service-ID-sub-tlv" 
        title="32 Bits Service ID Sub-TLV">
<artwork> <![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 (TBD8) |           Length (5)          |   Reserved    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Service ID (4 octets)                  |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
</t>
<t>
     <list style="hanging">
       <t hangText="Type:"> Its value (TBD6) is to be assigned by IANA.</t>
       <t hangText="Length:"> 5.</t>
       <t hangText="Reserved:">MUST be set to zero by the sender 
          and MUST be ignored by the receiver.</t>
       <t hangText="Service ID:"> 4 octets. 
          It represents a Service Identifier (ID) of 32 bits.</t>
      </list>
</t>

<t>
<figure anchor="service-ID-16-sub-tlv" 
        title="128 Bits Service ID Sub-TLV">
<artwork> <![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 (TBD9) |           Length (17)         |   Reserved    |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                        Service ID (16 octets)                 |
 ~                                                               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
</t>
<t>
     <list style="hanging">
       <t hangText="Type:"> Its value (TBD7) is to be assigned by IANA.</t>
       <t hangText="Length:"> 17.</t>
       <t hangText="Reserved:">MUST be set to zero by the sender 
          and MUST be ignored by the receiver.</t>
       <t hangText="Service ID:"> 16 octets. 
          It represents a Service Identifier (ID) of 128 bits.</t>
      </list>
</t>
    </section>
--> <!-- Service sub-TLVs -->


    </section> <!-- Extensions to BGP -->



    <section anchor="Security" title="Security Considerations">
      <t>Protocol extensions defined in this document do not 
      affect the BGP security other than those as discussed 
      in the Security Considerations section of 
      <xref target="RFC9012"/>.</t>
    </section>

    <section anchor="Acknowledgements" title="Acknowledgements">
     <t>The authors of this document would like to thank 
     Tony Przygienda, Susan Hares, and Jeffrey Zhang
     for their comments.</t>
    </section>

    <section anchor="IANA" title="IANA Considerations">

    <section anchor="existing-safi" 
      title="Existing Registry: SAFI Parameters">
      <t>This document requests assigning a new SAFI in the registry 
         "Subsequent Address Family Identifiers (SAFI) Parameters" as 
         follows:
        <figure>
            <artwork align="center"><![CDATA[
   +=======================+=========================+=============+
   | Code Point            | Description             | Reference   |
   +=======================+=========================+=============+
   | TBD1(179 suggested)   |  BIER-TE Policy SAFI    |This document|
   +=======================+=========================+=============+]]></artwork>
          </figure>
</t>
    </section>

    <section anchor="existing-tunnel-type" 
      title="Existing Registry: BGP TEA Tunnel Types">
      <t>This document requests assigning a new Tunnel-Type in the 
         registry "BGP Tunnel Encapsulation Attribute Tunnel Types"
         as follows:
        <figure>
            <artwork align="center"><![CDATA[
   +=======================+=========================+=============+
   | Code Point            | Description             | Reference   |
   +=======================+=========================+=============+
   |  TBD2(16 suggested)   |  BIER-TE Tunnel/Path    |This document|
   +=======================+=========================+=============+]]></artwork>
          </figure>
</t>
    </section>

    <section anchor="existing-tunnel-type-subtlvs" 
      title="Existing Registry: BGP TEA sub-TLVs">
      <t>This document requests assigning a few of new sub-TLVs 
         in the registry "BGP Tunnel Encapsulation Attribute sub-TLVs"
         as follows:
        <figure>
            <artwork align="center"><![CDATA[
   +=======================+=========================+=============+
   | Code Point            | Description             | Reference   |
   +=======================+=========================+=============+
   |  TBD3(16 suggested)   |  Path BitStrings        |This document|
   +=======================+=========================+=============+
   |  TBD4(17 suggested)   |  Path Name              |This document|
   +=======================+=========================+=============+
   |  TBD5(18 suggested)   |  IPv4 Multicast Traffic |This document|
   +=======================+=========================+=============+
   |  TBD6(19 suggested)   |  IPv6 Multicast Traffic |This document|
   +=======================+=========================+=============+
]]></artwork>
          </figure>
</t>
    </section>

    </section>


  </middle>

  <back>
    <references title="Normative References">
      <?rfc include="reference.RFC.2119"?>
      <?rfc include="reference.RFC.8174"?>
      <?rfc include="reference.RFC.8279"?>
      <?rfc include="reference.RFC.8296"?>
      <?rfc include="reference.RFC.9012"?>
      <?rfc include="reference.RFC.6514"?>
    </references>

    <references title="Informative References">
      <?rfc include="reference.RFC.9262"?>
    </references>

<!-- Appendix -->
      <section title="Extensions to PMSI_TUNNEL Attribute">
      <t>This section defines a new Tunnel Type (or TLV) for  
          BIER-TE path/tunnel 
          under the PMSI_TUNNEL Attribute (PTA) defined
          in <xref target = "RFC6514"/>.
          It describes a couple of new sub-TLVs 
          encoding the information about a BIER-TE path.
       </t>

      <section title="New Tunnel Type for BIER-TE">
       <t>The PMSI Tunnel attribute carried by an x-PMSI A-D 
          route identifies P-tunnel for PMSI. 
          For the PTA with Tunnel Type BIER-TE, 
          the PTA is constructed by the SDN controller and 
          distributed to the ingress node of the BIER-TE tunnel.
       </t>

       <t>The format of the PMSI_TUNNEL Attribute with the 
          new Tunnel Type (TBD) for BIER-TE is shown in
          <xref target = "pmsi-tunnel-bier-te-tlv"/>. </t>
<t>
<figure anchor="pmsi-tunnel-bier-te-tlv" 
        title="PTA with Tunnel Type for BIER-TE">
<artwork> <![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
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  Attr Flags   | Attr Type(22) | Length(1/2 byte)   ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |      Flag     |TunnelType(TBD)|          MPLS Label           |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  MPLS Label   |       Tunnel Identifier (11/23 bytes)         |
 +-+-+-+-+-+-+-+-+                                               +
 |                                                               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |                             sub-TLVs                          ~
 ~                                                               ~
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
</figure>
</t>

       <t>For BIER-TE tunnel/path, the fields in the PTA are set as 
          follows:
          <list style="hanging" hangIndent="6"> 
            <t hangText=" o Tunnel Type:">It is set to be TBD,
               indicating BIER-TE tunnel.</t>
            <t hangText=" o Tunnel Identifier:">It contains: 
sub-domain-id of 1 byte, 
BIER-TE tunnel BFIR's BFR-id of 2 bytes,
Tunnel-ID of 4 bytes, and 
BIER-TE tunnel BFIR's BFR-prefix of 4/16 bytes for IPv4/IPv6.
            </t>
            <t hangText=" o sub-TLVs:">It contains
               a Path BitPositions sub-TLV encoding an explicit 
               BIER-TE path. It may include a Path Name sub-TLV 
               for the name of the BIER-TE path.
<!-- and
               a Service sub-TLV for the service that the BIER-TE
               tunnel carries. -->
            </t>
            <t hangText=" o Others:"> The other fields are set 
               according to <xref target = "RFC6514"/>.</t>
          </list>
       </t>
      </section> <!-- New Tunnel Type for BIER-TE -->

      </section> <!-- Extensions to PMSI_TUNNEL Attribute -->


  </back>
</rfc>
