<?xml version="1.0" encoding="UTF-8"?>

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

<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-pim-assert-packing-12" number="9466" submissionType="IETF" category="std" consensus="true" tocDepth="5" tocInclude="true" sortRefs="true" symRefs="true" updates="" obsoletes="" xml:lang="en" version="3">

  <front>
    <title abbrev="PIM Assert Packing">PIM Assert Message Packing</title>
    <seriesInfo name="RFC" value="9466"/>
    <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="T." surname="Eckert" fullname="Toerless Eckert" role="editor">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>tte@cs.fau.de</email>
      </address>
    </author>
    <author initials="M." surname="McBride" fullname="Mike McBride">
      <organization>Futurewei</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>michael.mcbride@futurewei.com</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="October"/>
    <area>rtg</area>
    <workgroup>pim</workgroup>
    <workgroup>ip</workgroup>
    <workgroup>ipv6</workgroup>
    <workgroup>multicast</workgroup>
    <workgroup>performance</workgroup>
    <workgroup>scalability</workgroup>
    <workgroup>subnet</workgroup>
    <workgroup>lan</workgroup>
    <workgroup>sparse-mode</workgroup>
    <workgroup>ASM</workgroup>
    <workgroup>SSM</workgroup>

    <abstract>

   <t>When PIM Sparse Mode (PIM-SM), including PIM Source-Specific
   Multicast (PIM-SSM), is used in shared LAN networks, there is often more
   than one upstream router. 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>When PIM-SM is used in 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 and Metric Preference of the
   route towards the source or PIM Rendezvous Point (RP).</t>
      <t>This document defines a mechanism to encode the information of
      multiple PIM Assert messages into a single PackedAssert message.  This
      allows sending and receiving 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 be particularly
      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 "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
    NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
    "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
    described in BCP&nbsp;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>
	<dl newline="false" spacing="normal" indent="6">
          <dt>AT:</dt>
	  <dd>Assert Timer</dd>
          <dt>DR:</dt>
	  <dd>Designated Router</dd>
          <dt>RP:</dt>
	  <dd>Rendezvous Point</dd>
          <dt>RPF:</dt>
	  <dd>Reverse Path Forwarding</dd>
          <dt>RPT:</dt>
	  <dd>RP Tree</dd>
          <dt>SPT:</dt>
	  <dd>Shortest Path Tree</dd>
	  </dl>
      </section>
    </section>
    <section anchor="problem-statement">
      <name>Problem Statement</name>
      <t>PIM Asserts occur in many deployments. See <xref target="use-case-examples"/>
for explicit examples and explanations of why it is often not possible to avoid.</t>

<t>PIM Assert state depends mainly on the network topology.
As long as there is a Layer 2 (L2) network with more than two PIM routers,
there may be multiple upstream routers, which can cause duplicate
multicast traffic to be forwarded and assert processing 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 small PIM assert
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. However, these Layer 2
    (L2) and Layer 3 (L3) topology changes are undesirable 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-50
    msec failover mechanisms, something not possible equally with a ring
    composed from L3 subnets. Likewise, IEEE Time-Sensitive Networking
    mechanisms would require an L2 topology that cannot 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>
      <ol spacing="normal" type="1">
	<li>The PIM Packed Assert Capability Hello Option</li>
        <li>The encoding of PackedAssert messages</li>
        <li>How to send and receive PackedAssert messages</li>
      </ol>
      <section anchor="pim-assert-packing-hello-option">
        <name>PIM Packed Assert Capability Hello Option</name>
        <t>The PIM Packed Assert Capability 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"/>) 
