<?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 {"tocdepth"=>5}="yes"?>
<?rfc comments="yes"?>

<rfc ipr="trust200902" docName="draft-ietf-pim-assert-packing-08" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="assert-packing">PIM Assert Message Packing</title>

    <author initials="Y." surname="Liu" fullname="Yisong Liu" role="editor">
      <organization>China Mobile</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>liuyisong@chinamobile.com</email>
      </address>
    </author>
    <author initials="M." surname="McBride" fullname="Mike McBride">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>michael.mcbride@futurewei.com</email>
      </address>
    </author>
    <author initials="T." surname="Eckert" fullname="Toerless Eckert" role="editor">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <country>USA</country>
        </postal>
        <email>tte@cs.fau.de</email>
      </address>
    </author>
    <author initials="Z." surname="Zhang" fullname="Zheng(Sandy) Zhang">
      <organization>ZTE Corporation</organization>
      <address>
        <postal>
          <country>China</country>
        </postal>
        <email>zhang.zheng@zte.com.cn</email>
      </address>
    </author>

    <date year="2023" month="February" day="15"/>

    
    <workgroup>PIM</workgroup>
    

    <abstract>


<t>LANs often have more than one upstream router.
When PIM Sparse Mode (PIM-SM), including PIM-SSM, is used, this
can lead to duplicate IP multicast packets being forwarded by these
PIM routers.  PIM Assert messages are used to elect a single forwarder for
each IP multicast traffic flow between these routers.</t>

<t>This document defines a mechanism to send
and receive information for multiple IP multicast flows 
in a single PackedAssert message. This optimization reduces the
total number of PIM packets on the LAN and can therefore speed up
the election of the single forwarder, reducing the number of duplicate IP
multicast packets incurred.</t>



    </abstract>



  </front>

  <middle>


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

<t>In PIM-SM shared LAN networks, there is typically more than one
upstream router. When duplicate data packets appear on the LAN, from
different upstream routers, assert packets are sent from these
routers to elect a single forwarder according to <xref target="RFC7761"/>. The PIM
assert messages are sent periodically to keep the assert state. The
PIM assert message carries information about a single multicast
source and group, along with the corresponding metric-preference and
metric of the route towards the source or RP.</t>

<t>This document defines a mechanism to encode the information of 
multiple PIM Assert messages into a single PackedAssert message.
This allows to send and receive information for multiple IP multicast flows 
in a single PackedAssert message without changing the PIM Assert state
machinery. It reduces the total number of PIM packets on the LAN and can
therefore speed up the election of the single forwarder, reducing the number
of duplicate IP multicast packets.  This can particularly be helpful when
there is traffic for a large number of multicast groups or SSM channels and
PIM packet processing performance of the routers is slow.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

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

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

<t>The reader is expected to be familiar with the terminology of <xref target="RFC7761"/>. The following lists the abbreviations repeated in this document.</t>

<t>AT: Assert Timer</t>

<t>RP: Rendezvous Point</t>

<t>RPF: Reverse Path Forwarding</t>

<t>SPT: Shortest Path Tree</t>

<t>RPT: RP Tree</t>

<t>DR: Designated Router</t>

</section>
</section>
<section anchor="problem-statement"><name>Problem statement</name>

<t>PIM Assert occur in many deployments. See <xref target="use-case-examples"/>
for some explicit examples.</t>

<t>PIM assert state depends mainly on the network topology.
As long as there is a layer 2 network with more than 2 PIM routers,
there may be multiple upstream routers, which can cause duplicate
multicast traffic to be forwarded and assert process to occur.</t>

<t>As the multicast services become widely deployed, the
number of multicast entries increases, and a large number of assert
messages may be sent in a very short period when multicast data
packets trigger PIM assert processing in the shared LAN networks.
The PIM routers need to process a large number of PIM assert small
packets in a very short time. As a result, the device load is very
large. The assert packet may not be processed in time or even
discarded, thus extending the time of traffic duplication in the
network.</t>

