<?xml version="1.0" encoding="US-ASCII"?>
<?rfc toc="yes"?>
<?rfc tocompact="yes"?>
<?rfc tocdepth="4"?>
<?rfc tocindent="yes"?>
<?rfc symrefs="yes"?>
<?rfc sortrefs="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<?rfc compact="yes"?>
<?rfc subcompact="no"?>
<?rfc strict="yes"?>
<rfc category="std" docName="draft-anish-spring-bimap-multicast-01" ipr="trust200902" submissionType="IETF">

  <!-- ***** FRONT MATTER ***** -->

  <front>
    <title>SRv6 Bitmap Multicast</title>

    <!-- add 'role="editor"' below for the editors if appropriate -->

    <author initials="A." surname="Peter" fullname="Anish Peter" role="editor">
      <organization>Individual</organization>
      <address>
      <postal>
      <city>Bangalore</city>
      <region>KA</region>
      <country>India</country>
      </postal>
      <email>anish.ietf@gmail.com</email>
      </address>
    </author>

    <date day="01" month="December" year="2025"/>

    <area>Routing</area>

    <workgroup> </workgroup>

    <keyword>SRv6</keyword>
    <keyword>Multicast</keyword>
    <keyword>Bitmap</keyword>
    <keyword>BIER</keyword>
    <keyword>Broadcast</keyword>

    <abstract>
  <t>Multicast forwarding in a network provides advantages in improving 
  the network usage and performance. In some cases it helps improve the
  operations in managing network. The major challenge in multicast operations
  is in managing the per-flow states in the network as required by all the
  legacy multicast frameworks. </t>
  <t>This document specifies a bitmap forwarding extension to SRv6 to support
  state-free forwarding model in a network.</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">RFC2119</xref>.</t>
    </note>
  </front>

  <middle>
  <section title="Introduction">
      <t>Segment routing with IPv6 as specified in 
      <xref target="RFC8986">RFC8986</xref>
      provides a source-routing solution for next
      generation network requirements. More applications and use-cases are
      finding a better solutions using SRv6. Along with this comes the need to
      support multicasting and broadcasting in such networks. The various
      use-cases for this would be stated in the subsequent sections.</t>
      <t>Broadcasting typically needs a point-to-multipoint (p2mp)
    distribution with all the nodes in the network being receivers.
    Multicasting would imply p2mp distribution along with
    multipoint-to-multipoint (mp2mp) packet distribution with the participants
    being pre-determined via a discovery or provisioning mechanism.</t>
      <t>Bit-Index-Explicit-Replication specified in 
      <xref target="RFC8279">RFC8279</xref>
      introduced a per-flow-state-free
      forwarding for multicast using a bit-indexed addressing of multicast
      receivers.</t>
      <t>This document introduces a bit-map based distribution schema in
      IPv6 networks to achieve p2mp distribution patterns. SRv6 introduced
      a new semantic to IPv6 address by fragmenting the address bits into
      Locator:Function:Argument construct to achieve the desired SR
      functionality. This document proposes a similar treatment of IPv6
      address to achieve BIER forwarding.</t>
      <t>
      Though-out this document non-reduced SID encap is presented. But
      a reduced SRH can also be used. This convention is followed to 
      improve clarity. 
      </t>
  </section>

  <section title="Network Overview">
    <t>BIER architecture puts forward a multicast forwarding based on
    "Bit-Index-Explicit-Replication". This architecture defines a BIER domain
    in which an ingress router would encapsulate p2mp packet with a BIER
    header
    <xref target="RFC8296">RFC8296</xref>
    . This BIER packet would be replicated to the egress routers identified
    by the ingress in its BIER header, over an optimal per-flow-stateless tree
    discovered with the underlay. </t>
  <t></t>
  </section>
  <section title="IPv6 Bit-Index Format">
  <t>This document provides a new semantic to the IPv6 address as
  SI_LOCATOR:BITSTRING:FUNCTION:ARGUMENT. This structure is partly borrowed from
  SRv6. The BITSTRING part is introduced to address the egress routers in
  the BIER subdomain by its bit index. From here on this format is called as
  Bit-Index-6 (BI6) </t>
  <t>BIER architecture envisages forwarding by identifying each egress router
  with an BFR-id. These BFR-id in forwarding translates to a Set-Identifier
  (SI) and Bitstring. In the IPv6 Bit-Index format, the SI is identified by
  the SI_LOCATOR and bitstring is encoded in the BITSTRING part of the BI6.
  The FUNCTION and ARGUMENT bits are part of the format. But depending on the
  network requirement their lengths may be set to 0 for using this bits for
  extended bitstring. </t>
  <t>SI_LOCATOR is defined as an anycast routable prefix to reach any one of 
  the specific set of
  routers in a SetIdentifier. Once a BI6 packet reaches a router that is part
  of a SI, The bit-index based part is referred to for forwarding towards the
  BFER's with the BIER forwarding principles. The semantics of the FUNC and
  ARG bits is global in the Sub-domain. The attributes of
  FUNCTION and ARGUMENT bits must be pre-determined for a BFER's in a BIER
  Set-Identifier.
  </t>
  <figure anchor="BIER6 address structure" title="Syntax of BIER6 address">
  <artwork>
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+-+-...-+-+...+-+
  | SI_LOCATOR |             BITSTRING              | FUNC | ARG  |
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+...+-+-+-+-+-+-+-+-+-+-...-+-+...+-+

  </artwork>
  </figure>
  <t>
  The SI_Locator present in the destination (anycast) address in the ipv6 header would provide a map to
  identify the BIFT-ID. 
  <!--The source address would help identify the BFIR.  -->
  </t>
  </section>

  <section title="Segment Routing Header">
  <t>
  In some scenarios there is a need to have multiple SID's to achieve the 
	  desired network forwarding. The scenarios could be 
	  <list>
		 <t> a. For sending a packet though a predefined path to the
		 first router in a BIER subdomain.  The application for this
		 is stated in the sub-sequent sections. </t>
		 <t> b. For sending a packet though a set of legacy systems
		 that may not support BI6 forwarding. </t>
		 <t> c. When sending packet on to a node reachable over a
		 transit LAN.</t>
	  </list>
  In such scenarios this document provides the structure of the SRH with a SID vector in addition to BIER SID. 
  </t>
  <figure anchor="SRH for BIER" title="Syntax of BIER SRH">
  <artwork>

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Last Entry   |     Flags     |              Tag              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|              128bit BI6 SID (SI_LOC::FUNC:ARG)                |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|            Segment List[1] (128-bit IPv6 address)             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
~                              ...                              ~
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|            Segment List[n] (128-bit IPv6 address)             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                                                             //
//         Optional Type Length Value objects (variable)       //
//                                                             //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  </artwork>
  </figure>
      <t>where:</t>
      <dl spacing="normal" newline="false">
        <dt>Next Header:</dt>
        <dd>Defined in <xref target="RFC8200" sectionFormat="comma" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8200#section-4.4" derivedContent="RFC8200"/>.</dd>
        <dt>Hdr Ext Len:</dt>
        <dd>Defined in <xref target="RFC8200" sectionFormat="comma" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8200#section-4.4" derivedContent="RFC8200"/>.</dd>
        <dt>Routing Type:</dt>
        <dd>4, defined in <xref target="RFC8754" sectionFormat="comma" section="2" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8754#section-2" derivedContent="RFC8754"/>.</dd>
        <dt>Segments Left:</dt>
        <dd>Defined in <xref target="RFC8200" sectionFormat="comma" section="4.4" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8200#section-4.4" derivedContent="RFC8200"/>.</dd>
        <dt>Last Entry:</dt>
        <dd>contains the index (zero based), in the Segment List including the SI6 SID,
          of the last element of the Segment List.</dd>
        <dt>Flags:</dt>
        <dd>8 bits of flags. <xref target="RFC8754" format="default" sectionFormat="of" derivedContent="RFC8754"/>. </dd>
        <dt>Tag:</dt>
        <dd>Tag: is described in <xref target="RFC8754" sectionFormat="comma" section="4.3.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8754#section-2" derivedContent="RFC8754"/>.</dd>
        <dt>Segment List[0..n]:</dt>
        <dd>Is described in <xref target="RFC8754" sectionFormat="comma" section="4.3.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8754#section-2" derivedContent="RFC8754"/>.</dd>
        <dt>TLV:</dt>
        <dd>Type Length Value (TLV) is described in <xref target="RFC8754" sectionFormat="comma" section="2.1" format="default" derivedLink="https://rfc-editor.org/rfc/rfc8754#section-2" derivedContent="RFC8754"/>.</dd>
      </dl>

  </section>

  <!--
  <section title="use-cases">
  </section>
  -->


  <section title="BI6 with multiple sub-domains">
  <t> 
  In a larger network having multiple sub-domains, a router may be programmed to do ingress replication of the traffic to multiple BIER subdomains. The ingress router may introduce a path vector as a SID list on each of this packet. 
  </t>
  </section>

  <!--
  <section title="OAM">
  </section>
  -->

  <section title="Interworking with non compatible BI6 Routers">
  <t>A network topology may have legacy devices which may not be capable of
  BI6 processing. When deploying BI6 the traffic may have to pass through some
  of these devices for loop-free forwarding. 
  </t>
  <section title="Node-SID insertion for intermediate node tunneling">
  <t>A router may come to know about the BI6 capability of all routers in an
  IGP area via the capabilities it has published in its IGP advertisement. Based
  on this IGP may form a map of adjacent BFR's. An adj-BFR may be reachable
  over a few hops of legacy nodes. If the BFR is
  not directly connected, then that node must compute the list of legacy nodes
  that must be passed through to reach that adjcent BFR. Attached to adjacency map
  the BFR must maintain the SID vector to reach that adj-BFR.
  </t>
  <t>
  When a packet gets forwarded to such an adjacency this SID vector would be
  inserted in that packet after doing the forwarding updates in
  the bitmap. 
  </t>
  </section>
  <section title="Receiving a BI6 packet">
  <t>
  When receiving a BI6 packet with the sid penultimate to BI6 being that of self. The
  router may strip the SRH of all the SID's other than the BI6-SID. Post this
  it must do BIER forwarding. The process of doing BIER forwarding involves
  BIT string updation according to BIER principles.
  </t>
  </section>
  </section>

  <!--
  <section title="Multicast FRR">

  </section>
  -->

  <section title="Routing extension header for BIER">
  <t>For the topologies needing longer bitstring to address more BFER's, the
  SRH as specified for SRV6 itself can be used for sending the bitmap. 
  This section provides the procedures involved in using this extension. 
  </t>
  <t>
  The existing SRH format supports encoding a SID stack to specify the
  multihop routing chain. 
  </t>
  <t>
  This SRH can be used for BIER bitmap by encoding the
  BITSTRING in the initial segment ID locations. The bitstring length is
  supposed to be infered from BIFT-ID (or from locator) in BI6, for this
  specification the bitsting length can be any multiple of 128. 
  </t>
  <t>
  The value of segments left must be set to roundup(length of the bitstream/128) + 
  the number of element present in the segment list.
  </t>
  <t>
  After the bitsting, the BI6 top-sid must follow, which would have the 
  SI_Locator, ARGUMENT and FUNCTION bits.
  </t>
  <figure anchor="SRH for BIER BITSRING " title="Syntax of BIER SRH for accomodating longer bitstrings">
  <artwork>

 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Next Header   |  Hdr Ext Len  | Routing Type  | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Last Entry   |     Flags   |B|              Tag              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                  BIER bit-string (m * 128)                    |