<bcp14>MUST NOT</bcp14> 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 <xref target="RFC7761"
        sectionFormat="of" section="4.9.6"/>, describes the parameters of a
        (*,G) or (S,G) assert using 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>This document introduces two new PIM Assert message encodings
        through the allocation and use of two flags in the PIM Assert message
        header <xref target="RFC9436"/>: the Packed (P) and the Aggregated (A)
        flags.</t>
        <t>If P=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
        <bcp14>MUST</bcp14> be set to 0 and <bcp14>MUST</bcp14> be ignored on
        receipt.</t>
        <t>If P=1, then the message is called a "PackedAssert
        message", and the type and hence encoding format of the payload are
        determined by the A flag.</t>
        <t>If A=0, then the message body is a sequence of assert records. 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. This is called an "Aggregated PackedAssert message". 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.  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 Assert Records provide a more compact encoding than
        the Simple PackedAssert message format for (*,G) flows.  The Source
        Address is optionally used in the assert procedures in <xref
        target="RFC7761"/> to indicate the source(s) that triggered the
        assert; otherwise, the Source Address is set to 0 in the assert
        record.</t>
        <t>Both Source Aggregated Assert Records and RP Aggregated Assert
        Records also include the R flag, which maintains its semantics 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 PIM Assert state machine
        specification <xref target="RFC7761"/>. Instead, sending and
        receiving of PackedAssert messages, as specified in the following
        subsections, are logically new packetization options for assert records
        in addition to the (non-packed) Assert message <xref
        target="RFC7761"/>.  There is no change to the assert record
        information elements transmitted or their semantics. They are just
        transmitted in fewer but larger packets, and a fewer total number of
        bytes is used to encode the information elements. As a result, PIM
        routers should be able to send and receive assert records faster
        and/or with less processing overhead.</t>
        <section anchor="sending-packedassert-messages">
          <name>Sending PackedAssert Messages</name>
          <t>When using assert packing, the regular Assert message encoding
          <xref target="RFC7761"/> with A=0 and P=0 is still allowed to be
          sent.  Routers are free to choose which PackedAssert message format
          they send -- simple (<xref target="simple-packedassert-message"/>)
          and/or aggregated (<xref
          target="aggregated-packedassert-message"/>).</t>
          <ul spacing="normal">
            <li>When any PIM routers on the LAN have not signaled support for
            assert packing, implementations <bcp14>MUST</bcp14> only send 
            Asserts and <bcp14>MUST NOT</bcp14> send PackedAsserts under any
            condition.</li>
            <li>The protocol or system conditions for which an implementation
            sends PackedAsserts instead of Asserts are out of scope
            for this specification. Protocol conditions include protocol
            triggers such as data-triggered asserts or Assert Timer (AT)
            expiry-triggered asserts, and system conditions include high or
            low load or control plane packet reception rates.</li>
            <li>Implementations are expected to specify in documentation
            and/or management interfaces (such as a YANG data model) which
            PackedAssert message formats they can send and under which
            conditions they will send them.</li>
            <li>Implementations <bcp14>SHOULD</bcp14> be able to indicate to
            the operator (such as through a YANG data model) how many Assert
            and PackedAssert messages were sent/received and how many assert
            records were sent/received.</li>
         <li>A configuration option <bcp14>SHOULD</bcp14> be available to
         disable PackedAssert operations. PIM-SM implementations <xref
         target="RFC7761"/> that introduce support for assert packing from day
         one <bcp14>MAY</bcp14> omit this configuration option.</li>
          </ul>
          <t>When a PIM router has an assert record ready to send according to
          <xref target="RFC7761"/>, it calls one of the following
          functions:</t>

          <ul spacing="normal">
            <li>send Assert(S,G) / send Assert(*,G) (<xref target="RFC7761"
            sectionFormat="comma" section="4.2"/>)</li>
            <li>send Assert(S,G) / send AssertCancel(S,G) (<xref
            target="RFC7761" sectionFormat="comma" section="4.6.1"/>)</li>
            <li>send Assert(*,G) / send AssertCancel(*,G) (<xref
            target="RFC7761" sectionFormat="comma" section="4.6.2"/>)</li>
            <li>send Assert(S,G) (<xref target="RFC7761" sectionFormat="comma"
            section="4.8.2"/>)</li>
          </ul>
          <t>If sending of PackedAsserts is possible on the network, instead of
          sending an Assert message with an assert record, any of these calls
          <bcp14>MAY</bcp14> instead result in the PIM implementation
          remembering the assert record and continuing with further
          processing for other flows, which may result in additional assert
          records.</t>
          <t>PIM <bcp14>MUST</bcp14> then create PackedAssert messages from
          the remembered assert records and schedule them for sending
          according to the considerations in the following subsections.</t>
          <section anchor="handling-of-reception-triggered-assert-records">
            <name>Handling of Reception-Triggered Assert Records</name>
            <t>Avoiding additional delay because of assert packing compared to
            immediately scheduling Assert messages 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
            <bcp14>SHOULD</bcp14> 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, as
            explained here.</t>
            <t>Asserts/PackedAsserts created from reception-triggered assert
            records should be scheduled for serialization with a higher
            priority than those created because of other protocol or system
            conditions. They should also bypass other PIM messages that can
            create significant bursts, such as PIM join/prune messages.</t>
            <t>When there are no reception-triggered Assert/PackedAssert
            messages currently being serialized on the interface or scheduled
            to be sent, the router should immediately generate and schedule an
            Assert or PackedAssert message without further assert packing.</t>
            <t>If one or more reception-triggered Assert/PackedAssert messages
            are already serializing or are scheduled to be serialized on the
            outgoing interface, then the router can use the time until the
            last of those messages has finished serializing for PIM processing
            of further conditions. This may result in additional
            reception-triggered assert records and the packing of these assert
            records without introducing additional delay.</t>
          </section>
          <section anchor="handling-of-timer-expiry-triggered-assert-records">
            <name>Handling of Timer Expiry-Triggered Assert Records</name>
            <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 <xref
            target="RFC7761"/> already creates a 3-second window in which such
            assert records can be sent, received, and processed before an
            assert loser's state expires 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 100 msec.  This will cause the 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 like 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>
          </section>
          <section anchor="beneficial">
            <name>Beneficial Delay in Sending PackedAssert Messages</name>
	    <t>Delay in sending PackedAsserts beyond what was discussed in
            prior subsections can still be beneficial when it causes the
            overall number of possible duplicate IP multicast packets to
            decrease in a situation with a large number of (S,G) and/or (*,G),
            compared to the situation where an implementation only sends
            Assert messages.</t>
            <t>This delay can be used in implementations because it cannot
            support the more advanced mechanisms described above, and this
            longer delay can be achieved by some simpler mechanisms (such as
            only periodic generation of PackedAsserts) and still achieves an
            overall reduction in duplicate IP multicast packets compared to
            sending only Asserts.</t>
          </section>
          <section anchor="handling-assertpackedassert-message-loss">
            <name>Handling Assert/PackedAssert Message Loss</name>
            <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 a (non-AssertCancel) PackedAssert impacts duplicates for all
            flows packed into the PackedAssert and may result in the need for
            resending more than one Assert/PackedAssert, because of the
            possible inability to pack the assert records in this condition.
            Therefore, routers <bcp14>SHOULD</bcp14> support mechanisms
            that allow PackedAsserts and Asserts to be sent with an
            appropriate Differentiated Services Code Point (DSCP) <xref
            target="RFC2475"/> such as Expedited Forwarding (EF) to
            minimize their loss, especially when duplicate IP multicast
            packets could cause congestion and loss.</t>
            <t>Routers <bcp14>MAY</bcp14> support a configurable option for
            sending PackedAssert messages twice in short order (such as 50
            msec apart) to overcome possible loss, but only when the following
            two conditions are met.</t>
            <ol spacing="normal" type="1">
	      <li>The total size of the two PackedAsserts is less than the
	      total size of equivalent Assert messages.</li>
              <li>The condition of the assert record 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"/>).</li>
            </ol>
          </section>
          <section anchor="optimal-degree-of-assert-record-packing">
            <name>Optimal Degree of Assert Record Packing</name>
            <t>The optimal target packing size will vary depending on factors
            including implementation characteristics and the required
            operating scale. At some point, as the target packing size is
            varied from the size of a single non-packed Assert to the MTU
            size, a size can be expected to be found where the router can
            achieve the required operating scale of (S,G) and (*,G) flows with
            minimum duplicates.  Beyond this size, a further increase in the
            target packing size would not produce further benefits but might
            introduce possible negative effects such as the incurrence of more
            duplicates on loss.</t>
            <t>For example, in some router implementations, the total number
            of packets that a control plane function such as PIM can
            send/receive per unit of time is a more limiting factor than the
            total amount of data across these packets. As soon as the packet
            size is large enough for the maximum possible payload throughput,
            increasing the packet size any further may still reduce the
            processing overhead of the router but may increase latency
            incurred in creating the packet in a way that may increase
            duplicates compared to smaller packets.</t>
          </section>
        </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 were 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 Packed Assert Capability Hello Option</name>
        <t>The PIM Packed Assert Capability Hello Option is a new option for PIM Hello
        messages according to <xref target="RFC7761" sectionFormat="of"
        section="4.9.2"/>.</t>
	<figure
        anchor="FIG-HELLO-OPTION"> <name>PIM Packed Assert Capability Hello
        Option</name>
        <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 = 40          |      OptionLength = 0         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>

        <dl spacing="normal" newline="true">
          <dt>OptionType 40 (Packed Assert Capability):</dt>
	  <dd>Indicates support for the ability to receive and process all the
	  PackedAssert encodings defined in this document.</dd>
	  <dt>OptionLength 0:</dt>
	  <dd>The Packet Assert Capability has no OptionValue.</dd>
      </dl>
      </section>
      <section anchor="rfc7761-assert-message">
        <name>Assert Message Format</name>
        <t><xref target="FIG-MESSAGE-ASSERT"/> shows a PIM Assert message as
        specified in <xref target="RFC7761" sectionFormat="of"
        section="4.9.6"/>. The Encoded-Group and Encoded-Unicast address
        formats are specified in <xref target="RFC7761" sectionFormat="of"
        section="4.9.1"/> for IPv4 and IPv6.</t>
        <figure anchor="FIG-MESSAGE-ASSERT">
          <name>Assert Message Format</name>
          <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>This common header shows the "7 6 5 4 3 2" flag bits (as defined in
        <xref target="RFC9436" sectionFormat="of" section="4"/>) and the
        location of the P and A flags (as described in <xref target="IANA"/>).
        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 anchor="FIG-MESSAGE-SIMPLE">
          <name>Simple PackedAssert Message Format</name>
          <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            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Zero       |                     Reserved                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [1]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [2]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                        Assert Record [M]                      .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl spacing="normal" newline="true">
          <dt>PIM Version, Type, Checksum:</dt>
          <dd>As specified in <xref target="RFC7761" sectionFormat="of"
          section="4.9.6"/>.</dd>
          <dt>"7 6 5 4 3 2":</dt>
	  <dd>Flag bits per <xref
	  target="RFC9436" sectionFormat="of" section="4"/>.</dd>
          <dt>P:</dt>
	  <dd>Packed flag. <bcp14>MUST</bcp14> be 1.</dd>
          <dt>A:</dt>
	  <dd>Aggregated flag. <bcp14>MUST</bcp14> be 0.</dd>
          <dt>Zero:</dt>
	  <dd>Set to zero on transmission. Serves to make PIM routers that are
	  not capable of assert packing to fail in parsing the message instead
	  possible mis-parsing of the message as an Assert message <xref
	  target="RFC7761" format="default"/> if this field was not
	  zero-filled.</dd>
          <dt>Reserved:</dt>
	  <dd>Set to zero on transmission.  Ignored upon receipt.</dd>
          <dt>M:</dt>
	  <dd>The number of Assert Records in the message. Derived from the
	  length of the packet carrying the message.</dd>
          <dt>Assert Record:</dt>
	  <dd>Formatted according to <xref target="FIG-MESSAGE-SIMPLE"/>,
	  which is the same as the PIM Assert message body as specified in
	  <xref target="RFC7761" sectionFormat="of" section="4.9.6"/>.</dd>
        </dl>
        <t>The format of each Assert Record is the same as the PIM Assert
        message body as specified in <xref target="RFC7761" sectionFormat="of"
        section="4.9.6"/>.</t>
        <figure anchor="FIG-ASSERT-RECORD-FORMAT">
          <name>Assert Record</name>
          <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 anchor="FIG-PACKET-FORMAT-SG">
          <name>Aggregated PackedAssert Message Format</name>
          <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            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Zero       |                     Reserved                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [1]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [2]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               .                               |