<t>The PIM Assert mechanism can only be avoided by designing the network
to be without transit subnets with multiple upstream routers. For
example, an L2 ring between routers can sometimes be reconfigured to be a ring
of point-to-point subnets connected by the routers. These L2/L3 topology
changes are undesirable though, when they are only done to enable IP multicast
with PIM because they increase the cost of introducing IP multicast with PIM.</t>

<t>These designs are also not feasible when specific L2 technologies are needed.
For example various L2 technologies for rings provide sub 50msec failover
mechanisms, something not possible equally with an L3 subnet based ring. 
Likewise, IEEE Time Sensitive Networking mechanisms would require an
L2 topology that can not simply be replaced by an L3 topology.
L2 sub-topologies can also significantly reduce the cost of deployment.</t>

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

<t>This document defines three elements in support of PIM assert packing:</t>

<t><list style="numbers">
  <t>The PIM Hello Assert Packing Option.</t>
  <t>The encoding of PackedAssert messages.</t>
  <t>How to send and receive PackedAssert messages.</t>
</list></t>

<section anchor="pim-hello-assert-packing-option"><name>PIM Hello Assert Packing Option</name>

<t>The PIM Assert Packing Hello Option (<xref target="assert-packing-option"/>) is used to announce support
for the assert packing mechanisms specified in this document.
PackedAssert messages (<xref target="assert-packing-formats"/>) 
MUST NOT be used unless all PIM routers in the same subnet announce this option.</t>

</section>
<section anchor="assert-packing-formats"><name>Assert Packing Message Formats</name>

<t>The PIM Assert message, as defined in Section 4.9.6 of <xref target="RFC7761"/>,
describes the parameters of a (*,G) or (S,G) assert through the
following information elements: Rendezvous Point Tree flag (R), Source Address, Group
Address, Metric and Metric Preference. This document calls this
information an assert record.</t>

<t>Assert packing introduces two new PIM Assert message encodings
through the allocation and use of two flags in the PIM Assert
message header <xref target="RFC8736"/>, the Packed (P) and the Aggregated (A)
flags.</t>

<t>If the P)acked flag is 0, the message is a (non-packed) PIM Assert message
as specified in <xref target="RFC7761"/>. See <xref target="rfc7761-assert-message"/>. In this case,
the (A) flag MUST be set to 0, and MUST be ignored on receipt.
If the (P) flag is 2, then the message is
called a PackedAssert message and the type and hence
encoding format of the payload is determined by the (A) flag.</t>

<t>If A=0, then the message body is a sequence of assert records
preceeded by a count. This is called a "Simple PackedAssert" message. See <xref target="simple-packedassert-message"/>.</t>

<t>If A=1, then the message body is a sequence of aggregated assert records
preceeded by a count. This is called an "Aggregated PackedAssert". See <xref target="aggregated-packedassert-message"/>.</t>

<t>Two aggregated assert record types are specified.</t>

<t>The "Source Aggregated Assert Record", see <xref target="s-assert-record"/>,
encodes one (common) Source Address, Metric and Metric Preference as well as a list
of one or more Group Addresses with a Count.  Source Aggregated Assert Records provide
a more compact encoding than the Simple PackedAssert message format when multiple (S,G) flows share the same source S. 
A single Source Aggregated Assert Record with n Group Addresses represents the information of
assert records for (S,G1)...(S,Gn).</t>

<t>The "RP Aggregated Assert Record", see <xref target="rp-assert-record"/>,
encodes one common Metric and Metric Preference as
well as a list of "Group Records", each of which encodes a Group Address
and a list of zero or more Source Addresses with a count. This is called an
"RP Aggregated Assert Record", because with standard RPF according to (<xref target="RFC7761"/>),
all the Group Addresses that use the same RP will have the same Metric and Metric Preference.</t>

<t>RP Aggregation Records provide a more compact encoding than the Simple PackedAssert message format
for (*,G) flows.  The Source Address is optionally used by <xref target="RFC7761"/> assert procedures
to indicate the source(s) that triggered the assert, otherwise it is 0.</t>

