<?xml version="1.0" encoding="utf-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.6.9 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>

<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-eckert-msr6-rbs-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="msr6-rbs">Recursive Bitstring Structure (RBS) for Multicast Source Routing over IPv6 (MSR6)</title>

    <author initials="T." surname="Eckert" fullname="Toerless Eckert">
      <organization>Futurewei Technologies USA</organization>
      <address>
        <postal>
          <street>2220 Central Expressway</street>
          <city>Santa Clara</city>
          <code>CA 95050</code>
          <country>USA</country>
        </postal>
        <email>tte@cs.fau.de</email>
      </address>
    </author>
    <author initials="X." surname="Geng" fullname="Xuesong Geng">
      <organization>Huawei 2012 NT Lab</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>gengxuesong@huawei.com</email>
      </address>
    </author>
    <author initials="X." surname="Zheng" fullname="Xiuli Zheng">
      <organization>Huawei 2012 NT Lab</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>zhengxiuli@huawei.com</email>
      </address>
    </author>
    <author initials="R." surname="Meng" fullname="Rui Meng">
      <organization>Huawei 2012 NT Lab</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>mengrui@huawei.com</email>
      </address>
    </author>
    <author initials="F." surname="Li" fullname="Fengkai Li">
      <organization>Huawei 2012 NT Lab</organization>
      <address>
        <email>lifengkai@huawei.com</email>
      </address>
    </author>

    <date year="2022" month="October" day="24"/>

    
    <workgroup>PIM</workgroup>
    

    <abstract>


<t>This document defines an encoding and corresponding packet
processing procedures for native IPv6 multicast source routing (MSR6)
using a so-called "Recursive Bitstring" (RBS) address structure.</t>

<t>The RBS address structure encodes the source-routed multicast tree
as a tree of bitstrings. Each router on the tree only needs to
examine and perform replication for the one bitstring destined for it.</t>

<t>The MSR6/RBS IPv6 extension header encoding and processing is 
modeled after that of unicast source routing headers, RFC6554 and
RFC8754, and shares all elements that can be shared. To support
the RBS structure, it is replacing the "Segments Left" pointer to the next
segment with two fields to point to the next sub-tree to parse.</t>



    </abstract>



  </front>

  <middle>


<section anchor="overview"><name>Overview</name>

<section anchor="introduction"><name>Introduction</name>

<t>Eliminating hop-by-hop per-multicast-tree state in the forwarding plane
as well as the per-hop, per-tree control plane complexity that goes along with it
has long since been a concern against the deployment of multicast
services. Short of MSR6, there are no IETF standardized mechanisms to enable this 
with native hop-by-hop IPv6 forwarding according to <xref target="RFC8200"/> and per-hop stateless
replication.</t>

<t>"Multicast Source Routing over IPv6" (MSR6), is such a stateless, native IPv6
forwarding based multicast source routing (MSR6) solution, defined in <xref target="I-D.cheng-spring-ipv6-msr-design-consideration"/>.</t>

<t>MSR6 intends to be compatible with and reuse all the IPv6
mechanisms introduced by prior stateless hop-by-hop native IPv6 unicast forwarding,
including <xref target="RFC6554"/> (IPv6 Source Routing Header for networks using RPL routing),
and <xref target="RFC8754"/> (IPv6 Segment Routing Header for SRv6). The MSR6 extension
header and semantic shares as much as possible with these unicast approaches.
It especially attempts to allow introducing MSR6 as the multicast extension
to for the IPv6 Segment Routing architecture called SRv6 (<xref target="RFC8402"/> and <xref target="RFC8986"/>).</t>

<t>MSR6 considers two basic modes of forwarding: one is based on Shortest Path
First(SPF). In this mode, the tree only encodes tree leaves in the extension
header, but no traffic steering. This is called MSR6 BE mode.
The other mode is based on path steering with replication, which is called MSR6 TE mode.
<xref target="I-D.geng-msr6-traffic-engineering"/>, <xref target="I-D.chen-pim-srv6-p2mp-path"/> and
<xref target="I-D.geng-msr6-rlb-segment"/> have introduced structured segment lists in support
of MSR6 TE mode.</t>

<t>This document proposes a variant of an MSR6 extension header that
uses the "Recursive Bitstrings" (RBS) address structure to
encode the source-routed multicast tree as a tree of bitstrings, in support
of MSR6 TE mode. Each router on the tree only needs to examine and perform 
replication for the one bitstring encoded in the RBS-Address for that MSR.</t>

<t>The logic of MSR6/RBS replication and tree representation is derived (and simplified)
from the BIER-TE <xref target="RFC9262"/> architecture. The RBS address structure
replaces a single, end-to-end "flat" bitstring used in BIER-TE. This eliminates
the scalability and controller-plane complexity of BIER-TE.</t>

<t>Likewise, MSR6/RBS forwarding is based on the architecture specified in
<xref target="I-D.eckert-bier-cgm2-rbs"/>. Because this document intends to only specify
the forwarding specification, it does not cover the system architecture
details. Please refer to <xref target="RFC9262"/> and <xref target="I-D.eckert-bier-cgm2-rbs"/>
for system level details, such as scalability and complexity comparisons.</t>

<t>A comparison between this document and <xref target="I-D.xu-msr6-rbs"/> and <xref target="I-D.eckert-bier-cgm2-rbs"/>
is given below in <xref target="explanations"/>.</t>

</section>
<section anchor="fwd-overview"><name>Forwarding overview</name>

<t>In MSR6/RBS, routers are IPv6 MSR6 Segment Routers (MSR).
An ingress MSR (MSIR) forms an IPv6 packet and includes a
Multicast Source Routing Header (MRH) that uses the RBS
format. The MRH controls the steering and replication of
the packet across one or more MSR6 Segment Routers (MSR),
terminating the packet in one or more egress MSR (MSER).</t>

<t>Note that the terms MSR, MSIR and MSER are chosen to be
replicating the terms BFR, BFIR and BFER used for equivalent
router roles in BIER <xref target="RFC8279"/> and BIER-TE <xref target="RFC9262"/>.
BIER and BIER-TE are based on a separate L2.5 forwarding mechanism
and encapsulation, optimized for MPLS networks (see <xref target="RFC8296"/>).</t>

<t><xref target="FIG-RBS-Topo1"/> shows an example network topology and
an example multicast tree. R1 has connections to connections
to R2, R3, R4, R5 (not shown) and R6. For the purpose
of explaining RBS, it is irrelevant whether those
connections are separate L2 point-to-point links, links
or adjacencies on a shared LAN. Likewise, R3 has connections
to R1, R7, R8, R9 and R10, R4 has connections to
R1, R7, R8, R8 and R10, and and R9 has connections to R3, R4,
and some additional unnamed MSR.</t>

<figure title="Example Topology/RBS tree" anchor="FIG-RBS-Topo1"><artwork><![CDATA[
                +---+
                |R1 | (MSIR)
                +-+-+           
                  .            
     ....................................             
  ...           .            .          ....
  |             |            |            |
+-v-+         +-v-+        +-v-+        +-v-+
| R2| (MSER)  |R3 | (MSR)  |R4 | (MSR/  |R6 | (MSER)
+-+-+         +---+        +---+ MSER)  +---+
                .  ......    .
     .............      ............
  ...           .         .        ....
  |             |         |           |
+-v-+         +-v-+     +-v-+       +-v-+
|R7 | (MSER)  |R8 |     |R9 | (MSR) |R10| (MSER)
+-+-+         +---+     +---+       +---+
                          .
                        .....
                    .... more MSR...
]]></artwork></figure>

