<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.24 (Ruby 3.2.3) -->
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-karstens-pim-multicast-snooping-optimization-01" category="std" consensus="true" submissionType="IETF" updates="3810, 4541" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Multicast Snooping Optimizations">Multicast Snooping Optimizations</title>
    <seriesInfo name="Internet-Draft" value="draft-karstens-pim-multicast-snooping-optimization-01"/>
    <author initials="N." surname="Karstens" fullname="Nate Karstens">
      <organization>Garmin International</organization>
      <address>
        <email>nate.karstens@garmin.com</email>
      </address>
    </author>
    <author initials="Z." surname="Zhang" fullname="Zhaohui Zhang">
      <organization>Juniper Networks</organization>
      <address>
        <email>zzhang@juniper.net</email>
      </address>
    </author>
    <author initials="L." surname="Giuliano" fullname="Lenny Giuliano">
      <organization>Juniper Networks</organization>
      <address>
        <email>lenny@juniper.net</email>
      </address>
    </author>
    <author initials="N." surname="Ashik" fullname="Naveen Ashik">
      <organization>Juniper Networks</organization>
      <address>
        <email>nashik@juniper.net</email>
      </address>
    </author>
    <author initials="J." surname="Huang" fullname="Joseph Huang">
      <organization>Garmin International</organization>
      <address>
        <email>joseph.huang@garmin.com</email>
      </address>
    </author>
    <date year="2025" month="March" day="15"/>
    <area>Routing</area>
    <workgroup>pim</workgroup>
    <keyword>multicast snooping</keyword>
    <abstract>
      <?line 68?>