<t>Both Source Aggregated Assert Records and RP Aggregated Assert Records also include the
R flag which maintains its semantic from <xref target="RFC7761"/> but also distinguishes
the encodings. Source Aggregated Assert Records have R=0, as (S,G) assert records do in <xref target="RFC7761"/>.
RP Aggregated Assert Records have R=1, as (*,G) assert records do in <xref target="RFC7761"/>.</t>

</section>
<section anchor="packedassert-mechanism"><name>PackedAssert Mechanism</name>

<t>PackedAsserts do not change the <xref target="RFC7761"/> PIM assert state machine specification. Instead,
sending and receiving of PackedAssert messages as specified in the following subsections is logically
a layer in between sending/receiving of Assert messages and serialization/deserialization of
their respective packets. There is no change in the information elements of the transmitted
information elements constituting the assert records nor their semantics. Only the compactness
of their encoding.</t>

<section anchor="sending-packedassert-messages"><name>Sending PackedAssert messages</name>

<t>When using assert packing, the regular <xref target="RFC7761"/> Assert message encoding with A=0 and P=0 is
still allowed to be sent.  Routers are free to choose which PackedAssert message type they send.</t>

<t>It is out of scope of this specification for which conditions, such as data-triggered asserts or 
Assert Timer (AT) expiry based asserts, an implementation should generate PackedAsserts instead of Asserts.
Instead,</t>

<t><list style="symbols">
  <t>Implementations are expected to specify in documentation and/or management interfaces (such as a YANG model),
which PackedAssert message types they can send and under which conditions they will.</t>
  <t>Implementation SHOULD NOT send only Asserts, but no PackedAsserts under all conditions, 
when all routers on the LAN do support Assert Packing.</t>
</list></t>

<t>When a PIM router has an assert record ready to send according to
<xref target="RFC7761"/>, it calls send Assert(S,G) / send Assert(<em>,G) (Section 4.2),
Send Assert(S,G) / SendAssertCancel(S,G) (Section 4.6.1),
Send Assert(</em>,G) / Send AssertCancel(*,G) (Section 4.6.2) and
send Assert(S,G) (Section 4.8.2). Each of these calls will send
an Assert message. When sending of PackedAsserts is possible on the
network, any of these calls is permitted to not send an Assert message, but only
remember the assert record, and let PIM continue with further processing
for other flows that may result in additional assert records - to finally
packe PackedAssert messages from the remembered assert records and send them.</t>

<t>The following text discusses several conditions to be taken into account
for this further processing and how to create and schedule PackedAssert messages.</t>

<t>Avoiding possible additional and relevant delay because of further processing
is most critical for assert records that are triggered by
reception of data or reception of asserts against which the router
is in the "I am Assert Winner" state.  In these cases the router
SHOULD send out an Assert or PackedAssert message containing this assert record
as soon as possible to minimize the time in which duplicate IP multicast packets can occur.</t>

<t>To avoid additional delay in this case, the router should employ appropriate
assert packing and scheduling mechanisms, such as for example the following.</t>

<t>Asserts/PackedAsserts in this case are scheduled for serialization with highest priority, such
that they bypass any potentially earlier scheduled other packets.
When there is no such Assert/PacketAssert message scheduled for or being serialized,
the router immediately serializes an Assert or PackedAssert message without further assert packing.
If there are one or more Assert/PackedAssert messages serialized and/or scheduled to be serialized,
then the router can pack assert records into new PackedAssert messages until shortly before the
last of those Assert/PackedAssert packets has finished serializing.</t>

<t>Asserts triggered by expiry of the AT on an assert winner are not time-critical because
they can be scheduled in advance and because the Assert_Override_Interval parameter of <xref target="RFC7761"/> already
creates a 3 second window in which such assert records can be sent, received, and processed before
an assert losers state would expire and duplicate IP multicast packets could occur.</t>

<t>An example mechanism to allow packing of AT expiry triggered assert records on assert winners is
to round the AT to an appropriate granularity such as 100msec.  This will cause AT for multiple
(S,G) and/or (*,G) states to expire at the same time, thus allowing them to be easily packed
without changes to the assert state machinery.</t>

<t>AssertCancel messages have assert records with an infinite metric and can use assert packing
as any other Assert. They are sent on Override Timer (OT) expiry and can be packed for example
with the same considerations as AT expiry triggered assert records.</t>