<t>R1 wants to send a packet that is to be received by R2, R4, R6,
R7, R10 and some MSER behind R9. Given how R7, R8, R8, R10 and
the MSR behind R9 can be reached via both either R3 and R4, there
is a packet steering and replication (traffic engineering) choice to
be made: R3 should forward and replicate to R8 and R8,
and R4 should replicate to to R9 (to reach the msr behind it,
and R10.</t>

<t>Every MSR has an RBS "Bit Index Forwarding Table" (RBS-BIFT) that defines
which BitPosition (BP) (1..N) indicates which adjacency.
<xref target="FIG-RBS-R1-BIFT"/>, shows the example RBS-BIFT for R1.</t>

<figure title="BIFT on R1" anchor="FIG-RBS-R1-BIFT"><artwork><![CDATA[
+--+-------+----------+
|BP|R Flag | Adjacency|
+--+-------+----------+
| 1|      0|   receive|
+--+-------+----------+
| 2|      0|       R2 |
+--+-------+----------+
| 3|      1|       R3 |
+--+-------+----------+
| 4|      1|       R4 |
+--+-------+----------+
| 5|      0|       R5 |
+--+-------+----------+
| 6|      0|       R6 |
+--+-------+----------+
]]></artwork></figure>

<t>The receive adjacency is the bit position indicating that the
packet is destined for the router itself. The R)ecursive
flag indicates whether the adjacency is an intermediate
MSR that acts as a replication point to further MSR. If an
MSR is never a transit but can always only be a leaf in
a multicast distribution tree, then R=0. This allows for more
compact encoding of the RBS address structure. In the example,
R2, R5 and R6 are connected to R1 and also leaf router in
the topology, hence they have R=0 in the R1 RBS-BIFT.</t>

<t>When a router receives and processes an IPv6 packet with
an MRH that uses the RBS address structure, the router
needs to only act upon the "RecursiveUnit" (RU) within
that address structure destined to it.</t>

<figure title="Structure of Recursive Unit" anchor="FIG-RU"><artwork><![CDATA[
       +---------------------+
       |  RecursiveUnit (RU) |
       +---------------------+
      .                       .
 .....                         ................
.                                              .
+-----------+-----+     +--------+---+     +----+
| Bitstring | AF1 | ... | AF(n-1)|RU1| ... |RU N|
+-----------+-----+     +--------+---+     +----+
]]></artwork></figure>

<t>As shown in <xref target="FIG-RU"/>, a Recursive Unit (RU) starts with
the Bitstring for the MSR to which this RU is intended.
In the example, the first MSR is R1, so the Bitstring
in the RU is as shown in <xref target="FIG-R1-BS"/></t>

<figure title="Bitstring for R1 in the example" anchor="FIG-R1-BS"><artwork><![CDATA[
 1 2 3 4 5 6 
+-+-+-+-+-+-+
|0|1|1|1|0|1|
+-+-+-+-+-+-+
]]></artwork></figure>

<t>When an MSR processes its RU, the length of the BS is
derived from the length of the BIFT. In the case of R1
it is therefore known to be 6 bits long.</t>

<t>To support replication via intermediate MSR, the RBS
address structure needs to contain for each of those
MSR a separate RU. In the example, the packet is to be
further replicated by R3 and R4 and then further on by R9.</t>

<t>The RU for R1 therefore needs to contain two further
RU, one for R3 and one for R4. The one for R4 will
also need to contain RUs for the MSR below it.</t>

<t>When creating packet copies to R3 and R4, R1 needs to
rewrite the MRH such that R3 and R4 will find their
respective RU. Therefore, R1 needs to be able to parse
its own RU such that it can locate those further RU for
R3 and R4. This is supported by the AddressFields (AF)
following the BS. Each AF indicates the length of one
RU that follows.</t>

<t>When N (in the example N=2) RU follow,
only N-1 (in the example 1) AF are needed, because the
length of the N'th RU can be calculated from 
the length of the RU minus the sum of the length of
the other RU as indicated in the N-1 AF.</t>

<figure title="RU for R1" anchor="FIG-R1-RU"><artwork><![CDATA[
 1 2 3 4 5 6 
+-+-+-+-+-+-+-..-+...+...+
|0|1|1|1|0|1|AF1 |RU1|RU2|
+-+-+-+-+-+-+-..-+...+...+
]]></artwork></figure>

<t>In result, the RU for R1 looks as shown in <xref target="FIG-R1-RU"/>.
It has the aforementioned 6-bit long Bitstring because
the BIFT of R1 is 6 BP long, it has one AF1 indicating
the length of RU1, which is the RU for the first set
BP in the Bitstring with R=1, so it is for R3, and the
RU finishes with RU2 for the second BP in the BS with R=1,
so it is for R4.</t>

</section>
</section>
<section anchor="specification"><name>Specification</name>

<section anchor="rbs-address"><name>RBS-Address</name>

<t>As shown in <xref target="FIG-RU"/> and explained in <xref target="fwd-overview"/>, an RBS
address consists of the RU for the first MSR of a tree and
is composed of a Bitstring for this MSR, the AddressFields
for all but the last bits (N-1) set in that Bitstring with R=1 flag in the BIFT,
followed by N RU for each of those bits, which are recursivly composed in the same way.</t>

<t>The RU for any MSR only needs to be decoded (in high-speed hardware)
by the MSR itself, but not any other MSR (along the path/tree).
Creation of an MSR is assumed to be part of application/network
stack on hosts or router control plane software and is therefore assumed to be
able to support arbitrary formats of the AF fields, as long as there
is a standard data model (e.g.: YANG) and/or control plane protocol specification
(e.g.: OSPF or ISIS extensions) for it. specifically, different router (MSR)
implementations may choose to support different AF formats.</t>

<t>Any MSR MUST support to decode RU where the AF entries are 8
bit in size. Any MSR SHOULD support to decode a variable length
AF encoding, where 0XXXXXXX (8-bit length AF field) is used to encode a
7-bit XXXXXXX (0..127) values, and where 1XXXXXXXXXXXX is used to
encode an 12-bit value XXXXXXXXXXX.</t>

<t>Note that in the MSR/RBS IPv6 extension header, the RBS-Address can
be as long as 256 bytes. Therefore, non-support of any AF field
not supporting to indicate RU lengths as long as 2048 bit may not
allow to build maximum size MSR/RBS extension headers.</t>

</section>
<section anchor="rbs-bift"><name>RBS-BIFT</name>

<t>RBS-BIFT are composed as explained in <xref target="fwd-overview"/>. Their size can
be any number of entries from 2 to 1024 bits (2^10), resulting
in equal length Bitstrings for the MSR in an RBS-Address.</t>

<t>The leftmost bit in an RBS RU Bitstrings is BIFT entry 1.</t>

<t>The adjacency is an IPv6 link-local, ULA or global IPv6 unicast
address of the next-hop assigned to the BitPosition. Further requirements 
are explained in <xref target="MSR-processing"/>.</t>

</section>
<section anchor="multicast-source-routing-msr6-header-with-rbs-sub-type"><name>Multicast Source Routing (MSR6) Header with RBS Sub-type</name>

<section anchor="MRH"><name>MRH extension header (refresher)</name>

<t>The "Multicast Routing Header" (MRH) is a new <xref target="RFC8200"/> IPv6
routing header defined according to <xref target="I-D.geng-msr6-traffic-engineering"/> as follows.</t>

