<?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-07" category="std" consensus="true" submissionType="IETF" updates="RFC7761, RFC3973" 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="10"/>

    
    <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
only be sent when 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 message body of an {RFC7761}}, Section 4.9.6, PIM Assert message, except
for its first four bytes of header, describes the parameters of a (*,G) or
(S,G) assert through the following information elements:
 R(PT), 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 <xref target="RFC8736"/> specified flags in the PIM Assert message header,
the P)acked and the A)ggregated flag.</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)ggregated flag MUST be set to 0. If the P)acked flag
is 1), then the message is called a PackedAssert message and the type and hence
 encoding format of the payload is determined by the A)ggregated 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 option 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)PT 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 in the information elements of the transmitted
information elements constituting the assert records not 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.  Router are free to choose which PackedAssert message type they send. If a router chooses
to send PacketAssert messages, then it MUST comply to the requirements in the remainder
of this section. Implementations SHOULD NOT send only Asserts (but no PackedAsserts) in all
cases when all routers on the LAN do support Assert Packing.</t>

<t>Routers SHOULD specify in documentation and/or management interfaces (such as a YANG model),
which PackedAssert message types they can send and under which conditions they do - such
as for data-triggered asserts or Assert Timer (AT) expiry based asserts.</t>

<t>To send a PackedAssert message, when a PIM router has an assert record ready to sent according to the
pseudocode "send Assert(...)" in <xref target="RFC7761"/>, it will not immediately proceed
in generating a PIM Assert message from it. Instead, it will remember it
for assert packing and proceed with PIM assert processing for other (S,G) and (*,G) flows that will
result in further (S,G) or (*,G) assert records until one or more of the following conditions
is met and only then send the PackedAssert message(s).</t>

<t><list style="numbers">
  <t>RECOMMENDED: Further processing would cause additional delay for sending the PackedAssert message.</t>
  <t>OPTIONAL: Further processing would cause "relevant"(*) delay for sending the PackedAssert message.</t>
  <t>OPTIONAL: The router has packed a "sufficient"(*) number of assert records for a PackedAssert message.</t>
  <t>There is no further space left in a possible PackedAssert message or the implementation does not want to pack further assert records.</t>
</list></t>

<t>(*) "relevant" and "sufficient" are defined in this section below.</t>

<t>Avoiding additional relevant delay is most critical for asserts that are triggered by reception
of data or reception of asserts against which this router is the assert winner, because it needs to
send out an assert to the (potential) assert looser(s) 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 allows 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 them.
Routers SHOULD therefore 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 a) if the total size of the two PackedAsserts
is less than the total size of equivalent Assert messages, and b) if the <xref target="RFC7761"/> conditions that caused
the assert records in the PackedAssert message make the router believe that reception of either copies
of the PackedAssert message will not trigger sending of Assert/PackedAssert.</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.
Considering a "sufficient" amount of packing minimizes the negative impacts of loss of PackedAssert packets
without loss of (minimum packet duplication) performance.</t>

<t>Like "relevant", "sufficient" is highly implementation dependent and hence only optional.</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 messages 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><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  | Reserved  |A|P|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|              Group Address (Encoded-Group format)             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            Source Address (Encoded-Unicast format)            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|                      Metric Preference                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Metric                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>When assert packing is used on a subnet, routers MUST send Assert messages
according to above format. This is exactly the same format as the one defined
in <xref target="RFC7761"/> but the A and P flags are not reserved, but distinguish
this Assert Message Format from those newly defined in this document.</t>

<t><list style="symbols">
  <t>P)acked: MUST be 0.</t>
  <t>A)ggregated: MUST be 0.</t>
</list></t>

<t>All other field according to <xref target="RFC7761"/>, Section 4.9.6.</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  | Reserved  |A|P|           Checksum            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Count                    |  Reserved(2)                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [1]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [2]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [M]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t><list style="symbols">
  <t>PIM Version, Type, Checksum, Reserved:  <vspace blankLines='1'/>
As specified in Section 4.9.6 of <xref target="RFC7761"/>.</t>
  <t>Reserved(2):
   Set to zero on transmission.  Ignored upon receipt.</t>
  <t>P)acked: MUST be 1.</t>
  <t>A)ggregated: 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  | Reserved  |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>P)acked: MUST be 1.</t>
  <t>A)ggregated: 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="updates-from-rfc3973-and-rfc7761"><name>Updates from RFC3973 and RFC7761</name>

<t>This document introduces two new flag bits to the PIM Assert message type,
as defined in <xref target="assert-packing-formats"/>, the P)acked and A)aggregated bits.
When both bits are zero, the packet is an otherwise encoding and semantically
unchanged PIM Assert message.</t>

<t>Requirements for the use of P and A flag with other values than zero 
are specified in this document only for use with <xref target="RFC7761"/>. These
requirements do not apply to <xref target="RFC3973"/> solely because of lack of
interest in the use of the mechanisms specified in this document together with <xref target="RFC3973"/>.</t>

<t>[RFC-Editor: pls. remove this sentence: RFC3973 should be historic by now, and it is only mentioned at all because of the fact that the "PIM Message Type Registry" mentions it, and this document mentions that registry. Depending on IETF/IESG review, the authors would prefer if we could remove all mentioning of RFC3973 in this document, because it may just confuse readers.]</t>

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

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

<t>IANA is requested to allocate a new code points from the "PIM-Hello
Options" registry for TBD.</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>

<t>IANA is asked to add the definition of the Aggregated and Packed
Flags Bits for the PIM Assert Message Type to the
"PIM Message Types" registry according to <xref target="RFC8736"/> IANA considerations,
and as shown in <xref target="FIG-IANA-ASK"/>.</t>

</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-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='RFC3973' target='https://www.rfc-editor.org/info/rfc3973'>
<front>
<title>Protocol Independent Multicast - Dense Mode (PIM-DM): Protocol Specification (Revised)</title>
<author fullname='A. Adams' initials='A.' surname='Adams'><organization/></author>
<author fullname='J. Nicholas' initials='J.' surname='Nicholas'><organization/></author>
<author fullname='W. Siadak' initials='W.' surname='Siadak'><organization/></author>
<date month='January' year='2005'/>
<abstract><t>This document specifies Protocol Independent Multicast - Dense Mode (PIM-DM).  PIM-DM is a multicast routing protocol that uses the underlying unicast routing information base to flood multicast datagrams to all multicast routers.  Prune messages are used to prevent future messages from propagating to routers without group membership information.  This memo defines an Experimental Protocol for the Internet community.</t></abstract>
</front>
<seriesInfo name='RFC' value='3973'/>
<seriesInfo name='DOI' value='10.17487/RFC3973'/>
</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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
/B/GyNRwOJQAAA==

-->

</rfc>