<t>Additional delay is not "relevant" when it still causes the overall amount of (possible) duplicate
IP multicast packets to decrease in a condition with large number of (S,G) and/or (*,G), compared
to the situation in which no delay is added by the implementation.</t>

<t>This can simply be the case because the implementation can not afford to implement the (more advanced)
mechanisms described above, and some simpler mechanism that does introduce some additional delay
still causes more overall reduction in duplicate IP multicast packets than not sending PackedAsserts at all,
but only Asserts.</t>

<t>"Relevant" is a highly implementation dependent metric and can typically only be measured 
against routers of the same type as receivers, and performance results with other routers will likely
differ. Therefore it is optional.</t>

<t>When Asserts are sent, a single packet loss will result only in continued or new
duplicates from a single IP multicast flow.  Loss of (non AssertCancel) PackedAssert impacts
duplicates for all flows packed into the PackedAssert and may result in the need
for re-sending more than one Assert/PacketAssert, because of the possible inability to pack the assert records in this condition.  Threrefore, routers SHOULD support mechanisms allowing for PackedAsserts and Asserts to
be sent with an appropriate DSCP, such as Expedited Forwarding  (EF), to minimize their loss, especially
when duplicate IP multicast packets could cause congestion and loss.</t>

<t>Routers MAY support a configurable option for sending PackedAssert messages twice in short order
(such as 50msec apart), to overcome possible loss, but only when the following two conditions
are met.</t>

<t><list style="numbers">
  <t>The total size of the two PackedAsserts is less than the total size of equivalent Assert messages,</t>
  <t>The condition of the assert records flows in the PackedAssert is such that the router
can expect that their reception by PIM routers will not trigger Assert/PackedAsserts replies.
This condition is true for example when sending an assert record while becoming or being Assert Winner (Action A1/A3 in <xref target="RFC7761"/>).</t>
</list></t>

<t>It is "sufficient" that assert records are not packed up to MTU size, but to a size that
allows the router to achieve the required operating scale of (S,G) and (*,G) flows with minimum duplicates.
This packing size may be larger when the network is operating with the maximum number of supported multicast
 flows, and it can be a smaller packing size when operating with fewer multicast flows. Larger than "sufficient"
packets may then not provide additional benefits, because they only reduce the performance requirements for
packet sending and reception, and other performance limiting factors may take over once
a "sufficient" size is reached. And larger packets can incur more duplicates on loss.
Routers MAY support a "sufficient" amount of packing to minimize the negative impacts of loss of PackedAssert packets
without loss of performance of minimizing IP multicast packet duplication.</t>

</section>
<section anchor="receiving-packedassert-messages"><name>Receiving PackedAssert messages</name>

<t>Upon reception of a PackedAssert message, the PIM router logically
converts its payload into a sequence of assert records that are then processed
as if an equivalent sequence of Assert messages where received according to <xref target="RFC7761"/>.</t>

</section>
</section>
</section>
<section anchor="packet-formats"><name>Packet Formats</name>

<t>This section describes the format of new PIM extensions introduced by
this document.</t>

<section anchor="assert-packing-option"><name>PIM Assert Packing Hello Option</name>

<figure title="PIM Assert Packing Hello Option" anchor="FIG-HELLO-OPTION"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      OptionType = TBD         |      OptionLength = 0         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>The PIM Assert Packing Hello Option is a new option for PIM Hello Messages according to Section 4.9.2 of <xref target="RFC7761"/>.</t>

<t><list style="symbols">
  <t>OptionType TBD: 
  PIM Packed Assert Capability Hello Option</t>
</list></t>

<t>Including the PIM OptionType TBD indicates support for the ability to
receive and process all the PackedAssert encodings defined in this document.</t>

</section>
<section anchor="rfc7761-assert-message"><name>Assert Message Format</name>

