<?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-00" 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="July" day="11"/>

    
    <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="I-D.ietf-bier-te-arch"/> 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="I-D.ietf-bier-te-arch"/> 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="I-D.ietf-bier-te-arch"/>.
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>

</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='I-D.xu-msr6-rbs'>
   <front>
      <title>RBS(Recursive BitString Structure) for Multicast Source Routing over IPv6</title>
      <author fullname='Bing Xu'>
	 <organization>Huawei</organization>
      </author>
      <author fullname='Xuesong Geng'>
	 <organization>Huawei</organization>
      </author>
      <author fullname='Toerless 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-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'>
	 <organization>Futurewei Technologies USA</organization>
      </author>
      <author fullname='Bing (Robin) 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'>
	 <organization>Futurewei</organization>
      </author>
      <author fullname='Mike McBride'>
	 <organization>Futurewei</organization>
      </author>
      <author fullname='Yanhe Fan'>
	 <organization>Casa Systems</organization>
      </author>
      <author fullname='Zhenbin Li'>
	 <organization>Huawei</organization>
      </author>
      <author fullname='Xuesong Geng'>
	 <organization>Huawei</organization>
      </author>
      <author fullname='Mehmet Toy'>
	 <organization>Verizon</organization>
      </author>
      <author fullname='Gyan S. Mishra'>
	 <organization>Verizon</organization>
      </author>
      <author fullname='Aijun Wang'>
	 <organization>China Telecom</organization>
      </author>
      <author fullname='Lei Liu'>
	 <organization>Fujitsu</organization>
      </author>
      <author fullname='Xufeng Liu'>
	 <organization>Volta Networks</organization>
      </author>
      <date day='30' month='April' 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-06'/>
   <format target='https://www.ietf.org/archive/id/draft-chen-pim-srv6-p2mp-path-06.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'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Zhenbin Li'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Jingrong Xie'>
	 <organization>Huawei Technologies</organization>
      </author>
      <date day='10' month='February' 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-00'/>
   <format target='https://www.ietf.org/archive/id/draft-geng-msr6-rlb-segment-00.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'>
	 <organization>China Mobile</organization>
      </author>
      <author fullname='Gyan Mishra'>
	 <organization>Verizon Inc.</organization>
      </author>
      <author fullname='Zhenbin Li'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Aijun Wang'>
	 <organization>China Telecom</organization>
      </author>
      <author fullname='Zhuangzhuang Qin'>
	 <organization>China Unicom</organization>
      </author>
      <author fullname='Chi 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'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Zhenbin Li'>
	 <organization>Huawei Technologies</organization>
      </author>
      <author fullname='Jingrong Xie'>
	 <organization>Huawei Technologies</organization>
      </author>
      <date day='7' month='March' 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-01'/>
   <format target='https://www.ietf.org/archive/id/draft-geng-msr6-traffic-engineering-01.txt' type='TXT'/>
</reference>


<reference anchor='I-D.ietf-bier-te-arch'>
   <front>
      <title>Tree Engineering for Bit Index Explicit Replication (BIER-TE)</title>
      <author fullname='Toerless Eckert'>
	 <organization>Futurewei Technologies Inc.</organization>
      </author>
      <author fullname='Michael Menth'>
	 <organization>University of Tuebingen</organization>
      </author>
      <author fullname='Gregory Cauchie'>
	 <organization>KOEVOO</organization>
      </author>
      <date day='25' month='April' 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, RFC8279) packets.  It is called BIER Tree
   Engineering (BIER-TE) and is intended to be used as the path steering
   mechanism for Traffic Engineering with BIER.

   BIER-TE introduces a new semantic for &quot;bit positions&quot; (BP).  They
   indicate adjacencies of the network topology, as opposed to (non-TE)
   BIER in which BPs indicate &quot;Bit-Forwarding Egress Routers&quot; (BFER).  A
   BIER-TE packets BitString therefore indicates the edges of the (loop-
   free) tree that the packet is forwarded across 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;sub-domains&quot; (SDs).
   Except for the optional routed adjacencies, BIER-TE does not require
   a BIER routing underlay, and can therefore operate without depending
   on an &quot;Interior Gateway Routing protocol&quot; (IGP).

	 </t>
      </abstract>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-ietf-bier-te-arch-13'/>
   <format target='https://www.ietf.org/archive/id/draft-ietf-bier-te-arch-13.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:
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
lTPMTHIAeVXL9spkJKu6024kZEkV98Lf99AFGee+sw3pE3nQ6OIDW7Ie7o9Z
GhGX5BsUKDN3UTYYUqU6ZGNyZMIskXe2zFQmKOSFieYqRrfBdevXO7IDlU3a
bNWeWI/JB6s5WATzzMiT+wYZT8n+9Xf07bnYxDbUL65kJjPjRqhtlnZPuTJz
YQ42+QJxvceWl6E8mWpNAnZaYpPoynAdTnYgHmsTc+gEOyFkIswteA/7A2tS
6JNUAZNFYQoCvZ2ZaYWKWyJQcihdtNBFGunCFWtzmlL2muOBZ8O+o/czS+8B
nOncPEc1R6i4vWy8fhA1QFHysWiEFeATT6pS0HCymfDWSddQBm7YpMrDSkzi
zGzt+hfTIStg8jUitrFx4t4Y0qthblF9LDqt+dNtHidCmbPhPKAJOzOleQ9y
ID94hfwAB6PYpnVjVPouK5fkkYqnVbyYISuYxfCw6lFgVlGYFvYgUb458Bfm
MQiWlVnO9t2Q+izePkwuoGXv+SFhuiqLBHulMf5zx7prnN7FBVafT8SZE2M1
KZeYkrMhS5HBTFbOJ4N3I8RfdEGBXbykoiK/FI4GB5HlGWl4mFo8z+raXL9x
MVlnzkagbUORdkrZ1ecbyq7lKtDWSXDZIup10Axpy9CiUzPdOfrFnteiuV8U
dQPQ5EkNzhlF0WfS7E5Er5Lc/QMM23KkIFiNS2otw8Muc5zOZ4o5VuQJNMya
hEXmC2qYi9K5/UWaMmUwJuKGbi1xS8QOARzNjoROdColcgo0irIihSUGTp4+
dmqW+hubwsxjV3qOhlS4w4fozwcNKR/PmOXT5U3eys21HHxdD49j1TOXnSkQ
9nk+8sA1FugndtpKoDiYbDvBAW1SUgklbFpW/WSZ07NGCOmvuzt3QHdp7Ffl
bmN0bKcgytESzciGfvnY3DHHD0RLbXy08A8RDxfD95KxY/NUzAy1XMUiYdZe
+8YSuYPFFKZjEgAVYTFguSiLCth5dpM81d6Io70mm84aStiRCwdSm0nsimsR
9rMM7YDGm5xur+IbDKmuFxdCV6GAGkeJgOZKsuAah4a4MZI0thd8MssPEcMP
4N+QPz2IG9N9EXxLDLDiFUfS85Uh76ku6GIfmMHln1xQebepyYCZQdWras1X
0CwqzOjl+gxXrgzQCDNWOAtFrGlS1bgOPJnp5ItRk4ccA9rmJKBMcTJzMDXV
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
cVko4MUDUprjrGjSvWhT/x98QxBNH4YAAA==

-->

</rfc>