<t>TODO: provide abstract</t>
    </abstract>
  </front>
  <middle>
    <?line 72?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Considerations for the operation of IGMP and MLD snooping switches are described in <xref target="RFC4541"/>. In the intervening years since publication, industry has gained experience with deploying this technology and have identified areas of improvement on the original document, including how traffic distribution can be optimized for certain types of networks.</t>
      <t>One area of improvement is that there appears to be a gap in the control path forwarding rules outlined in <xref section="2.1.1" sectionFormat="comma" target="RFC4541"/>. Forwarding rules are defined for switch ports attached to multicast routers and switch ports attached to hosts, but switch ports attached to other switches are not mentioned, leaving the operation of these ports open to interpretation.</t>
      <t>The authors may have purposefully limited consideration to networks with only a single switch, though this is not explicitly stated. In one sense, a network with a hierarchy of switches may be modeled as a single switch (in other words, the fact that multiple switches are being used would be transparent to any host or multicast router attached to the network). One side-effect of this approach is that it obscures how the network distributes traffic between multiple switches.</t>
      <t>This router-centric view of multicast traffic distribution is likely rooted in the nature of the IGMP and MLD protocols, whose stated purpose is to communicate group membership (that is, the fact that a host would like to receive a given stream of multicast data) to a multicast router. Two types of networks would benefit from a closer examination of how traffic is distributed between multiple switches: 1) networks that do not contain a multicast router and 2) networks that contain a multicast router, but have a significant volume of multicast data that does not need to be routed outside of the local network.</t>
      <t>The following diagram depicts an example network that can be used to illustrate the point:</t>
      <figure>
        <name>Example Network</name>
        <artwork><![CDATA[
                        /------\
                        |      |
               //=======|  S2  |=======\\
               ||       |      |       ||
               mr       \------/       ||
            /------\                /------\
            |      |                |      |
   //=======|  S1  |=======\\       |  H4  |
   ||       |      |       ||       |      |
   ||       \------/       ||       \------/
   ||          ||          ||
   ||          ||          ||
/------\    /------\    /------\
|      |    |      |    |      |
|  H1  |    |  H2  |    |  H3  |
|      |    |      |    |      |
\------/    \------/    \------/
]]></artwork>
      </figure>
      <t>S1 has designated its port connected to S2 as a multicast router port.</t>
      <t>Suppose the example network contains two multicast streams:</t>
      <ul spacing="normal">
        <li>
          <t>Stream 1 generated by H1 and consumed by H3</t>
        </li>
        <li>
          <t>Stream 2 generated by H2 and consumed by H4</t>
        </li>
      </ul>
      <t>The problem is that Stream 1 is forwarded from S1 to S2 even though there are no consumers of this data. This is due to the following data forwarding rule in <xref section="2.1.2" sectionFormat="comma" target="RFC4541"/>:</t>
      <blockquote>
        <t>Packets with a destination IP address outside 224.0.0.X which are not IGMP should be forwarded according to group-based port membership tables and must also be forwarded on router ports.</t>
      </blockquote>
      <t>While it would be tempting to ignore this rule so that Stream 1 is no longer forwarded, this would also prevent Stream 2 from reaching H4. This is because of the following IGMP forwarding rule in <xref section="2.1.1" sectionFormat="comma" target="RFC4541"/>:</t>
      <blockquote>
        <t>A snooping switch should forward IGMP Membership Reports only to those ports where multicast routers are attached.</t>
      </blockquote>
      <t>This rule prevents S2 from forwarding the Membership Report from H4 to S1, so S1 does not mark the port connected to S2 as a member of the multicast group for Stream 2.</t>
      <t><xref target="RFC4541"/> indicates that this rule is meant to prevent a host running IGMPv1 or IGMPv2 (or MLDv1) from suppressing its Membership Report for that multicast group. While it would be tempting to require all hosts on the network to run IGMPv3 (or MLDv2), this is not possible on the networks targeted for deployment of this solution.</t>
      <t>The next logical step in this direction would be to require multicast snooping switches to use some method to identify the nature of the device connected to each port (switch or host, IGMP/MLD version, etc.). This information would then be used to help control the distribution of Membership Reports.</t>
      <t>However, this document uses a different approach, choosing instead to use General Query messages to ensure membership information is distributed to all multicast snooping switches on the network. This solution is less complicated than methods that focus on Membership Reports, which reduces the likelihood for error. In addition, compatibility between different versions of IGMP and MLD are less of a concern because each protocol's Query messages are compatible with earlier versions of the protocol.</t>
      <t>Multicast snooping switches implementing this design shall use <xref target="RFC3376"/>, <xref target="RFC3810"/>, or both. Multicast routers on the network must also use these protocol versions, <xref target="RFC7761"/>, and satisfy the requirements listed in <xref target="routers"/>. Network hosts may use earlier versions of the protocols.</t>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>This document refers to IGMP snooping and MLD snooping collectively as "multicast snooping".</t>
        <t>TODO: if there are notable differences then mention something like "except where there are notable differences".</t>
        <t>IGMPv3 Membership Report messages and MLDv2 Multicast Listener Report messages are referred to collectively as Reports.</t>
        <t>The terms Any-Source Multicast and Source-Specific Multicast (see <xref target="RFC3569"/>) are respectively abbreviated ASM and SSM.</t>
        <t>TODO: do we want to define "multicast snooping switch"? Should we have an abbreviation?</t>
      </section>
    </section>
    <section anchor="proxy-query-messages">
      <name>Proxy Query Messages</name>
      <t><xref section="2.1.1" sectionFormat="comma" target="RFC4541"/> describes a special-case IGMP Query message with an IPv4 source address of 0.0.0.0. It would appear that the equivalent for MLD would be a Query message with the IPv6 source address set to the unspecified address (::), but several documents prohibit this:</t>
      <ul spacing="normal">
        <li>
          <t><xref section="3" sectionFormat="comma" target="RFC2710"/> requires all MLD messages to be sent with a IPv6 link-local source address</t>
        </li>
        <li>
          <t><xref section="4" sectionFormat="comma" target="RFC3590"/> requires MLD Query messages to be sent with a valid IPv6 link-local source address</t>
        </li>
        <li>
          <t><xref section="5.1.14" sectionFormat="comma" target="RFC3810"/> not only requires MLD Query messages to be sent with a valid IPv6 link-local source address, but also that nodes MUST discard Query messages with an IPv6 source address that is not a valid IPv6 link-local address</t>
        </li>
      </ul>
      <t>Instead of working against established precedent, this document modifies the Query message described in <xref section="5.1" sectionFormat="comma" target="RFC3810"/>, repurposing the reserved bit immediately preceding the S flag as a new P (Proxy Query) flag:</t>
      <artwork><![CDATA[
+-+-+-+-+-+-+-+-+
| Res |P|S| QRV |
+-+-+-+-+-+-+-+-+
]]></artwork>
      <t>If an IPv6 multicast router receives a Query with the P flag set, then it SHALL NOT use that message in the querier election process described in <xref section="7.6.2" sectionFormat="comma" target="RFC3810"/>.</t>
      <t>Note that this document does not reassign the corresponding bit in the IGMP Query message (<xref section="4.1" sectionFormat="comma" target="RFC3376"/>). That message only has four reserved bits, so it seemed better to leave that bit available for future use.</t>
      <t>This document uses the term Proxy Query to refer to an IGMP Query with an IPv4 source address of 0.0.0.0 or an MLD Query with the P flag set.</t>
    </section>
    <section anchor="control-plane-operations">
      <name>Control Plane Operations</name>
      <t>Multicast snooping switches shall maintain a group-based port membership table that indicates which port(s) contain members for each tracked group. The requirements in this section are ultimately related to managing this table, using IGMP/MLD to communicate its contents to adjacent nodes, and making changes in response to IGMP/MLD messages received from adjacent nodes.</t>
      <t>Multicast snooping switches shall maintain a new Group/Port Membership Interval timer for each group and port combination in the group-based port membership table (see <xref target="group-port-membership-interval"/>).</t>
      <t>TODO: describe when the timer is set/reset and what happens when it expires</t>
      <t>Multicast snooping switches shall track a Multicast Router flag for each port. This flag indicates that a multicast router is connected through the associated port.</t>
      <t>Multicast snooping switches shall also track a Proxy Querier flag for each port. This flag indicates that the switch has received a Proxy Query message from this port, likely from another multicast snooping switch.</t>
      <t>If neither the Multicast Router or Proxy Querier flag is set for a port, then it can be inferred that the port is connected either to a host or to a switch that does not implement this design.</t>
      <section anchor="transmitting-periodic-proxy-queries">
        <name>Transmitting Periodic Proxy Queries</name>
        <t>Each multicast snooping switch on the network shall periodically send General Proxy Query messages to all active ports. On startup, or after a port transitions from an inactive state to an active state, [Startup Switch Proxy Query Count] (see <xref target="startup-switch-proxy-query-count"/>) General Proxy Query messages shall be sent with [Startup Switch Proxy Query Interval] (see <xref target="startup-switch-proxy-query-interval"/>) between each message. After this, General Proxy Query messages shall be sent with [Switch Proxy Query Interval] (see <xref target="switch-proxy-query-interval"/>) between each message.</t>
        <t>The QQIC field for each General Proxy Query message shall be set to [Startup Switch Proxy Query Interval] or [Switch Proxy Query Interval], as appropriate (see <xref section="4.1.7" sectionFormat="comma" target="RFC3376"/> or <xref section="5.1.9" sectionFormat="comma" target="RFC3810"/>).</t>
        <t>TODO: Important to send to multicast router ports because multicast router may have IRB (Integrated Routing and Bridging) connected, or be running a PIM-to-IGMP proxy.</t>
      </section>
      <section anchor="receiving-queries">
        <name>Receiving Queries</name>
        <t>Multicast snooping switches shall do the following when a General non-Proxy Query is received:</t>
        <ol spacing="normal" type="1"><li>
            <t>Set the Multicast Router flag for the port</t>
          </li>
          <li>
            <t>Reset the Multicast Router Timeout timer for the port (see <xref target="multicast-router-timeout"/>)</t>
          </li>
          <li>
            <t>Forward the Query to all other active ports</t>
          </li>
        </ol>
        <t>Multicast snooping switches shall do the following when a General Proxy Query is received:</t>
        <ol spacing="normal" type="1"><li>
            <t>Set the Proxy Querier flag for the port</t>
          </li>
          <li>
            <t>Reset the Proxy Querier Timeout timer for the port (see <xref target="proxy-querier-timeout"/>)</t>
          </li>
        </ol>
        <t>Note that Proxy Query messages are not forwarded. Forwarding non-Proxy Queries facilitates querier election and ensures that the network is aware that a multicast router is present. Accordingly, if only Proxy Query messages are received, then it can be inferred that there is no multicast router on the network.</t>
        <t>Multicast snooping switches shall respond to either type of Query by sending a Report to the port the Query was received on. This Report contains all groups in the group-based port membership table except the groups where the port the Query was received on is the only member port.</t>
        <t>TODO: we can add a table that gives an example group-based port membership table and the contents of the resulting report</t>
        <t>TODO: Does it make sense to require General Query messages be forwarded to multicast router ports, while also implying that if only Proxy Queries are received that there is no multicast router?</t>
        <t>TODO: use a term like "Querier Ports" to indicate a port that a Proxy Query is received on. Update: look for Proxy Querier flag</t>
        <t>TODO: need to handle unsolicited Rrports. That needs to be sent to Querier Ports</t>
        <t>TODO: need to handle leave and group-specific queries -- snooping switches will keep track of the ports that have group membership. When it receives a leave then it subtracts the port from membership, but only forwards the leave if there are no other ports with group membership</t>
        <t>TODO: group membership timer expiration is the same as an explicit leave</t>
        <t>TODO: if a switch receives a leave and there is only one port remaining and that port is a querier port, then send a leave to that querier port</t>
      </section>
      <section anchor="receiving-reports">
        <name>Receiving Reports</name>
        <t>TODO</t>
      </section>
      <section anchor="transmitting-reports">
        <name>Transmitting Reports</name>
        <t>TODO</t>
      </section>
      <section anchor="removing-groups-from-the-membership-table">
        <name>Removing Groups from the Membership Table</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="data-plane-operations">
      <name>Data Plane Operations</name>
      <t>Multicast snooping switches shall follow the data forwarding rules outlined in <xref section="2.1.2" sectionFormat="comma" target="RFC4541"/>. In order to optimize traffic distribution on the network, this section contains two refinements to the recommendation to forward traffic to the multicast router port, based on whether the multicast traffic is routable or non-routable.</t>
      <t>To some extent, what constitutes a routable multicast address is subject to the overall design of the network, so multicast snooping switch vendors should allow configuration for how multicast addresses are classified.</t>
      <t>Note that the decision to forward traffic based on group-based port membership tables is independent of the decision to forward traffic to the multicast router port. In other words, traffic may still be forwarded to the multicast router port because it is a group member.</t>
      <section anchor="non-routable-multicast-traffic">
        <name>Non-Routable Multicast Traffic</name>
        <t>Multicast snooping switches shall only forward traffic to the multicast router port if the traffic is known to be routable.</t>
        <t><xref section="3" sectionFormat="comma" target="RFC4541"/> discusses challenges associated with IPv6 addresses overlapping when they are mapped to DMAC addresses. Multicast snooping switches should account for this possibility when implementing this requirement. In the event of an address collision, the recommendation is to forward the traffic and alert the network administrator of the problem.</t>
        <t>TODO: How should this alert work, is there a YANG model we should update?</t>
      </section>
      <section anchor="routers">
        <name>Routable Multicast Traffic</name>
        <t>Multicast snooping switches shall begin in a state where all routable, ASM traffic is sent to the multicast router, which will route it outside of the network. When the traffic reaches the RP, the RP determines if it is interested in the traffic. If the RP is not interested in the traffic, then it will send a PIM prune message back to the multicast router.</t>
        <t>When the multicast router receives the PIM prune message, it shall send a Report message excluding the multicast address back to the multicast snooping switch. Multicast snooping switches shall propagate the exclusion message back toward the source of the multicast stream until it reaches a switch that contains a port that is a member of that multicast group.</t>
        <t>The fact that an exclusion message was received on the multicast router port should be recorded so that the network can be properly updated in the case of future changes to group-based port membership. For example, if a multicast snooping switch stops propagating an exclusion message because it contains at least one port that is a member of the multicast group, then the switch should send an exclude message back towards the source of the multicast stream when the last port is removed from membership in the multicast group.</t>
        <t>TODO: is this a problem? we woule be preventing future refinements where an exclude message could be used to leave the have the port leave group membership</t>
        <t>Note that SSM traffic is handled differently because PIM will send a request to receive the traffic, so the recommendations in this section only apply to ASM traffic.</t>
      </section>
    </section>
    <section anchor="list-of-timers-counters-and-their-default-values">
      <name>List of Timers, Counters and Their Default Values</name>
      <t>TODO: Add a note indicating that these should be consistent with the analagous timers on a single link (like IGMPv3 section 8 or MLDv2 section 9 requires)</t>
      <section anchor="group-port-membership-interval">
        <name>Group/Port Membership Interval</name>
        <t>This interval is analagous to the Group Membership Interval in <xref section="8.4" sectionFormat="comma" target="RFC3376"/> and Multicast Address Listening Interval in <xref section="9.4" sectionFormat="comma" target="RFC3810"/>, except it denotes how long a given group/port combination should remain in the group-based port membership table.</t>
      </section>
      <section anchor="switch-proxy-query-interval">
        <name>Switch Proxy Query Interval</name>
        <t>This interval is analogous to the Query Interval in <xref section="8.2" sectionFormat="comma" target="RFC3376"/> and <xref section="9.2" sectionFormat="comma" target="RFC3810"/>, except it denotes the interval between General Proxy Queries sent by the multicast snooping switch.</t>
      </section>
      <section anchor="startup-switch-proxy-query-interval">
        <name>Startup Switch Proxy Query Interval</name>
        <t>This interval is analogous to the Startup Query Interval in <xref section="8.6" sectionFormat="comma" target="RFC3376"/> and <xref section="9.6" sectionFormat="comma" target="RFC3810"/>, except it denotes the interval between General Proxy Queries sent by the multicast snooping switch at startup.</t>
      </section>
      <section anchor="startup-switch-proxy-query-count">
        <name>Startup Switch Proxy Query Count</name>
        <t>This interval is analogous to the Startup Query Count in <xref section="8.7" sectionFormat="comma" target="RFC3376"/> and <xref section="9.7" sectionFormat="comma" target="RFC3810"/>, except it denotes the number of General Proxy Queries sent on startup, separated by the Startup Switch Proxy Query Interval.</t>
      </section>
      <section anchor="multicast-router-timeout">
        <name>Multicast Router Timeout</name>
        <t>This timeout is somewhat analogous to the Other Querier Present Timeout timer in <xref section="8.5" sectionFormat="comma" target="RFC3376"/> and <xref section="9.5" sectionFormat="comma" target="RFC3810"/>. If the timer expires, then the Multicast Router flag is cleared for the associated port.</t>
      </section>
      <section anchor="proxy-querier-timeout">
        <name>Proxy Querier Timeout</name>
        <t>This timeout is somewhat analogous to the Other Querier Present Timeout timer in <xref section="8.5" sectionFormat="comma" target="RFC3376"/> and <xref section="9.5" sectionFormat="comma" target="RFC3810"/>. If the timer expires, then the Proxy Querier flag is cleared for the associated port.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>To be added.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document does not have any IANA assignments/requests.</t>
    </section>
  </middle>
  <back>
    <displayreference target="RFC3376" to="IGMPv3"/>
    <displayreference target="RFC3569" to="SSM"/>
    <displayreference target="RFC3810" to="MLDv2"/>
    <displayreference target="RFC4541" to="SNOOP"/>
    <displayreference target="RFC7761" to="PIM-SM"/>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC3376" target="https://www.rfc-editor.org/info/rfc3376" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3376.xml">
          <front>
            <title>Internet Group Management Protocol, Version 3</title>
            <author fullname="B. Cain" initials="B." surname="Cain"/>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="I. Kouvelas" initials="I." surname="Kouvelas"/>
            <author fullname="B. Fenner" initials="B." surname="Fenner"/>
            <author fullname="A. Thyagarajan" initials="A." surname="Thyagarajan"/>
            <date month="October" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3376"/>
          <seriesInfo name="DOI" value="10.17487/RFC3376"/>
        </reference>
        <reference anchor="RFC3569" target="https://www.rfc-editor.org/info/rfc3569" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3569.xml">
          <front>
            <title>An Overview of Source-Specific Multicast (SSM)</title>
            <author fullname="S. Bhattacharyya" initials="S." role="editor" surname="Bhattacharyya"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>The purpose of this document is to provide an overview of Source-Specific Multicast (SSM) and issues related to its deployment. It discusses how the SSM service model addresses the challenges faced in inter-domain multicast deployment, changes needed to routing protocols and applications to deploy SSM and interoperability issues with current multicast service models. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3569"/>
          <seriesInfo name="DOI" value="10.17487/RFC3569"/>
        </reference>
        <reference anchor="RFC3810" target="https://www.rfc-editor.org/info/rfc3810" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3810.xml">
          <front>
            <title>Multicast Listener Discovery Version 2 (MLDv2) for IPv6</title>
            <author fullname="R. Vida" initials="R." role="editor" surname="Vida"/>
            <author fullname="L. Costa" initials="L." role="editor" surname="Costa"/>
            <date month="June" year="2004"/>
            <abstract>
              <t>This document updates RFC 2710, and it specifies Version 2 of the ulticast Listener Discovery Protocol (MLDv2). MLD is used by an IPv6 router to discover the presence of multicast listeners on directly attached links, and to discover which multicast addresses are of interest to those neighboring nodes. MLDv2 is designed to be interoperable with MLDv1. MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3810"/>
          <seriesInfo name="DOI" value="10.17487/RFC3810"/>
        </reference>
        <reference anchor="RFC4541" target="https://www.rfc-editor.org/info/rfc4541" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4541.xml">
          <front>
            <title>Considerations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches</title>
            <author fullname="M. Christensen" initials="M." surname="Christensen"/>
            <author fullname="K. Kimball" initials="K." surname="Kimball"/>
            <author fullname="F. Solensky" initials="F." surname="Solensky"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This memo describes the recommendations for Internet Group Management Protocol (IGMP) and Multicast Listener Discovery (MLD) snooping switches. These are based on best current practices for IGMPv2, with further considerations for IGMPv3- and MLDv2-snooping. Additional areas of relevance, such as link layer topology changes and Ethernet-specific encapsulation issues, are also considered. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="4541"/>
          <seriesInfo name="DOI" value="10.17487/RFC4541"/>
        </reference>
        <reference anchor="RFC7761" target="https://www.rfc-editor.org/info/rfc7761" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7761.xml">
          <front>
            <title>Protocol Independent Multicast - Sparse Mode (PIM-SM): Protocol Specification (Revised)</title>
            <author fullname="B. Fenner" initials="B." surname="Fenner"/>
            <author fullname="M. Handley" initials="M." surname="Handley"/>
            <author fullname="H. Holbrook" initials="H." surname="Holbrook"/>
            <author fullname="I. Kouvelas" initials="I." surname="Kouvelas"/>
            <author fullname="R. Parekh" initials="R." surname="Parekh"/>
            <author fullname="Z. Zhang" initials="Z." surname="Zhang"/>
            <author fullname="L. Zheng" initials="L." surname="Zheng"/>
            <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC2710" target="https://www.rfc-editor.org/info/rfc2710" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2710.xml">
          <front>
            <title>Multicast Listener Discovery (MLD) for IPv6</title>
            <author fullname="S. Deering" initials="S." surname="Deering"/>
            <author fullname="W. Fenner" initials="W." surname="Fenner"/>
            <author fullname="B. Haberman" initials="B." surname="Haberman"/>
            <date month="October" year="1999"/>
            <abstract>
              <t>This document specifies the protocol used by an IPv6 router to discover the presence of multicast listeners (that is, nodes wishing to receive multicast packets) on its directly attached links, and to discover specifically which multicast addresses are of interest to those neighboring nodes. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2710"/>
          <seriesInfo name="DOI" value="10.17487/RFC2710"/>
        </reference>
        <reference anchor="RFC3590" target="https://www.rfc-editor.org/info/rfc3590" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3590.xml">
          <front>
            <title>Source Address Selection for the Multicast Listener Discovery (MLD) Protocol</title>
            <author fullname="B. Haberman" initials="B." surname="Haberman"/>
            <date month="September" year="2003"/>
            <abstract>
              <t>It has come to light that there is an issue with the selection of a suitable IPv6 source address for Multicast Listener Discovery (MLD) messages when a node is performing stateless address autoconfiguration. This document is intended to clarify the rules on selecting an IPv6 address to use for MLD messages. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3590"/>
          <seriesInfo name="DOI" value="10.17487/RFC3590"/>
        </reference>
      </references>
    </references>
    <?line 297?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The authors would like to recognize the following individuals for their contributions to this research:</t>
      <ul spacing="normal">
        <li>
          <t>David Vandewalle<br/>
Garmin International</t>
        </li>
        <li>
          <t>Princy Elizabeth<br/>
Juniper Networks</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
ju6vlDn4J1PM1V5zSQAA

-->

</rfc>