<figure title="Assert" anchor="FIG-MESSAGE-ASSERT"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |7 6 5 4 3 2|A|P|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Group Address (Encoded-Group format)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Source Address (Encoded-Unicast format)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                      Metric Preference                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Metric                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><xref target="FIG-MESSAGE-ASSERT"/> shows a PIM Assert message as specified in Section 4.9.6 of
<xref target="RFC7761"/> with the common header showing the Flag Bits defined in <xref target="RFC8736"/> and
the location of the P and A flags.  As specified in <xref target="assert-packing-formats"/>, both
flags in a (non-packed) PIM Assert message are required to be set to 0.</t>

</section>
<section anchor="simple-packedassert-message"><name>Simple PackedAssert Message Format</name>

<figure title="Simple PackedAssert" anchor="FIG-MESSAGE-SIMPLE"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |7 6 5 4 3 2|A|P|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Count                    |  Reserved                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [1]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [2]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [M]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>PIM Version, Type, Checksum:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
  <t>7 6 5 4 3 2: Flag bits according to Section 4 of <xref target="RFC8736"/>.</t>
  <t>Reserved:
   Set to zero on transmission.  Ignored upon receipt.</t>
  <t>P: packed flag. MUST be 1.</t>
  <t>A: aggregated flag. MUST be 0.</t>
  <t>Count  <vspace blankLines='1'/>
The number of packed Assert Records in the message.</t>
</list></t>

<t>The format of each Assert Record is the same as the PIM assert message body as specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>

<figure title="Assert Record" anchor="FIG-ASSERT-RECORD-FORMAT"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Group Address (Encoded-Group format)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Source Address (Encoded-Unicast format)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                      Metric Preference                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Metric                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

</section>
<section anchor="aggregated-packedassert-message"><name>Aggregated PackedAssert Message Format</name>

<figure title="Aggregated PackedAssert" anchor="FIG-PACKET-FORMAT-SG"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|PIM Ver| Type  |7 6 5 4 3 2|A|P|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Count  (M)       |  Reserved                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [1]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [2]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [M]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>PIM Version, Type, Reserved, Checksum:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
  <t>7 6 5 4 3 2: Flag bits according to Section 4 of <xref target="RFC8736"/>.</t>
  <t>P: packed flag. MUST be 1.</t>
  <t>A aggregated flag. MUST be 1.</t>
  <t>Count:  <vspace blankLines='1'/>
The number of Aggregated Assert Records following in the message.
  Each of these records can either be a Source Aggregated or RP aggregated Assert Record.</t>
</list></t>

<section anchor="s-assert-record"><name>Source Aggregated Assert Record</name>