.                               .                               .
|                               .                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
.                                                               .
.                     Aggregated Assert Record [M]              .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        </figure>
        <dl spacing="normal" newline="true">
          <dt>PIM Version, Type, Reserved, Checksum:</dt>
	  <dd>As specified in <xref target="RFC7761" sectionFormat="of"
	  section="4.9.6"/>.</dd>
          <dt>"7 6 5 4 3 2":</dt>
	  <dd>Flag bits per <xref
	  target="RFC9436" sectionFormat="of" section="4"/>.</dd>
          <dt>P:</dt>
	  <dd>Packed flag. <bcp14>MUST</bcp14> be 1.</dd>
          <dt>A:</dt>
	  <dd>Aggregated flag. <bcp14>MUST</bcp14> be 1.</dd>
          <dt>Zero:</dt>
	  <dd>Set to zero on transmission. Serves to make PIM routers that are
	  not capable of assert packing to fail in parsing the message instead
	  possible mis-parsing of the message as an Assert message <xref
	  target="RFC7761" format="default"/> if this field was not
	  zero-filled.</dd>
          <dt>Aggregated Assert Record:</dt>
	  <dd>Formatted according to <xref target="FIG-PACKET-FORMAT-SG"/>.
	  The number M of Aggregated Assert Records is determined from the
	  packet size.</dd>
        </dl>
        <section anchor="s-assert-record">
          <name>Source Aggregated Assert Record</name>
          <figure anchor="FIG-RECORD-FORMAT-SG">
            <name>Source Aggregated Assert Record</name>
            <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>

          <dl spacing="normal" newline="true">
            <dt>R:</dt>
	    <dd><t><bcp14>MUST</bcp14> be 0.</t>
            <t>R indicates both that the encoding format of the record is that
            of a Source Aggregated Assert Record and 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" sectionFormat="comma"
            section="4.9.6"/>.</t>
            </dd>
            <dt>Metric Preference, Metric, Source Address:</dt>
	    <dd>As specified in <xref target="RFC7761" sectionFormat="of"
	    section="4.9.6"/>.  Source Address <bcp14>MUST NOT</bcp14> be
	    zero.</dd>
            <dt>Number of Groups:</dt>
	    <dd>The number of Group Address fields.</dd>
            <dt>Reserved:</dt>
	    <dd> Set to zero on transmission.  Ignored upon receipt.</dd>
            <dt>Group Address:</dt>
	    <dd>As specified in <xref target="RFC7761" sectionFormat="of"
	    section="4.9.6"/>.</dd>
          </dl>
        </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 assert records <xref
          target="RFC7761"/>.</t>
          <figure anchor="FIG-RECORD-FORMAT-RP">
            <name>RP Aggregated Assert Record</name>
            <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>
          <dl spacing="normal" newline="true">
            <dt>R:</dt>
	    <dd><t><bcp14>MUST</bcp14> be 1.</t>
              <t>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" sectionFormat="comma"
              section="4.9.6"/>.</t>
            </dd>
            <dt>Metric Preference, Metric:</dt>
            <dd>As specified in <xref target="RFC7761" sectionFormat="of"
            section="4.9.6"/>.</dd>
            <dt>Number of Group Records (K):</dt>
            <dd>The number of packed Group Records. A record consists of a
            Group Address and a Source Address list with a number of
            sources.</dd>
            <dt>Reserved:</dt>
	    <dd>Set to zero on transmission.  Ignored upon receipt.</dd>
          </dl>
          <t>The format of each Group Record is:</t>
          <figure anchor="FIG-GROUP-RECORD">
            <name>Group Record</name>
            <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>
          <dl spacing="normal" newline="true">
            <dt>Group Address:</dt>
	    <dd>As specified in <xref target="RFC7761" sectionFormat="of"
            section="4.9.6"/>.</dd>
	    <dt>Reserved:</dt>
            <dd>Set to zero on transmission.  Ignored upon receipt.</dd>
            <dt>Number of Sources (P):</dt>
            <dd>The Number of Sources corresponds to the number of Source
            Address fields in the Group Record. If this number is not 0 and
            one of the (*,G) assert records to be encoded has Source Address
            0, then 0 needs to be encoded as one of the Source Address
            fields.</dd>
            <dt>Reserved:</dt>
	    <dd> Set to zero on transmission.  Ignored upon receipt.</dd>
            <dt>Source Address:</dt>
            <dd>As specified in <xref target="RFC7761" sectionFormat="of"
            section="4.9.6"/>.  But there can be multiple Source Address
            fields in the Group Record.</dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <t>IANA has updated the "PIM Message Types" registry as follows to
      include the Packed and Aggregated flag bits for the Assert message
      type.</t>