~                              ...                              ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|              128bit BI6 SID (SI_LOC::FUNC:ARG)                |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|          Segment List[n-m-1] (128-bit IPv6 address)           |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|                                                               |
~                              ...                              ~
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|            Segment List[n] (128-bit IPv6 address)             |
|                                                               |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                                                             //
//         Optional Type Length Value objects (variable)       //
//                                                             //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  </artwork>
  </figure>

  <t>where fields are as defined before unless stated below. </t>
      <dl spacing="normal" newline="false">
        <dt>Flags:</dt>
        <dd>8 bits of flags. <xref target="RFC8754" format="default" sectionFormat="of" derivedContent="RFC8754"/>. </dd>
      </dl>
      <artwork align="left" name="" type="" alt="">

	 0 1 2 3 4 5 6 7  
	+-+-+-+-+-+-+-+-+
	|U U U U U U U B|
	+-+-+-+-+-+-+-+-+

      </artwork>
      <dl newline="false" spacing="normal">
        <dt/>
        <dd>U: Unused and for future use. <bcp14>MUST</bcp14> be 0 on transmission and
              ignored on receipt.</dd>
        <dt/>
	<dd>B: In this last bit is set to 1 of the SRH includes a BIER BITSTRING. 
		It must not set when the SRH has the SI6 SID without an explicit BIER bitmap.</dd>
      </dl>
      <dl spacing="normal" newline="false">
        <dt>BIER Bitsring:</dt>
        <dd>BITSRING for BIER forwarding. The size of this BITSRING is 
      already known from tbe BIER configurations. It can also be figured out
      from a packet as the bits in between the BI6 SID and the common header. 
	</dd>
      </dl>
  </section>
  <section title="Scope for future work">
      <section title="Define egress functions based on FUNC and ARG bits">
      </section>
      <section title="IGP extension to support underlay">
      </section>
  </section>

  <!-- TODO TBW
  <section title="Management Considerations">
  <t></t>
  </section> 
  <section anchor="Acknowledgements" title="Acknowledgements">
  </section>

  <section title="Applicabilty for source routed bitmap forwarding">
  <t>P2MP/MP2MP model typically finds application in a closed management
  network. This would imply an data-center or an enterprise deployment. This
  section walks through the applicabilty of this specification in some of
  these networks.</t>
   <section title="Intra-Datacenter">
   <t></t>
   </section>
   <section title="Inter-Datacenter">
   <t></t>
   </section>
  </section>
  -->
  <section title="Subscriber management">
  <t>In BIER architecture the multicast egress routers must be learned by the
  ingress router. This discovery may happen via some out-of-band mechanism
  beyond the scope of this document.
  </t>
  </section>
  <section anchor="IANA" title="IANA Considerations">
  <t>This specification introduces new semantics for IPv6 address. Though this
  draft does not need any allocations, New IANA
  allocations would be required for the supplimentary specifications. 
  </t> 
  </section>

  <section anchor="Security" title="Security Considerations">
  <t>This document proposes a semantic for IPv6 address. The security
  challenges that apply to IPv6 and in the BIER architecture applies to the
  intended BI6 forwarding model specified here.
  </t>
  <t>Firewall/ACL/QoS policy filters usualy applied on multicast/broadcast
  traffic may not be applicable as such on a BI6 packet.
  </t>
  <t>With BI6 it becomes possible to a remote node to inject p2mp traffic into
  a network. Making important to have packet source validations.
  </t>
  <t>The further security scenarios would be added in the due course. </t>
  </section>

  <section title="Appendix 1: Bit-Index string length">
      <section title="Private IPv6 address for operations">
      <t>The Unique Local IPv6 address allocation 
	  <xref target="RFC4193">RFC4193</xref>
      provides free to use address blocks with
      SI_LOCATOR size of 48. This provides a maximum BI6 addressing space of 80 bit length. 
      </t>
      <t>The Bit-index string length that can be used would be determined by the
      SI_locator prefix length and the need for FUNC and ARG bits. Hence if Unique
      local address space is used, upto 80 BFER's can be addressed. 
      </t>
      </section>
  </section>

  <!-- TODO To be updated
  <section title="Appendix 2: Scaling considerations">
  <t>With this specification the typical scale a BIER domain would be less
  than 96 egress routers. On networks with larger scale the current proposal
  is to have multiple subdomains and to do ingress replication for traffic
  bound to various subdomains.
  </t>
  </section>
  -->

  </middle>

  <!-- *****BACK MATTER ***** -->

  <back>
    <references title="Normative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml"?>
      <!--SRv6
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8986.xml"?>
	-->
      <!--BIER-->
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8279.xml"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8296.xml"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8200.xml"?>
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8754.xml"?>
    </references>

    <references title="Informative References">
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.8986.xml"?>
      <!--pvt IPv6 -->
      <?rfc include="http://xml.resource.org/public/rfc/bibxml/reference.RFC.4193.xml"?>
    </references>
  </back>
</rfc>