<figure title="Source Aggregated Assert Record" anchor="FIG-RECORD-FORMAT-SG"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                      Metric Preference                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Metric                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Source Address (Encoded-Unicast format)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Number of Groups (N)   |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Group Address 1 (Encoded-Group format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Group Address 2 (Encoded-Group format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             .                                 |
|                             .                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 Group Address N (Encoded-Group format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>Reserved:
   Set to zero on transmission.  Ignored upon receipt.</t>
  <t>R: MUST be 0.  <vspace blankLines='1'/>
R indicates both that the encoding format of the record is that of a Source Aggregated Assert Record,
  but also that all assert records represented by the Source Aggregated Assert Record have R=0 and are therefore
  (S,G) assert records according to the definition of R in <xref target="RFC7761"/>, Section 4.9.6.</t>
  <t>Source Address, Metric Preference, Metric:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.  Source Address MUST NOT be zero.</t>
  <t>Number of Groups:  <vspace blankLines='1'/>
The number of Group Address fields.</t>
  <t>Group Address:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
</list></t>

</section>
<section anchor="rp-assert-record"><name>RP Aggregated Assert Record</name>

<t>An RP Aggregation Assert record aggregates (*,G) assert records with
the same Metric Preference and Metric. Typically this is the case
for all (*,G) using the same RP, but the encoding is not limited
to only (*,G) using the same RP because the RP address is not
encoded as it is also not present in <xref target="RFC7761"/> assert records.</t>

<figure title="RP Aggregated Assert Record" anchor="FIG-RECORD-FORMAT-RP"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                      Metric Preference                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Metric                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Number of Group Records (K) |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Group Record [1]                       .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Group Record [2]                       .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Group Record [K]                       .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>R: MUST be 1.  <vspace blankLines='1'/>
R indicates both that the encoding format of the record is that of an RP Aggregated Assert Record,
  and that all assert records represented by the RP Aggregated Assert Record have R=1 and are therefore
  (*,G) assert records according to the definition of R in <xref target="RFC7761"/>, Section 4.9.6.</t>
  <t>Metric Preference, Metric:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
  <t>Reserved:
  Set to zero on transmission.  Ignored upon receipt.</t>
  <t>Number of Group Records:  <vspace blankLines='1'/>
The number of packed Group Records. A record consists of a Group
  Address and a Source Address list with a number of sources.</t>
</list></t>

<t>The format of each Group Record is:</t>

<figure title="Group Record" anchor="FIG-GROUP-RECORD"><artwork><![CDATA[
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Group Address (Encoded-Group format)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Number of Sources (P)  |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Source Address 1 (Encoded-Unicast format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Source Address 2 (Encoded-Unicast format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             .                                 |
|                             .                                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Source Address P (Encoded-Unicast format)        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>Group Address and Reserved:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
  <t>Reserved:
   Set to zero on transmission.  Ignored upon receipt.</t>
  <t>Number of Sources:  <vspace blankLines='1'/>
The Number of Sources is corresponding to the number of Source Address fields in the Group Record.
  If this number is 0, the Group Record indicates one assert record with a Source Address of 0.
  If this number is not 0 and one of the (*,G) assert records to be encoded should have
  the Source Address 0, then 0 needs to be encoded as one of the Source Address fields.</t>
  <t>Source Address:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.
  But there can be multiple Source Address fields in the Group Record.</t>
</list></t>

</section>
</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>IANA is requested to assign a new code point from the "PIM-Hello
Options" registry for the Packed Assert Capability as follows:</t>

<figure anchor="FIG-IANA-ASK"><artwork><![CDATA[
+=======+========+=========================+================+
| Value | Length |          Name           | Reference      |
+=======+========+=========================+================+
| TBD   |      0 | Packed Assert Capability| [This Document]|
+=======+========+=========================+================+
]]></artwork></figure>

<t>IANA is requested to assign two Flag Bits in the Assert message
from the "PIM Message Types" registry as follows:</t>

<figure anchor="FIG-IANA-ASK2"><artwork><![CDATA[
+======+========+=================+====================+
| Type | Name   | Flag Bits       | Reference          |
+======+========+=================+====================+
|   5  | Assert | 2-7: Reserved   | [RFC3973][RFC7761] |
|      |        |   1: Aggregated | [This Document]    |
|      |        |   0: Packed     | [This Document]    |
+======+========+=================+====================+
]]></artwork></figure>

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

<t>The security considerations of <xref target="RFC7761"/> apply to the extensions
defined in this document.</t>

<t>This document packs multiple assert records in a single message. As
described in Section 6.1 of <xref target="RFC7761"/>, a forged Assert message could
cause the legitimate designated forwarder to stop forwarding traffic
to the LAN. The effect may be amplified when using a PackedAssert message.</t>

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

<t>The authors would like to thank: Stig Venaas for the valuable
contributions of this document, Alvaro Retana for his thorough
and constructive RTG AD review.</t>

</section>
<section anchor="working-group-considerations"><name>Working Group considerations</name>

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

<section anchor="open-issues"><name>Open Issues</name>

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

<t>This document is hosted starting with -06 on https://github.com/toerless/pim-assert-packing.</t>

<section anchor="draft-ietf-pim-assert-packing-08"><name>draft-ietf-pim-assert-packing-08</name>

<t>Included changes from review of Alvaro Retana (https://mailarchive.ietf.org/arch/msg/pim/GsKq9bB2a6yDdM9DvAUGCWthdEI)</t>

<t>Please see the following emails discussing the changes:</t>

<t>https://raw.githubusercontent.com/toerless/pim-assert-packing/main/emails/07-alvaro-review-reply.txt</t>

</section>
<section anchor="draft-ietf-pim-assert-packing-07"><name>draft-ietf-pim-assert-packing-07</name>

<t>Included changes from review of Alvaro Retana (https://mailarchive.ietf.org/arch/msg/pim/Cp4o5glUFge2b84X9CQMwCWZjAk/)</t>

<t>Please see the following emails discussing the changes:</t>

<t>https://raw.githubusercontent.com/toerless/pim-assert-packing/main/emails/05-alvaro-review-reply.txt</t>

<t>https://raw.githubusercontent.com/toerless/pim-assert-packing/main/emails/07-pim-wg-announce.txt</t>

</section>
<section anchor="draft-ietf-pim-assert-packing-06"><name>draft-ietf-pim-assert-packing-06</name>

<t>This version was converted from txt format into markdown for better editing later, but is otherwise text identical to -05. It was posted to DataTracker to make diffs easier.</t>

<t>Functional changes:</t>

</section>
</section>
</section>


  </middle>

  <back>


    <references title='Normative References'>





<reference anchor='RFC2119' target='https://www.rfc-editor.org/info/rfc2119'>
<front>
<title>Key words for use in RFCs to Indicate Requirement Levels</title>
<author fullname='S. Bradner' initials='S.' surname='Bradner'><organization/></author>
<date month='March' year='1997'/>
<abstract><t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='2119'/>
<seriesInfo name='DOI' value='10.17487/RFC2119'/>
</reference>



<reference anchor='RFC7761' target='https://www.rfc-editor.org/info/rfc7761'>
<front>
<title>Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)</title>
<author fullname='B. Fenner' initials='B.' surname='Fenner'><organization/></author>
<author fullname='M. Handley' initials='M.' surname='Handley'><organization/></author>
<author fullname='H. Holbrook' initials='H.' surname='Holbrook'><organization/></author>
<author fullname='I. Kouvelas' initials='I.' surname='Kouvelas'><organization/></author>
<author fullname='R. Parekh' initials='R.' surname='Parekh'><organization/></author>
<author fullname='Z. Zhang' initials='Z.' surname='Zhang'><organization/></author>
<author fullname='L. Zheng' initials='L.' surname='Zheng'><organization/></author>
<date month='March' year='2016'/>
<abstract><t>This document specifies Protocol Independent Multicast - Sparse Mode (PIM-SM).  PIM-SM is a multicast routing protocol that can use the underlying unicast routing information base or a separate multicast-capable routing information base.  It builds unidirectional shared trees rooted at a Rendezvous Point (RP) per group, and it optionally creates shortest-path trees per source.</t><t>This document obsoletes RFC 4601 by replacing it, addresses the errata filed against it, removes the optional (*,*,RP), PIM Multicast Border Router features and authentication using IPsec that lack sufficient deployment experience (see Appendix A), and moves the PIM specification to Internet Standard.</t></abstract>
</front>
<seriesInfo name='STD' value='83'/>
<seriesInfo name='RFC' value='7761'/>
<seriesInfo name='DOI' value='10.17487/RFC7761'/>
</reference>



<reference anchor='RFC8174' target='https://www.rfc-editor.org/info/rfc8174'>
<front>
<title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
<author fullname='B. Leiba' initials='B.' surname='Leiba'><organization/></author>
<date month='May' year='2017'/>
<abstract><t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t></abstract>
</front>
<seriesInfo name='BCP' value='14'/>
<seriesInfo name='RFC' value='8174'/>
<seriesInfo name='DOI' value='10.17487/RFC8174'/>
</reference>



<reference anchor='RFC8736' target='https://www.rfc-editor.org/info/rfc8736'>
<front>
<title>PIM Message Type Space Extension and Reserved Bits</title>
<author fullname='S. Venaas' initials='S.' surname='Venaas'><organization/></author>
<author fullname='A. Retana' initials='A.' surname='Retana'><organization/></author>
<date month='February' year='2020'/>
<abstract><t>The PIM version 2 messages share a common message header format. The common header definition contains eight reserved bits. This document specifies how these bits may be used by individual message types and creates a registry containing the per-message-type usage. This document also extends the PIM type space by defining three new message types. For each of the new types, four of the previously reserved bits are used to form an extended type range.</t><t>This document updates RFCs 7761 and 3973 by defining the use of the currently Reserved field in the PIM common header. This document further updates RFCs 7761 and 3973, along with RFCs 5015, 5059, 6754, and 8364, by specifying the use of the currently reserved bits for each PIM message.</t><t>This document obsoletes RFC 6166.</t></abstract>
</front>
<seriesInfo name='RFC' value='8736'/>
<seriesInfo name='DOI' value='10.17487/RFC8736'/>
</reference>




    </references>

    <references title='Informative References'>





<reference anchor='RFC6037' target='https://www.rfc-editor.org/info/rfc6037'>
<front>
<title>Cisco Systems' Solution for Multicast in BGP/MPLS IP VPNs</title>
<author fullname='E. Rosen' initials='E.' role='editor' surname='Rosen'><organization/></author>
<author fullname='Y. Cai' initials='Y.' role='editor' surname='Cai'><organization/></author>
<author fullname='IJ. Wijnands' initials='IJ.' surname='Wijnands'><organization/></author>
<date month='October' year='2010'/>
<abstract><t>This document describes the MVPN (Multicast in BGP/MPLS IP VPNs) solution designed and deployed by Cisco Systems.  The procedures specified in this document are largely a subset of the generalized MVPN framework recently standardized by the IETF.  However, as the deployment of the procedures specified herein predates the publication of IETF standards (in some cases by over five years), an implementation based on these procedures differs in some respects from a fully standards-compliant implementation.  These differences are pointed out in the document.  This document defines a Historic  Document for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='6037'/>
<seriesInfo name='DOI' value='10.17487/RFC6037'/>
</reference>




    </references>


<section anchor="use-case-examples"><name>Use case examples</name>

<section anchor="enterprise-network"><name>Enterprise network</name>

<t>When an Enterprise network is connected through a layer-2 network,
the intra-enterprise runs layer-3 PIM multicast. The different sites
of the enterprise are equivalent to the PIM connection through the
shared LAN network. Depending upon the locations and amount of
groups there could be many asserts on the first-hop routers.</t>

</section>
<section anchor="video-surveillance"><name>Video surveillance</name>

<t>Video surveillance deployments have migrated from analog based
systems to IP-based systems oftentimes using multicast. In the
shared LAN network deployments, when there are many cameras
streaming to many groups there may be issues with many asserts on
first-hop routers.</t>

</section>
<section anchor="financial-services"><name>Financial Services</name>

<t>Financial services extensively rely on IP Multicast to deliver stock
market data and its derivatives, and current multicast solution PIM
is usually deployed. As the number of multicast flows grow, there
are many stock data with many groups may result in many PIM asserts
on a shared LAN network from publisher to the subscribers.</t>

</section>
<section anchor="iptv-broadcast-video"><name>IPTV broadcast Video</name>

<t>PIM DR deployments are often used in host-side network for
IPTV broadcast video services. Host-side access network failure
scenario may be benefitted by assert packing when many groups are
being used. According to <xref target="RFC7761"/> the DR will be elected to forward
multicast traffic in the shared access network. When the DR recovers
from a failure, the original DR starts to send traffic, and the
current DR is still forwarding traffic. In the situation multicast
traffic duplication maybe happen in the shared access network and
can trigger the assert progress.</t>

</section>
<section anchor="mvpn-mdt"><name>MVPN MDT</name>

<t>As described in <xref target="RFC6037"/>, MDT (Multicast Distribution Tree) is used
as tunnels for MVPN. The configuration of multicast-enabled VRF (VPN
routing and forwarding) or interface that is in a VRF changing may
cause many assert packets to be sent in a same time.</t>

</section>
<section anchor="special-l2-services"><name>Special L2 services</name>

<t>Additionally, future backhaul, or fronthaul, networks may want to
connect L3 across an L2 underlay supporting Time Sensitive Networks
(TSN). The infrastructure may run DetNet over TSN. These transit L2
LANs would have multiple upstreams and downstreams. This document is
taking a proactive approach to prevention of possible future assert
issues in these types of environments.</t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
GDBKeo1o8/+nHBqBZZIAAA==

-->

</rfc>