<table anchor="FIG-IANA" align="left">
  <name>PIM-Hello Options</name>
  <thead>
    <tr>
      <th>Value</th>
      <th>Length</th>
      <th>Name</th>
      <th>Reference</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td align="center">40</td>
      <td align="center">0</td>
      <td>Packed Assert Capability</td>
      <td>RFC 9466</td>
    </tr>
  </tbody>
</table>


      <t>IANA has assigned the following two flag bits for PIM Assert messages
in the "PIM Message Types" registry.</t>

<table anchor="FIG-IANA2" align="left">
  <name>PIM Message Types</name>
  <thead>
    <tr>
      <th>Type</th>
      <th>Name</th>
      <th>Flag Bits</th>
      <th>Reference</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td align="center" rowspan="3">5</td>
      <td rowspan="3">Assert</td>
      <td>0: Packed</td>
      <td>RFC 9466</td>
    </tr>
    <tr>
      <td>1: Aggregated</td>
      <td>RFC 9466</td>
    </tr>
    <tr>
      <td>2-7: Unassigned</td>
      <td><xref target="RFC3973"
      format="default"/> <xref target="RFC7761" format="default"/></td>
    </tr>
  </tbody>
</table>

    </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 <xref target="RFC7761" sectionFormat="of" section="6.1"/>,
      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>
      <t>Like other optional extensions of <xref target="RFC7761"/> that are
      active only when all routers indicate support for them, a single
      misconfigured or malicious router emitting forged PIM Hello messages can
      inhibit operations of this extension.</t>
      <t>Authentication of PIM messages, such as that explained in Sections
      <xref target="RFC7761" section="6.2" sectionFormat="bare"/> and <xref
      target="RFC7761" section="6.3" sectionFormat="bare"/> of <xref
      target="RFC7761"/>, can protect against forged message attacks
      attacks.</t>
    </section>


  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7761.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.9436.xml"/>

      </references>
      <references>
        <name>Informative References</name>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2475.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3973.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.6037.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7431.xml"/>
        <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7490.xml"/>
      </references>
    </references>
    <section anchor="use-case-examples">
      <name>Use Case Examples</name>
      <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. However, these L2/L3
      topology changes are undesirable 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 L3 ring designs are specifically undesirable when particular L2
      technologies are needed.  For example, various L2 technologies for rings
      provide sub-50 msec failover mechanisms that will benefit IP unicast and
      multicast alike without any added complexity to the IP layer (forwarding
      or routing). If such L2 rings were to be replaced by L3 rings just to
      avoid PIM asserts, then this would result in the need for a complex
      choice of a sub-50 msec IP unicast failover solution (such as <xref
      target="RFC7490" format="default"/> with IP repair tunnels) as well as a
      separate sub-50 msec IP multicast failover solution, (such as <xref
      target="RFC7431" format="default"/> with dedicated ring support). The
      mere fact that, by running at the IP layer, different solutions for IP
      unicast and multicast are required makes them more difficult to operate,
      and they typically require more expensive hardware. This often leads to
      non-support of the IP multicast part.</t>
      <t>Likewise, IEEE Time-Sensitive Networking mechanisms would require an
      L2 topology that cannot simply be replaced by an L3 topology.  L2
      sub-topologies can also significantly reduce the cost of deployment.</t>
      <t>The following subsections give examples of the type of network and
      use cases in which subnets with asserts have been observed or are
      expected to require scaling as provided by this specification.</t>
      <section anchor="enterprise-network">
        <name>Enterprise Network</name>
        <t>When an enterprise network is connected through an L2 network,
        the intra-enterprise runs L3 PIM multicast. The different sites
        of the enterprise are equivalent to the PIM connection through the
        shared LAN network. Depending upon the locations and number 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 the current multicast
        solution PIM is usually deployed. As the number of multicast flows
        grow, many stock data with many groups may result in many PIM asserts
        on a shared LAN network from the 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 scenarios
        may benefit from 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 this 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"/>, Multicast Distribution
        Tree (MDT) is used as tunnels for Multicast VPN (MVPN). The
        configuration of multicast-enabled VPN Routing and Forwarding (VRF) or
        changes to an interface that is in a VRF may cause many assert packets
        to be sent at the 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
        (TSNs). The infrastructure may run Deterministic Networking (DetNet)
        over TSN. These transit L2 LANs would have multiple upstreams and
        downstreams. This document takes a proactive approach to
        prevention of possible future assert issues in these types of
        environments.</t>
      </section>
    </section>

    <section anchor="acknowledgments" numbered="false" toc="default">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the following individuals: <contact fullname="Stig Venaas"/>
      for the valuable contributions of this document, <contact
      fullname="Alvaro Retana"/> for his thorough and constructive RTG AD
      review, <contact fullname="Ines Robles"/> for her Gen-ART review,
      <contact fullname="Tommy Pauly"/> for his Transport Area review,
      <contact fullname="Robert Sparks"/> for his SecDir review, <contact
      fullname="Shuping Peng"/> for her RtgDir review, <contact fullname="John
      Scudder"/> for his RTG AD review, <contact fullname="Éric Vyncke"/> for
      his INT AD review, <contact fullname="Eric Kline"/> for his INT AD
      review, <contact fullname="Paul Wouter"/> for his SEC AD review,
      <contact fullname="Zaheduzzaman Sarker"/> for his TSV AD review,
      <contact fullname="Robert Wilton"/> for his OPS AD review, and <contact
      fullname="Martin Duke"/> for his TSV AD review.</t>
    </section>

  </back>

</rfc>