<figure title="MRH format" anchor="FIG-MRH"><artwork><![CDATA[
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  |  Hdr Ext Len  |  Routing Type | Segments Left |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  MRH Sub-Type |         MRH Sub-Type specific data            |
+-+-+-+-+-+-+-+-+                                              //
//                         ...                                 //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                                                             //
//         Optional Type Length Value (TLV) objects (variable) //
//                                                             //
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>Next Header:  Defined in <xref target="RFC8200"/>, section 4.4 (Type of the next
header following so that it can be correctly parsed).</t>

<t>Hdr Ext Len:  Defined in <xref target="RFC8200"/>, section 4.4 (Length of the extension
header in octets, not counting the first 8 octets).</t>

<t>Routing Type: Code point to be allocated (TBD1) for the RBS Sub-type
for MRH (as part of a registry to be established for the MRH).</t>

<t>Segments Left: Filled with segments left according to <xref target="RFC8200"/>, section 4.4,
see <xref target="common"/>.</t>

<t>The "Optional TLV objects" are intended to encode applicable TLV from
SRH <xref target="RFC8754"/> or multicast/MRH specific TLVs. Examination of
these TLV is based on their semantic. Current TLV defined in conjunction
with <xref target="RFC8754"/> are examined upon reception of a packet, but not
when forwarding the packet from one segment to another. In case of
RBS, reception is triggered either by Segments Left being 0, or
when parsing the Bitstring and acting upon the BP that is indicating
the receive adjacency.</t>

<t>The RBS Sub-Type specific data contains the RBS address structure
as follows.</t>

</section>
</section>
<section anchor="RBS"><name>MRH Sub-Type specific data for RBS</name>
<figure title="MRH Sub-type specific data for RBS (RBS-Address)" anchor="FIG-RBS"><artwork><![CDATA[
                     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
                +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 (MHR Sub-type) | RU-Length           | RU-Offset   ..      |S|R|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|    MSER-Segment (128 bit IPv6 address)                        |
|    (optional based on S=1)                                    |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RU0L    |^   Recursive Unit 0 (RU0) ...                      //     
+-+-+-+-+-+    (RBS-Address)                                   //
//                      ...                                    //
//                            ....+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
//                            .        padding                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>RBS-Address is the Recursive Unit as it is to be processed by the MSIR.
It contains (as explained above recursively all the RU for MSR along the
tree for this packet. Processing the complete RBS tree encoded across
multiple MSR is defined here to be as processing a single End.RBS segment.</t>

<t>padding extends the RBS-Address field to 32-bit alignment.
RU0L is the number of 32-bit units occupied by (RU0L, RBS-Address, padding).</t>

<t>MSER-Segment is a segment to be processed by MSER after the End.RBS
segment. S is a flag that MUST be set to 1 when the MSER-Segment is
present, else it MUST be set to 0. R is a reserved bit (MUST
be ignored upon reception).</t>

<t>RU-Length (RecursiveUnit Length) is the length of the
Recursive Unit to be examined by the processing MSR. It
is counted in bits.  Given how <xref target="RFC8200"/> Hdr Ext Len only allows for
up to 255 bytes, RU-Length can at most be only 11 bits long.</t>

<t>RU-offset (Recursive Unit Offset) is the offset in bits
of the Recursive Unit to be examined by the processing MSR, where
0 is the first bit of RBS-Address.</t>

<t>RU-Length and RU-offset are mutable, all other fields are immutable.</t>

</section>
<section anchor="mrs6rbs-processing"><name>MRS6/RBS processing</name>

<t>[TBD: This section may need to be re-written with more formalistic language
if the pseudocode (see below) is not a preferred formal description.]</t>

<section anchor="msir-header-creation"><name>MSIR header creation</name>

<t>Upon creation of the RBS header with an RBS-Address, RU-Length is set to the
length of the RBS-Address, and RU-offset is set to 0.</t>

<t>MSER-Segment is included when the packet is an IPv6 multicast packet.
In this case, the MSER-Segment carries the IPv6 Destination (multicast
group) Address. The MSER-Segment MAY also contain any non IPv6 multicast
group address when it has been defined/signaled accordingly as a SID
for processing by all MSER that could potentially receive it. S is
set according to the presence of MSER-Segment.</t>

<t>Segments Left is set to 2 if MSER-Segment is included, otherwise it is
set to 1.</t>

</section>
<section anchor="common"><name>Common processing</name>

<t>When the MSR6/RBS header is received, including by the creating MSIR,
the need to process the RBS-Address (End.RBS segment) is examined. This
is the case when (Segments Left - 1) = 1. See below for further details.
When the End.RBS is not to be processed, then the MSR it needs to act
upon the header as an MSER.</t>

</section>
<section anchor="MSER-processing"><name>MSER header processing</name>

<t>An MSER examines the presence of MSER-Segment (according to S). If
present, and if MSER-Segment carries an IPv6 multicast address then
the MSER copies the IPv6 multicast address into IPv6 Destination Address
field, discards the MSR6/RBS extension header and proceeds with
processing of the packet as an IPv6 multicast packet.</t>

<t>Note that non withstanding the previous paragraphs behavior, host stacks
SHOULD maintain a copy of the MSR6/RBS extension header data so that
socket / application code can retrieve for advanced functionality, such
as identifying the path taken, as desirable for resilient transmission.</t>

<t>If the MSER-Segment is not an IPv6 multicast address, the packet is NOT
an IPv6 Multicast packet and MUST NOT be further processed as an IPv6
Multicast Packet. Instead, the address MUST be accordingly registered
as a SID by the control plane and further processing of the MSR6/RBS
header is subject to the definition of the SID. If the address does not
match a registered SID, the packet MUST be discarded and an error be raised.</t>

<t>If the MSER-Segment is not present, the router MUST remove the MSR6/RBS
extension header and proceed processing with "receiving" the packet with the next header.</t>

</section>
</section>
<section anchor="MSR-processing"><name>MSR processing of RBS-Address</name>

<t>When an MSR received a packet with MSR6/RBS extension header in which
it needs to process the RBS-Address (End.RBS segment), it MUST first
validate that the IPv6 Destination Address is a SID with End.RBS function.</t>

<t>It MUST be a link-local, ULA or global address on the router not used
for any other functions (IPv6 unicast, Segment Routing). The ability to
send packets to such addresses with End.RBS functions MUST be tightly controlled
in the network to prohibit the ability of unauthorized senders to cause packet
replication attacks by sending of packets with MSR6/RBS headers.</t>

<t>These requirements logically apply equally to the generating router (MSIR),
but can of course appropriately be optimized in implementation.</t>

<t>After this ingress check, the MSR parses the RBS-Address field starting
at RU-Offset, taking the RU-Length as a known parameter into account. This
subset of the RU-Address is the RU for this MSR. Parsing is shown in
more detail in <xref target="pseudocode"/>.</t>

<t>Upon parsing, the MSR creates a packet copy for every BP set in Bitstring and
rewrites it according to the following rules. It finally discards the
received packet.</t>

<section anchor="msr-processing-of-receive-adjacency"><name>MSR processing of receive adjacency</name>

<t>Packet copies for a receive adjacency have their Segments Left reduced by 1
and then passed to MSER processing <xref target="MSER-processing"/>.</t>

</section>
<section anchor="MSR-per-hop"><name>MSR per-hop processing</name>

<t>Per-hop processing of packets with MSR6/RBS extension header that
include an MSER-Segment with an IPv6 multicast address are IPv6 multicast
packets. In result, they inherit all per-hop IPv6 forwarding rules of
<xref target="RFC8200"/>, processing of any additional industry common per-hop rules for
IPv6 multicast packets (as desirable by implementations), and additional
per-hop applicable IPv6 extension headers.</t>

<t>For example, the IPv6 header Hopcount field is reduced on every hop, and the packet discarded
if Hopcount reaches 0.</t>

<t>For example, routers/operators along the path may choose to support filtering of MSR6/RBS packets based on
their IPv6 multicast destination address in the MSER-Segment field. Or perform IPFIX accounting
against those addresses.</t>

<t>For example (TBD): For ECMP situations, the IPv6 Flow Label is used to choose
a next-hop adjacency. This can include BIFT adjacencies that include multiple
next-hop addresses/interfaces.</t>

<t>If the MSER-Segment is not present, or not carrying an IPv6 Multicast address,
more liberty can be taken wrt. processing rules, especially through definition of additional
SID Functions for MSER-Segment.</t>

<section anchor="msr-processing-for-r0-adjacency"><name>MSR processing for R=0 adjacency</name>

<t>Packet copies for for an adjacency to an MSR neighbor with R=0 have
their Segments Left reduced by 1.  RU-Length and RU-Offset SHOULD
be set to 0.</t>

<t>The MSR neighbor IPv6 address/SID from the BIFT entry is copied into
the IPv6 Destination Address field and the packet is forwarded (via
IPv6 unicast forwarding procedures).</t>

<t>The MSR MUST only permit IP6 addresses in the RBS-BIFT for R=0/R=1 entries
that have the End.RBS function.</t>

</section>
<section anchor="msr-processing-for-r1-adjacency"><name>MSR processing for R=1 adjacency</name>

<t>The MSR calculates new values for RU-Offset and RU-Length for a copy to
an MSR neighbor with R=1. It updates the RU-Offset, RU-Length field in
the MSR type-specific field for RBS.</t>

<t>The MSR neighbor IPv6 address/SID from the BIFT entry is copied into
the IPv6 Destination Address field and the packet is forwarded (via
IPv6 unicast forwarding procedures).</t>

<t>The MSR MUST only permit IP6 addresses in the RBS-BIFT for R=1 entries
that have the End.RBS function.</t>

</section>
</section>
</section>
</section>
<section anchor="pseudocode"><name>MSR/RBS forwarding Pseudocode</name>

<t>The following example RBS forwarding Pseudocode assumes
the reference encoding of bit-accurate length of Bitstrings
and RecursiveUnits as well as 8-bit long TotalLen and AddressingField
Lengths. All packet field addressing and address/offset calculations
is therefore bit-accurate instead of byte accurate (which is what most
CPU memory access today is).</t>

<figure title="RBS forwarding Pseudocode" anchor="FIG-PSEUDOCODE"><artwork><![CDATA[
void ProcessMSR6header(Packet)
{
  MSR6 = GetPacketMSR6Header(Packet); 
  case (MSR6.MRHSubType)
    RBS) ProcessRBSSubtype(Packet); break
    // ... other MSR6 subtypes
  esac
}
 
void ProcessRBSSubtype(Packet)
{
  MSR6 = GetPacketMSR6Header(Packet); 
  RBS = MSR6.MRHSubType

  if(MSR6.RULength == 0) return ReceiveRBSsubtype(Packet)

  RU0 = RBS + 29 + (MSR6.S ? 128 : 0)
  RU = RU0 + MSR6.RUOffset
  RUL = MSR6.RULength

  BitstringA = MSR6.RUOffset
  AddressingField =  BitstringA + BIFT.entries;

  // [1] calculate number of recursive bits set in Bitstring
  CopyBitstring(*BitstringA, *RecursiveBits, BIFT.entries);
  And(*RecursiveBits,*BIFTRecursiveBits, BIFT.entries);
  N = CountBits(*RecursiveBits, BIFT.entries);

  // Start of first RecursiveUnit in RBS address
  // After AddressingField array with 8-bit length fields
  RecursiveUnit = AddressingField + (N - 1) * 8;

  RemainLength = *(RBS.RULength);
  Index = GetFirstBitPosition(*BitstringA);
  while (Index) {
    PacketCopy = Copy(Packet);
    if (BIFT.BP[Index].adjacency == receive)
      ReceiveRBSsubtype(PacketCopy)
      next;
    }

    RBSc = RBS - Packet + PacketCopy
    MSR6c = MSR6 - Packet + PacketCopy
    If (BIFT.BP[Index].recursive) {
      if(N == 1) {
        RecursiveUnitLength = RemainLength;
      } else {
        RecursiveUnitLength = *AddressingField;
        N--;
        AddressingField += 8;
        RemainLength -= RecursiveUnitLength;
        RemainLength -= 8; // 8 bit of AddressingField
      }
      *(RBSc.RUOffset) = RecursiveUnit - RU0
      *(RBSc.RULength) = RecursiveUnitLength
      RecursiveUnit += RecursiveUnitLength;
    } else {
      *(RBSc.RUOffset) = 0
      *(RBSc.RULength) = 0
      *(MSR6c.SegmentsLeft) -= 1
    }
    *(PacketCopy.IPv6hdr.DA) = *(BIFT.BP[Index].adjacency)
    // ProcessMSR6TLV(Packet) - needed ?
    IPv6Forward(PacketCopy)
    Index = GetNextBitPosition(*BitstringA, Index);
  }
}

void ReceiveRBSsubtype(Packet)
{
  MSR6 = GetPacketMSR6Header(Packet); 
  RBS = MSR6.MRHSubType
  if(MSR6.S) {
    *(Packet.IPv6hdr.DA) = *(RBS.MSETSegment)
    *(MSR6c.SegmentsLeft) = 0
  }
  ProcessMSR6TLV(Packet)
  // header not needed any further except for diagnostics
  // DisposeMSR6Header(Packet)
  if(IsIPv6MulticastAddr(Packet.IPv6hdr.DA))
    ReceiveIpv6Multicast(Packet)
  else
    ProcessSRv6DASID(Packet)
}
]]></artwork></figure>

<t>Explanations for <xref target="FIG-PSEUDOCODE"/>.</t>

<t>ProcessMSR6header(Packet) is called upon receipt of an
IPv6 packet with an MSR6header. It is preceded by
(not shown) standard IPv6 processing of a packet destined
to an address of the node (such as HopCount processing),
and other common processing of a Routing Header.
This function only demultiplexes into the MSR6 option specific
code.</t>

<t>ProcessRBSSubtype(Packet) processes the RBS option header.
All address pointers shown use bit accurate addressing,
because the elements of the RU are at bit-accurate offsets.</t>

<t>MSR6 is the address of the MSR6 extension header in the packet,
RBS is the address of the RBS address in the packet.</t>

<t>BitstringA is the address of the RBS address Bitstring in memory.
Other variables use names matching those from the packet header
figures (without " -_").</t>

<t>The BFR local BIFT has a total number of BIFT.entries
addressable BP 1...BIFTentries. The Bitstring therefore
has BIFT.entries bits.</t>

<t>BIFT.RecursiveBits is a Bitstring pre-filled by the control
plane with all the BP with the recursive flag set. This is constructed
from the Recursive flag setting of the BP of the BIFT. The
code starting at [1] therefore counts the number of
recursive BP in the packets Bitstring.</t>

<t>Because the AddressingField does not have an entry for the
last (or only) RecursiveUnit, its length has to be calculated
By subtracting the length of the prior N-1 RecursiveUnits from
RULength. This is done via variable RemainLength.</t>

<t>For every PacketCopy that is to be forwarded, the RU-Length, RU-Offset
and IPv6 header DestinationAddress (DA) field are updated.
For non-recursive adjacencies, the SegmentsLeft field
is also updated.</t>

<t>For packet copies that are to be received by this node,
The DA is updated from the RBS MSER-Segment field when present,
and depending on what type of address it is, the packet
continues to be processed as a received IPv6 Multicast packet
or SRv6 SID.</t>

</section>
<section anchor="iana-requests"><name>IANA requests</name>

<t>This specification requests a TBD1 code point within a TBD registry of
MRH extension header options.</t>

</section>
<section anchor="security-considerations"><name>Security considerations</name>

<t>The specification painstakingly attempts to ensure that IPv6 addresses
used to deliver MSR6/RBS extension header packets are ONLY used for
such packets such that common IPv6 "clamshell" filtering of address
ranges can ensure that no unauthenticated sender (such as from outside
the domain) can send packets to these addresses.</t>

<section anchor="changelog"><name>Changelog</name>

<t>[RFC-Editor: please remove this section].</t>

<t>This document is written in https://github.com/cabo/kramdown-rfc2629 markup language.
This documents source is maintained at https://github.com/toerless/multicast-rbs,
please provide feedback to the msr6@ietf.org mailing list and submit an Issue
to the GitHub.</t>

<t>00 - initial version</t>

<t>01 - This version only adds this note to explain the updated intent of this document:
<xref target="I-D.eckert-bier-rbs"/> is a new draft that described the RBS structure and its
processing as introduced in this document, but independent of the MSR6 specific components.
Instead, the goal of <xref target="I-D.eckert-bier-rbs"/> is to represent RBS in a way that allows it to be embedded in different
stateless forwarding solutions, specifically MSR and/or BIER. For this purpose, it has
only small chapters outlining how such embedding can be done. Note that the name of
this draft does not indicate a firm choice of preferred working group for that work.</t>

<t>This document instead is
pending a rewrite where the explicit RBS text is replaced by text explaining how
different MSR6 BE or TE solution options (including but not limited to RBS) can be
embedded into the presented common MSR6 header. The core element of this draft then
is to be the inclusion of an IPv Multicast address "destination" segment (as compared
to prior common MSR6 header drafts. These changes are pending and could just not be
finished before IETF115 publication deadline.</t>

</section>
</section>
<section anchor="acknowledgments"><name>Acknowledgments</name>

<t>Many thanks for Bing Xu (bing.xu@huawei.com) for editorial work on the prior variation of this work <xref target="I-D.xu-msr6-rbs"/>.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='RFC8200' target='https://www.rfc-editor.org/info/rfc8200'>
<front>
<title>Internet Protocol, Version 6 (IPv6) Specification</title>
<author fullname='S. Deering' initials='S.' surname='Deering'><organization/></author>
<author fullname='R. Hinden' initials='R.' surname='Hinden'><organization/></author>
<date month='July' year='2017'/>
<abstract><t>This document specifies version 6 of the Internet Protocol (IPv6). It obsoletes RFC 2460.</t></abstract>
</front>
<seriesInfo name='STD' value='86'/>
<seriesInfo name='RFC' value='8200'/>
<seriesInfo name='DOI' value='10.17487/RFC8200'/>
</reference>



<reference anchor='RFC8402' target='https://www.rfc-editor.org/info/rfc8402'>
<front>
<title>Segment Routing Architecture</title>
<author fullname='C. Filsfils' initials='C.' role='editor' surname='Filsfils'><organization/></author>
<author fullname='S. Previdi' initials='S.' role='editor' surname='Previdi'><organization/></author>
<author fullname='L. Ginsberg' initials='L.' surname='Ginsberg'><organization/></author>
<author fullname='B. Decraene' initials='B.' surname='Decraene'><organization/></author>
<author fullname='S. Litkowski' initials='S.' surname='Litkowski'><organization/></author>
<author fullname='R. Shakir' initials='R.' surname='Shakir'><organization/></author>
<date month='July' year='2018'/>
<abstract><t>Segment Routing (SR) leverages the source routing paradigm.  A node steers a packet through an ordered list of instructions, called &quot;segments&quot;.  A segment can represent any instruction, topological or service based.  A segment can have a semantic local to an SR node or global within an SR domain.  SR provides a mechanism that allows a flow to be restricted to a specific topological path, while maintaining per-flow state only at the ingress node(s) to the SR domain.</t><t>SR can be directly applied to the MPLS architecture with no change to the forwarding plane.  A segment is encoded as an MPLS label.  An ordered list of segments is encoded as a stack of labels.  The segment to process is on the top of the stack.  Upon completion of a segment, the related label is popped from the stack.</t><t>SR can be applied to the IPv6 architecture, with a new type of routing header.  A segment is encoded as an IPv6 address.  An ordered list of segments is encoded as an ordered list of IPv6 addresses in the routing header.  The active segment is indicated by the Destination Address (DA) of the packet.  The next active segment is indicated by a pointer in the new routing header.</t></abstract>
</front>
<seriesInfo name='RFC' value='8402'/>
<seriesInfo name='DOI' value='10.17487/RFC8402'/>
</reference>



<reference anchor='RFC8279' target='https://www.rfc-editor.org/info/rfc8279'>
<front>
<title>Multicast Using Bit Index Explicit Replication (BIER)</title>
<author fullname='IJ. Wijnands' initials='IJ.' role='editor' surname='Wijnands'><organization/></author>
<author fullname='E. Rosen' initials='E.' role='editor' surname='Rosen'><organization/></author>
<author fullname='A. Dolganow' initials='A.' surname='Dolganow'><organization/></author>
<author fullname='T. Przygienda' initials='T.' surname='Przygienda'><organization/></author>
<author fullname='S. Aldrin' initials='S.' surname='Aldrin'><organization/></author>
<date month='November' year='2017'/>
<abstract><t>This document specifies a new architecture for the forwarding of multicast data packets.  It provides optimal forwarding of multicast packets through a &quot;multicast domain&quot;.  However, it does not require a protocol for explicitly building multicast distribution trees, nor does it require intermediate nodes to maintain any per-flow state. This architecture is known as &quot;Bit Index Explicit Replication&quot; (BIER).  When a multicast data packet enters the domain, the ingress router determines the set of egress routers to which the packet needs to be sent.  The ingress router then encapsulates the packet in a BIER header.  The BIER header contains a bit string in which each bit represents exactly one egress router in the domain; to forward the packet to a given set of egress routers, the bits corresponding to those routers are set in the BIER header.  The procedures for forwarding a packet based on its BIER header are specified in this document.  Elimination of the per-flow state and the explicit tree-building protocols results in a considerable simplification.</t></abstract>
</front>
<seriesInfo name='RFC' value='8279'/>
<seriesInfo name='DOI' value='10.17487/RFC8279'/>
</reference>



<reference anchor='RFC8296' target='https://www.rfc-editor.org/info/rfc8296'>
<front>
<title>Encapsulation for Bit Index Explicit Replication (BIER) in MPLS and Non-MPLS Networks</title>
<author fullname='IJ. Wijnands' initials='IJ.' role='editor' surname='Wijnands'><organization/></author>
<author fullname='E. Rosen' initials='E.' role='editor' surname='Rosen'><organization/></author>
<author fullname='A. Dolganow' initials='A.' surname='Dolganow'><organization/></author>
<author fullname='J. Tantsura' initials='J.' surname='Tantsura'><organization/></author>
<author fullname='S. Aldrin' initials='S.' surname='Aldrin'><organization/></author>
<author fullname='I. Meilik' initials='I.' surname='Meilik'><organization/></author>
<date month='January' year='2018'/>
<abstract><t>Bit Index Explicit Replication (BIER) is an architecture that provides optimal multicast forwarding through a &quot;multicast domain&quot;, without requiring intermediate routers to maintain any per-flow state or to engage in an explicit tree-building protocol.  When a multicast data packet enters the domain, the ingress router determines the set of egress routers to which the packet needs to be sent.  The ingress router then encapsulates the packet in a BIER header.  The BIER header contains a bit string in which each bit represents exactly one egress router in the domain; to forward the packet to a given set of egress routers, the bits corresponding to those routers are set in the BIER header.  The details of the encapsulation depend on the type of network used to realize the multicast domain.  This document specifies a BIER encapsulation that can be used in an MPLS network or, with slight differences, in a non-MPLS network.</t></abstract>
</front>
<seriesInfo name='RFC' value='8296'/>
<seriesInfo name='DOI' value='10.17487/RFC8296'/>
</reference>



<reference anchor='RFC8986' target='https://www.rfc-editor.org/info/rfc8986'>
<front>
<title>Segment Routing over IPv6 (SRv6) Network Programming</title>
<author fullname='C. Filsfils' initials='C.' role='editor' surname='Filsfils'><organization/></author>
<author fullname='P. Camarillo' initials='P.' role='editor' surname='Camarillo'><organization/></author>
<author fullname='J. Leddy' initials='J.' surname='Leddy'><organization/></author>
<author fullname='D. Voyer' initials='D.' surname='Voyer'><organization/></author>
<author fullname='S. Matsushima' initials='S.' surname='Matsushima'><organization/></author>
<author fullname='Z. Li' initials='Z.' surname='Li'><organization/></author>
<date month='February' year='2021'/>
<abstract><t>The Segment Routing over IPv6 (SRv6) Network Programming framework enables a network operator or an application to specify a packet processing program by encoding a sequence of instructions in the IPv6 packet header.</t><t>Each instruction is implemented on one or several nodes in the network and identified by an SRv6 Segment Identifier in the packet.</t><t>This document defines the SRv6 Network Programming concept and specifies the base set of SRv6 behaviors that enables the creation of interoperable overlays with underlay optimization.</t></abstract>
</front>
<seriesInfo name='RFC' value='8986'/>
<seriesInfo name='DOI' value='10.17487/RFC8986'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC6554' target='https://www.rfc-editor.org/info/rfc6554'>
<front>
<title>An IPv6 Routing Header for Source Routes with the Routing Protocol for Low-Power and Lossy Networks (RPL)</title>
<author fullname='J. Hui' initials='J.' surname='Hui'><organization/></author>
<author fullname='JP. Vasseur' initials='JP.' surname='Vasseur'><organization/></author>
<author fullname='D. Culler' initials='D.' surname='Culler'><organization/></author>
<author fullname='V. Manral' initials='V.' surname='Manral'><organization/></author>
<date month='March' year='2012'/>
<abstract><t>In Low-Power and Lossy Networks (LLNs), memory constraints on routers may limit them to maintaining, at most, a few routes.  In some configurations, it is necessary to use these memory-constrained routers to deliver datagrams to nodes within the LLN.  The Routing Protocol for Low-Power and Lossy Networks (RPL) can be used in some deployments to store most, if not all, routes on one (e.g., the Directed Acyclic Graph (DAG) root) or a few routers and forward the IPv6 datagram using a source routing technique to avoid large routing tables on memory-constrained routers.  This document specifies a new IPv6 Routing header type for delivering datagrams within a RPL routing domain.  [STANDARDS-TRACK]</t></abstract>
</front>
<seriesInfo name='RFC' value='6554'/>
<seriesInfo name='DOI' value='10.17487/RFC6554'/>
</reference>



<reference anchor='RFC8754' target='https://www.rfc-editor.org/info/rfc8754'>
<front>
<title>IPv6 Segment Routing Header (SRH)</title>
<author fullname='C. Filsfils' initials='C.' role='editor' surname='Filsfils'><organization/></author>
<author fullname='D. Dukes' initials='D.' role='editor' surname='Dukes'><organization/></author>
<author fullname='S. Previdi' initials='S.' surname='Previdi'><organization/></author>
<author fullname='J. Leddy' initials='J.' surname='Leddy'><organization/></author>
<author fullname='S. Matsushima' initials='S.' surname='Matsushima'><organization/></author>
<author fullname='D. Voyer' initials='D.' surname='Voyer'><organization/></author>
<date month='March' year='2020'/>
<abstract><t>Segment Routing can be applied to the IPv6 data plane using a new type of Routing Extension Header called the Segment Routing Header (SRH). This document describes the SRH and how it is used by nodes that are Segment Routing (SR) capable.</t></abstract>
</front>
<seriesInfo name='RFC' value='8754'/>
<seriesInfo name='DOI' value='10.17487/RFC8754'/>
</reference>



<reference anchor='RFC9262' target='https://www.rfc-editor.org/info/rfc9262'>
<front>
<title>Tree Engineering for Bit Index Explicit Replication (BIER-TE)</title>
<author fullname='T. Eckert' initials='T.' role='editor' surname='Eckert'><organization/></author>
<author fullname='M. Menth' initials='M.' surname='Menth'><organization/></author>
<author fullname='G. Cauchie' initials='G.' surname='Cauchie'><organization/></author>
<date month='October' year='2022'/>
<abstract><t>This memo describes per-packet stateless strict and loose path steered replication and forwarding for &quot;Bit Index Explicit Replication&quot; (BIER)  packets (RFC 8279); it is called &quot;Tree Engineering for Bit Index Explicit Replication&quot; (BIER-TE) and is intended to be used as the path steering mechanism for Traffic Engineering with BIER.</t><t>BIER-TE introduces a new semantic for &quot;bit positions&quot; (BPs). These BPs indicate adjacencies of the network topology, as opposed to (non-TE) BIER in which BPs indicate &quot;Bit-Forwarding Egress Routers&quot; (BFERs).  A BIER-TE &quot;packets BitString&quot; therefore indicates the edges of the (loop-free) tree across which the packets are forwarded by BIER-TE. BIER-TE can leverage BIER forwarding engines with little changes. Co-existence of BIER and BIER-TE forwarding in the same domain is possible -- for example, by using separate BIER &quot;subdomains&quot; (SDs). Except for the optional routed adjacencies, BIER-TE does not require a BIER routing underlay and can therefore operate without depending on a routing protocol such as the &quot;Interior Gateway Protocol&quot; (IGP).</t></abstract>
</front>
<seriesInfo name='RFC' value='9262'/>
<seriesInfo name='DOI' value='10.17487/RFC9262'/>
</reference>


<reference anchor='I-D.xu-msr6-rbs'>
   <front>
      <title>RBS(Recursive BitString Structure) for Multicast Source Routing over IPv6</title>
      <author fullname='Bing Xu' initials='B.' surname='Xu'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Xuesong Geng' initials='X.' surname='Geng'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Toerless Eckert' initials='T. T.' surname='Eckert'>
         <organization>Futurewei Technologies</organization>
      </author>
      <date day='30' month='March' year='2022'/>
      <abstract>
	 <t>   This document defines a new type of segment: End.RBS, and the
   corresponding packet processing procedures over the IPv6 data plane
   for the MSR6(Multicast Source Routing over IPv6) TE solutions.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-xu-msr6-rbs-01'/>
   <format target='https://www.ietf.org/archive/id/draft-xu-msr6-rbs-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.eckert-bier-rbs'>
   <front>
      <title>Recursive BitString Structure (RBS) Addresses for BIER and MSR6</title>
      <author fullname='Toerless Eckert' initials='T. T.' surname='Eckert'>
         <organization>Futurewei Technologies USA</organization>
      </author>
      <author fullname='Michael Menth' initials='M.' surname='Menth'>
         <organization>University of Tuebingen</organization>
      </author>
      <author fullname='Xuesong Geng' initials='X.' surname='Geng'>
         <organization>Huawei 2012 NT Lab</organization>
      </author>
      <author fullname='Xiuli Zheng' initials='X.' surname='Zheng'>
         <organization>Huawei 2012 NT Lab</organization>
      </author>
      <author fullname='Rui Meng' initials='R.' surname='Meng'>
         <organization>Huawei 2012 NT Lab</organization>
      </author>
      <author fullname='Fengkai Li' initials='F.' surname='Li'>
         <organization>Huawei 2012 NT Lab</organization>
      </author>
      <date day='24' month='October' year='2022'/>
      <abstract>
	 <t>   This memo introduces a compact data-structure representation of
   multicast trees called &quot;Recursive Bitstring Structure&quot; (RBS) and its
   use for (stateless) forwarding of packets that include this structure
   in their header.  It is intended as an alternative to &quot;flat&quot;
   bitstring addresses as used in BIER and BIER-TE or possible
   forwarding plane variations such as MSR6.  RBS aims to improve
   performance and scalability over flat bitstrings and simplify
   operations.

   Operations is simplified because RBS does not require the use,
   management and optimization of network-wide configured address spaces
   BIFT-ID and SI and because one common RBS mechanism can replace flat
   bitstring addresses for both shortest-path forwarding and tree
   engineered forwarding.  It intends to improve performance by allowing
   multicast to sparse set of receivers in larger networks with fewer
   packets and it intends to improve scalability by requiring less BIFT
   state on routers.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-eckert-bier-rbs-00'/>
   <format target='https://www.ietf.org/archive/id/draft-eckert-bier-rbs-00.txt' type='TXT'/>
</reference>


<reference anchor='I-D.eckert-bier-cgm2-rbs'>
   <front>
      <title>Carrier Grade Minimalist Multicast (CGM2) using Bit Index Explicit Replication (BIER) with Recursive BitString Structure (RBS) Addresses</title>
      <author fullname='Toerless Eckert' initials='T. T.' surname='Eckert'>
         <organization>Futurewei Technologies USA</organization>
      </author>
      <author fullname='Bing Xu' initials='B.' surname='Xu'>
         <organization>Huawei Technologies (2012Lab)</organization>
      </author>
      <date day='9' month='February' year='2022'/>
      <abstract>
	 <t>   This memo introduces the architecture of a multicast architecture
   derived from BIER-TE, which this memo calls Carrier Grade Minimalist
   Multicast (CGM2).  It reduces limitations and complexities of BIER-TE
   by replacing the representation of the in-packet-header delivery tree
   of packets through a &quot;flat&quot; BitString of adjacencies with a
   hierarchical structure of BFR-local BitStrings called the Recursive
   BitString Structure (RBS) Address.

   Benefits of CGM2 with RBS addresses include smaller/fewer BIFT in
   BFR, less complexity for the network architect and in the CGM2
   controller (compared to a BIER-TE controller) and fewer packet copies
   to reach a larger set of BFER.

   The additional cost of forwarding with RBS addresses is a slightly
   more complex processing of the RBS address in BFR compared to a flat
   BitString and the novel per-hop rewrite of the RBS address as opposed
   to bit-reset rewrite in BIER/BIER-TE.

   CGM2 can support the traditional deployment model of BIER/BIER-TE
   with the BIER/BIER-TE domain terminating at service provider PE
   routers as BFIR/BFER, but it is also the intention of this document
   to expand CGM2 domains all the way into hosts, and therefore
   eliminating the need for an IP Multicast flow overlay, further
   reducing the complexity of Multicast services using CGM2.  Note that
   this is not fully detailed in this version of the document.

   This document does not specify an encapsulation for CGM2/RBS
   addresses.  It could use existing encapsulations such as [RFC8296],
   but also other encapsulations such as IPv6 extension headers.

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-eckert-bier-cgm2-rbs-01'/>
   <format target='https://www.ietf.org/archive/id/draft-eckert-bier-cgm2-rbs-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.chen-pim-srv6-p2mp-path'>
   <front>
      <title>Stateless SRv6 Point-to-Multipoint Path</title>
      <author fullname='Huaimo Chen' initials='H.' surname='Chen'>
         <organization>Futurewei</organization>
      </author>
      <author fullname='Mike McBride' initials='M.' surname='McBride'>
         <organization>Futurewei</organization>
      </author>
      <author fullname='Yanhe Fan' initials='Y.' surname='Fan'>
         <organization>Casa Systems</organization>
      </author>
      <author fullname='Zhenbin Li' initials='Z.' surname='Li'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Xuesong Geng' initials='X.' surname='Geng'>
         <organization>Huawei</organization>
      </author>
      <author fullname='Mehmet Toy' initials='M.' surname='Toy'>
         <organization>Verizon</organization>
      </author>
      <author fullname='Gyan Mishra' initials='G. S.' surname='Mishra'>
         <organization>Verizon</organization>
      </author>
      <author fullname='Aijun Wang' initials='A.' surname='Wang'>
         <organization>China Telecom</organization>
      </author>
      <author fullname='Lei Liu' initials='L.' surname='Liu'>
         <organization>Fujitsu</organization>
      </author>
      <author fullname='Xufeng Liu' initials='X.' surname='Liu'>
         <organization>Volta Networks</organization>
      </author>
      <date day='23' month='October' year='2022'/>
      <abstract>
	 <t>   This document describes a solution for a SRv6 Point-to-Multipoint
   (P2MP) Path/Tree to deliver the traffic from the ingress of the path
   to the multiple egresses/leaves of the path in a SR domain.  There is
   no state stored in the core of the network for a SR P2MP path like a
   SR Point-to-Point (P2P) path in this solution.



	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-chen-pim-srv6-p2mp-path-07'/>
   <format target='https://www.ietf.org/archive/id/draft-chen-pim-srv6-p2mp-path-07.txt' type='TXT'/>
</reference>


<reference anchor='I-D.geng-msr6-rlb-segment'>
   <front>
      <title>RLB (Replication through Local Bitstring) Segment for Multicast Source Routing over IPv6</title>
      <author fullname='Xuesong Geng' initials='X.' surname='Geng'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Zhenbin Li' initials='Z.' surname='Li'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Jingrong Xie' initials='J.' surname='Xie'>
         <organization>Huawei Technologies</organization>
      </author>
      <date day='24' month='October' year='2022'/>
      <abstract>
	 <t>   This document defines 2 new types of segment: End.RLB.X and End.RLB,
   and the corresponding packet processing procedures over the IPv6 data
   plane for the MSR6(Multicast Source Routing over IPv6) TE solutions.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-geng-msr6-rlb-segment-01'/>
   <format target='https://www.ietf.org/archive/id/draft-geng-msr6-rlb-segment-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.cheng-spring-ipv6-msr-design-consideration'>
   <front>
      <title>Design Consideration of IPv6 Multicast Source Routing (MSR6)</title>
      <author fullname='Weiqiang Cheng' initials='W.' surname='Cheng'>
         <organization>China Mobile</organization>
      </author>
      <author fullname='Gyan Mishra' initials='G. S.' surname='Mishra'>
         <organization>Verizon Inc.</organization>
      </author>
      <author fullname='Zhenbin Li' initials='Z.' surname='Li'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Aijun Wang' initials='A.' surname='Wang'>
         <organization>China Telecom</organization>
      </author>
      <author fullname='Zhuangzhuang Qin' initials='Z.' surname='Qin'>
         <organization>China Unicom</organization>
      </author>
      <author fullname='Chi Fan' initials='C.' surname='Fan'>
         <organization>New H3C Technologies</organization>
      </author>
      <date day='25' month='October' year='2021'/>
      <abstract>
	 <t>   This document discusses the design consideration of IPv6 source
   routing multicast solution.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-cheng-spring-ipv6-msr-design-consideration-01'/>
   <format target='https://www.ietf.org/archive/id/draft-cheng-spring-ipv6-msr-design-consideration-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.geng-msr6-traffic-engineering'>
   <front>
      <title>IPv6 Multicast Source Routing Traffic Engineering</title>
      <author fullname='Xuesong Geng' initials='X.' surname='Geng'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Zhenbin Li' initials='Z.' surname='Li'>
         <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Jingrong Xie' initials='J.' surname='Xie'>
         <organization>Huawei Technologies</organization>
      </author>
      <date day='24' month='October' year='2022'/>
      <abstract>
	 <t>   This document defines 2 new types of segment: End.RL and End.RL.X ,
   and the corresponding packet processing procedures over the IPv6 data
   plane for the MSR6(Multicast Source Routing over IPv6) TE solutions.


	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-geng-msr6-traffic-engineering-02'/>
   <format target='https://www.ietf.org/archive/id/draft-geng-msr6-traffic-engineering-02.txt' type='TXT'/>
</reference>




    </references>


<section anchor="explanations"><name>Background / Explanations</name>

<t>[TBD: This section to be removed, but maybe some explanations will make
sense to move into different sections.]</t>

<section anchor="evolution-from-draft-xu-msr6-rbs"><name>Evolution from draft-xu-msr6-rbs</name>

<t>This document is an option for MSR6/RBS that is derived from <xref target="I-D.xu-msr6-rbs"/>.
The key changes over that draft are as follows.</t>

<section anchor="rbs-offsetrbs-length"><name>RBS-Offset/RBS-Length</name>

<t>In <xref target="I-D.xu-msr6-rbs"/>, the RBS-Address was rewritten on every copy to
a different adjacency by replacing the RU in the RBS-address with the
RU for the adjacency. This required a potentially significant amount of
write cycles to packet memory for each copy and changes the size of
the packet header on each hop.</t>

<t>This draft proposes to add RBS-Offset and RBS-Length fields and changes
the processing of the RBS-address, so that only these two indices need
to be re-calculated and re-written on every packet copy, keeping the
extension header size the same and minimizing the amount of writes
required.</t>

</section>
<section anchor="type-specific-data-encoding"><name>Type-specific data encoding</name>

<t>This draft further reduces the size of the MSR/RBS extension header by
encoding the RBS-address not as a TLV, but as the MRH Type-specific data
field, thereby saving the TL parts of the TLV option (32 bits).  It
also replaces the TotalLen field (which did change on every hop)
for the RBS address with an (immutable) 32-bit unit counter called RU0L
which saves 2 bits.</t>

</section>
<section anchor="ip-multicast-compatibility"><name>IP Multicast compatibility</name>

<t>This draft adds the (optional) MSER-Segment field (IPv6 address),
with the primary option being that IPv6 packets with MSR/RBS extension
header can support IPv6 multicast without additional IPv6 in IPv6
extension headers or IPv6 in IPv6 encapsulation. Without this MSER-Segment,
there is no field to carry the IPv6 Multicast Destination Address
required to support IPv6 Multicast.</t>

<t>Support for IPv6 Multicast with MSR/RBS not only enables efficient
end-to-end IPv6 multicast with stateless source-routing, but it also
allows to use MSR/RBS even when it only encapsulates another IP or
IPv6 multicast packet. This is the common case when using MVPN, where
the CE multicast packets (IP or IPv6) are IP Multicast encapsulated
on the PE (IPv4 or IPv6). Because of the MSER Segment field, all
MVPN signaling protocols defined for this so-called SP IP Multicast
instance can be reused with MSR6/RBS.</t>

<t>IP Multicast compatibility also should make it easier to support
MSR6/RBS in Host stacks via socket APIs. These already support
extension headers, but it is a lot more complex to introduce
new socket types, which would ve required when MSR6/RBS can not
be made to look like either IP Multicast (or IP Unicast) to the
Socket API.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>This document proposes the terms MSR, MSIR and MSER for routers
using MSR6 stateless multicast.</t>

</section>
<section anchor="text-changes"><name>Text changes</name>

<t>Large part of the text where rewritten, and pseudocode from 
<xref target="I-D.eckert-bier-cgm2-rbs"/> was inherited.</t>

</section>
</section>
<section anchor="comparison-with-rbs-for-bier"><name>Comparison with RBS for BIER</name>

<t><xref target="I-D.eckert-bier-cgm2-rbs"/> introduced RBS-Address encoding for BIER
without being specific to what encapsulation to use for it. It
also describes the overall architectural use of RBS addresses
and their scalability benefits.</t>

<t><xref target="I-D.eckert-bier-cgm2-rbs"/> as an architecture document (wrt. to use
of a controller for example) is also applicable to MSR6/RBS,
as are the scalability benefits of RBS.  For current brevity of
this draft, none of that text has been copied here (yet).</t>

<t><xref target="I-D.eckert-bier-cgm2-rbs"/> stays valid as a valuable protocol option 
for BIER, especially as an improvement over BIER-TE due to
the simplification in architectural complexity (variety of
adjacencies to further save bits in the static Bitstring in BIER-TE),
and the better scaling of RBS addresses compared to BIER-TE and
even BIER Bitstrings in large networks. Scale specifically means
the need for fewer packet copies to the same set of BFER (MSER)
in large SP networks.</t>

<t><xref target="I-D.eckert-bier-cgm2-rbs"/> does not currently include the optimization
of RBS-Length/RBS-Offset to avoid rewriting/shortening the whole
RBS-Address on every copy, but that would be equally an option there.</t>

</section>
</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA+U923LbRpbvrOI/dMkPS8YkRcq2Yivl2pFsKVaVLKsoKZPZ
2ewWCDRJjEGAA4CSGdv/vufWN5CUlJm8rTKZkCD6dvrcL939fr/dioskzWdH
alVP+6/brXarTutMH6mxjldlld5pdZLWVV3CS+q6LldxvSq16oxPrrtqWpTq
4yqr0ziqanVdrMpYq3GxqvHl4k6X6vzq7lB1Pl6PD7vtVjSZlPruSC2q8rBf
Tqp2KyniPFrAaEkZTeu+jj/rsu6b3/vDUbt1D3O7Ov8IE41qPSvK9ZGq6qTd
ginpaHGkzk9vztqtdFkeKZhdVR8Mh2+GB7iQqo7y5H+jrMhhgLWG4Zbpkfp7
XcQ9VRUltJ9W8Gm94A9xsVjovK5+w7bRqp4X5VG7pVQf/4/+eKo3hS4zXVXq
lGZrfy1KmOnZCsFzr1N1o+N5XmTFLNWVur0+tu/hxHV9pA4ODobqHYxYRpk6
/bIsoc/7aG3fi9Ma1nod5XWk3mVRGblfigTm8e5YvXk1fDX0Hq+gM2jjj6YX
UZoBaGr9l7gaTKPVINHbVvXrSlcF7NrPOp+FS/qwinA9B8PRgbq8URfRZHPE
d/M0j5pjzqCrL9ztX+bUyQBgvHXwdJWl6r/mf97Yv2NfX7DbR4Yer1L18c8b
FzBoVq4eG/QM3vocpeoiffKw0n+WTrltMAK81W7lRbmIaiBYwtrx2bvXQAr2
88vhgXv+4xv3+c2h/fzmNX4GYsqnzb4OX716ad/70X1+c3DI/Z733w++rCzp
2mdC0pNUlzufx7PFQfBjDLvXX6aLflXeHfaXB4tlfxnVc/s7YpYMlU36lZ4h
4QatZ/1qiSyrny6hB3i1n+gqneX9uMirNNElrK7It3QI1DidpnEfHqS51tgH
waTf76toArQbxTV+v5mnlQL2tcKhVaKn8HalolzpnDkqfE4AWUog62WR05Nl
BIuG1suyiIHY6RF+TIBlVMRMcwI6c82FZawVM9ZSGKthpyvqIYKf+3GUZTpR
e1uY9p7w6ihJkMMg+2EePuBlAMM+ud78ldcB06rhDZ5AHycAo7iJIScDXgnr
po+qmKqJGbcaqNMontOsQRAUOfXEr+XZWgFwE+i9aLf0l2gB0COALXWJuKdK
vcxgDNwkAgy2BT7uugeQVwANmA7+nNZ2NQicfVwSAVF/qTVsOPQy1xFse7g9
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

-->

</rfc>

