rfc9776xml2.original.xml   rfc9776.xml 
<?xml version="1.0" encoding="US-ASCII"?> <?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rfc SYSTEM "rfc2629.dtd">
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt' ?>
<?rfc toc="yes"?>
<?rfc sortrefs="yes"?>
<?rfc symrefs="yes"?>
<?rfc compact="yes"?>
<?rfc comments="yes"?>
<?rfc inline="yes"?>
<rfc category="std" docName="draft-ietf-pim-3376bis-12" ipr="pre5378trust200902"
updates="2236" obsoletes="3376">
<front>
<title abbrev="IGMPv3 Revision">Internet Group Management Protocol, Version 3
</title>
<author fullname="Brian Haberman" initials="B." surname="Haberman" role="edit <!DOCTYPE rfc [
or"> <!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;">
]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ie
tf-pim-3376bis-12" number="9776" ipr="pre5378trust200902" updates="2236" obsolet
es="3376" submissionType="IETF" consensus="true" xml:lang="en" tocInclude="true"
sortRefs="true" symRefs="true" version="3">
<front>
<!--[rfced] May we update the short title that spans the top of the
PDF file from "IGMPv3 Revision" to "IGMPv3" to match the document
title?
Original:
IGMPv3 Revision
Perhaps:
IGMPv3
-->
<!-- [rfced] IGMP is being published as an Internet Standard. We have marked th
is as STD 100 (new STD), as we do not see any existing STDs related to IGMP. Pl
ease review and let us know if changes are needed. See https://www.rfc-editor.or
g/search/rfc_search_detail.php?sortkey=Number&sorting=DESC&page=All&pubstatus%5B
%5D=Standards%20Track&std_trk=Internet%20Standard
-->
<!-- [rfced] Note that, because draft-ietf-pim-3228bis will be published alongsi
de this document, we have replaced the reference to 3228 with 9778. Please revi
ew and let us know if any corrections are needed.
-->
<!-- [rfced] While we understand the original document was published with much
of the text we are questioning below, the questions are aimed at making the text
as correct as possible. Please let us know if these updates are incorrect or
undesirable.
-->
<title abbrev="IGMPv3 Revision">Internet Group Management Protocol, Version
3</title>
<seriesInfo name="RFC" value="9776"/>
<seriesInfo name="STD" value="100"/>
<author fullname="Brian Haberman" initials="B." surname="Haberman" role="edi
tor">
<organization abbrev="JHU APL">Johns Hopkins University Applied Physics La b</organization> <organization abbrev="JHU APL">Johns Hopkins University Applied Physics La b</organization>
<address> <address>
<email>brian@innovationslab.net</email> <email>brian@innovationslab.net</email>
</address> </address>
</author> </author>
<abstract> <date year="2025" month="March"/>
<t>IGMP is the protocol used by IPv4 systems to
<area>RTG</area>
<workgroup>pim</workgroup>
<!-- [rfced] Please insert any keywords (beyond those that appear in
the title) for use on https://www.rfc-editor.org/search.
-->
<abstract>
<t>The Internet Group Management
Protocol (IGMP) is the protocol used by IPv4 systems to
report their IP multicast group memberships to neighboring multicast report their IP multicast group memberships to neighboring multicast
routers. Version 3 of IGMP adds support for source filtering, that routers. Version 3 of IGMP (IGMPv3) adds support for source filtering, that
is, the ability for a system to report interest in receiving packets is, the ability for a system to report interest in receiving packets
only from specific source addresses, or from all but specific only from specific source addresses, or from all but specific
source addresses, sent to a particular multicast address. That source addresses, sent to a particular multicast address. That
information may be used by multicast routing protocols to avoid information may be used by multicast routing protocols to avoid
delivering multicast packets from specific sources to networks where delivering multicast packets from specific sources to networks where
there are no interested receivers.</t> there are no interested receivers.</t>
<t>This document specifies IGMPv3. It is a revised
<t>This document specifies Version 3 of the Internet Group Management version of RFC 3376 that includes
Protocol, IGMPv3. It is a revised version of the specification to include clarifications and fixes for errata, and it is backward compatible
clarifications and fixes for errata in RFC 3376 and is backwards compatible
with RFC 3376.</t> with RFC 3376.</t>
<t>This document updates RFC 2236 and obsoletes RFC 3376.</t>
<t>This document updates RFC 2236 and obsoletes RFC 3376.</t> </abstract>
</abstract> </front>
</front> <middle>
<section anchor="intro" numbered="true" toc="default">
<middle> <name>Introduction</name>
<section anchor="intro" title="Introduction"> <t>The Internet Group Management Protocol (IGMP) is used by IPv4 systems
<t>The Internet Group Management Protocol (IGMP) is used by IPv4 systems
(hosts and routers) to report their IP multicast group memberships to (hosts and routers) to report their IP multicast group memberships to
any neighboring multicast routers. Note that an IP multicast router any neighboring multicast routers. Note that an IP multicast router
may itself be a member of one or more multicast groups, in which case may itself be a member of one or more multicast groups, in which case
it performs both the multicast router part of the protocol (to it performs both the multicast router part of the protocol (to
collect the membership information needed by its multicast routing collect the membership information needed by its multicast routing
protocol) and the group member part of the protocol (to inform protocol) and the group member part of the protocol (to inform
itself and other, neighboring multicast routers of its memberships).</t> itself and other, neighboring multicast routers of its memberships).</t>
<t>IGMP is also used for other IP multicast management functions, using
<t>IGMP is also used for other IP multicast management functions, using
message types other than those used for group membership reporting. message types other than those used for group membership reporting.
This document specifies only the group membership reporting functions This document specifies only the group membership reporting functions
and messages.</t> and messages.</t>
<t>This document specifies Version 3 of IGMP. Version 1, specified in
<t>This document specifies Version 3 of IGMP. Version 1, specified in <xref target="RFC1112" format="default"/>, was the first widely deployed vers
<xref target="RFC1112" />, was the first widely-deployed version and the firs ion and the first
t
version to become an Internet Standard. Version 2, specified in version to become an Internet Standard. Version 2, specified in
<xref target="RFC2236" />, added support for low leave latency, that is, a <xref target="RFC2236" format="default"/>, added support for low leave latenc y, that is, a
reduction in the time it takes for a multicast router to learn that reduction in the time it takes for a multicast router to learn that
there are no longer any members of a particular group present on an there are no longer any members of a particular group present on an
attached network. Version 3 adds support for source filtering, attached network. Version 3 adds support for source filtering,
that is, the ability for a system to report interest in receiving that is, the ability for a system to report interest in receiving
packets only from specific source addresses, as required to support packets only from specific source addresses, as required to support
Source-Specific Multicast <xref target="RFC3569" />, or from all but specific source Source-Specific Multicast (SSM) <xref target="RFC3569" format="default"/>, or from all but specific source
addresses, sent to a particular multicast address. Version 3 is addresses, sent to a particular multicast address. Version 3 is
designed to be interoperable with Versions 1 and 2.</t> designed to be interoperable with Versions 1 and 2.</t>
<t>This document uses SSM-aware to refer to systems <t>This document uses "SSM-aware" to refer to systems
that support Source-Specific Multicast (SSM) as defined in <xref targe that support SSM as defined in <xref target="RFC4607" format="default"/>.<
t="RFC4607" />.</t> /t>
<t>This document updates <xref target="RFC2236"/> as a proper implementation of Version 3 of IGMP <t>This document updates <xref target="RFC2236" format="default"/> as a pr oper implementation of Version 3 of IGMP
needs to implement Version 2 Report and Leave message handling.</t> needs to implement Version 2 Report and Leave message handling.</t>
<t>This document obsoletes <xref target="RFC3376" format="default"/> as it
<t>This document obsoletes <xref target="RFC3376"/> as it provides clarificat provides clarifications and fixes
ions and fixes for errata in <xref target="RFC3376"/>. Detailed updates for those changes ar
for errata in RFC 3376. Detailed updates for those changes are described in < e described in <xref target="errata-details" format="default"/>.</t>
xref target="errata-details"/>.</t> <section numbered="true" toc="default">
<name>Conventions Used in This Document</name>
<section title="Conventions Used in This Document"> <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bc
"OPTIONAL" in this document are to be interpreted as described in p14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and
BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described
they appear in all in
BCP 14 <xref target="RFC2119" format="default"/> <xref target="RFC8174" forma
t="default"/> when, and only when, they appear in all
capitals, as shown here.</t> capitals, as shown here.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="The Service Interface for Requesting IP Multicast Reception"> <name>The Service Interface for Requesting IP Multicast Reception</name>
<t>Within an IP system, there is (at least conceptually) a service <t>Within an IP system, there is (at least conceptually) a service
interface used by upper-layer protocols or application programs to interface used by upper-layer protocols or application programs to
ask the IP layer to enable and disable reception of packets sent to ask the IP layer to enable and disable reception of packets sent to
specific IP multicast addresses. In order to take full advantage of specific IP multicast addresses. In order to take full advantage of
the capabilities of IGMPv3, a system's IP service interface must the capabilities of IGMPv3, a system's IP service interface must
support the following operation:</t> support the following operation:</t>
<figure> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[
IPMulticastListen ( socket, interface, multicast-address, IPMulticastListen ( socket, interface, multicast-address,
filter-mode, source-list ) filter-mode, source-list )]]></artwork>
]]></artwork>
</figure>
<t>where:
<list style="symbols">
<t>"socket" is an implementation-specific parameter used to <t>where:</t>
<ul spacing="normal">
<li>
<t>"socket" is an implementation-specific parameter used to
distinguish among different requesting entities (e.g., programs or distinguish among different requesting entities (e.g., programs or
processes) within the system; the socket parameter of BSD Unix processes) within the system; the socket parameter of BSD Unix
system calls is a specific example.</t> system calls is a specific example.</t>
</li>
<t>"interface" is a local identifier of the network interface on which <li>
<t>"interface" is a local identifier of the network interface on which
reception of the specified multicast address is to be enabled or reception of the specified multicast address is to be enabled or
disabled. Interfaces may be physical (e.g., an Ethernet interface) disabled. Interfaces may be physical (e.g., an Ethernet interface)
or virtual (e.g., the endpoint of a Frame Relay virtual circuit or or virtual (e.g., the endpoint of a Frame Relay virtual circuit or
the endpoint of an IP-in-IP "tunnel"). An implementation may allow the endpoint of an IP-in-IP "tunnel"). An implementation may allow
a special "unspecified" value to be passed as the interface a special "unspecified" value to be passed as the interface
parameter, in which case the request would apply to the "primary" parameter, in which case the request would apply to the "primary"
or "default" interface of the system (perhaps established by system or "default" interface of the system (perhaps established by system
configuration). If reception of the same multicast address is configuration). If reception of the same multicast address is
desired on more than one interface, IPMulticastListen is invoked desired on more than one interface, IPMulticastListen is invoked
separately for each desired interface.</t> separately for each desired interface.</t>
</li>
<t>"multicast-address" is the IP multicast address, or group, to which <li>
<t>"multicast-address" is the IP multicast address, or group, to which
the request pertains. If reception of more than one multicast the request pertains. If reception of more than one multicast
address on a given interface is desired, IPMulticastListen is address on a given interface is desired, IPMulticastListen is
invoked separately for each desired multicast address.</t> invoked separately for each desired multicast address.</t>
</li>
<t>"filter-mode" may be either INCLUDE or EXCLUDE. In INCLUDE mode, <li>
<t>"filter-mode" may be either INCLUDE or EXCLUDE. In INCLUDE mode,
reception of packets sent to the specified multicast address is reception of packets sent to the specified multicast address is
requested only from those IP source addresses listed in the requested only from those IP source addresses listed in the
source-list parameter. In EXCLUDE mode, reception of packets sent source-list parameter. In EXCLUDE mode, reception of packets sent
to the given multicast address is requested from all IP source to the given multicast address is requested from all IP source
addresses except those listed in the source-list parameter.</t> addresses except those listed in the source-list parameter.</t>
</li>
<t>"source-list" is an unordered list of zero or more IP unicast <li>
<t>"source-list" is an unordered list of zero or more IP unicast
addresses from which multicast reception is desired or not desired, addresses from which multicast reception is desired or not desired,
depending on the filter mode. An implementation MAY impose a limit depending on the filter mode. An implementation <bcp14>MAY</bcp14> impose
on the size of source lists, but that limit MUST NOT be less than a limit
on the size of source lists, but that limit <bcp14>MUST NOT</bcp14> be less
than
64 addresses per list. When an operation causes the source list 64 addresses per list. When an operation causes the source list
size limit to be exceeded, the service interface MUST return an size limit to be exceeded, the service interface <bcp14>MUST</bcp14> return an
error.</t> error.</t>
</list></t> </li>
</ul>
<t>For a given combination of socket, interface, and multicast address, <t>For a given combination of socket, interface, and multicast address,
only a single filter mode and source list can be in effect at any one only a single filter mode and source list can be in effect at any one
time. However, either the filter mode or the source list, or both, time. However, either the filter mode or the source list, or both,
may be changed by subsequent IPMulticastListen requests that specify may be changed by subsequent IPMulticastListen requests that specify
the same socket, interface, and multicast address. Each subsequent the same socket, interface, and multicast address. Each subsequent
request completely replaces any earlier request for the given socket, request completely replaces any earlier request for the given socket,
interface and multicast address.</t> interface, and multicast address.</t>
<t>Previous versions of IGMP did not support source filters and had a <t>Previous versions of IGMP did not support source filters and had a
simpler service interface consisting of Join and Leave operations to simpler service interface consisting of Join and Leave operations to
enable and disable reception of a given multicast address (from all enable and disable reception of a given multicast address (from all
sources) on a given interface. The equivalent operations in the new sources) on a given interface. The equivalent operations in the new
service interface follow:</t> service interface follow:</t>
<t>The Join operation is equivalent to:</t>
<t>The Join operation is equivalent to:</t> <artwork name="" type="" align="left" alt=""><![CDATA[
<figure>
<artwork><![CDATA[
IPMulticastListen ( socket, interface, multicast-address,
EXCLUDE, {} )
]]></artwork>
</figure>
<t>and the Leave operation is equivalent to:</t>
<figure>
<artwork><![CDATA[
IPMulticastListen ( socket, interface, multicast-address, IPMulticastListen ( socket, interface, multicast-address,
INCLUDE, {} ) EXCLUDE, {} )]]></artwork>
]]></artwork>
</figure>
<t>where {} is an empty source list.</t>
<t>An example of an API providing the capabilities outlined in this <t>and the Leave operation is equivalent to:</t>
service interface is in <xref target="RFC3678" />.</t>
</section>
<section title="Multicast Reception State Maintained by Systems"> <artwork name="" type="" align="left" alt=""><![CDATA[
<section title="Socket State"> IPMulticastListen ( socket, interface, multicast-address,
INCLUDE, {} )]]></artwork>
<t>For each socket on which IPMulticastListen has been invoked, the <t>where {} is an empty source list.</t>
<t>An example of an API providing the capabilities outlined in this
service interface is in <xref target="RFC3678" format="default"/>.</t>
</section>
<section numbered="true" toc="default">
<name>Multicast Reception State Maintained by Systems</name>
<section numbered="true" toc="default">
<name>Socket State</name>
<t>For each socket on which IPMulticastListen has been invoked, the
system records the desired multicast reception state for that socket. system records the desired multicast reception state for that socket.
That state conceptually consists of a set of records of the form:</t> That state conceptually consists of a set of records of the form:</t>
<figure> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ (interface, multicast-address, filter-mode, source-list)]]></artwork>
(interface, multicast-address, filter-mode, source-list)
]]></artwork>
</figure>
<t>The socket state evolves in response to each invocation of <t>The socket state evolves in response to each invocation of
IPMulticastListen on the socket, as follows: IPMulticastListen on the socket, as follows:
<list style="symbols"> </t>
<ul spacing="normal">
<t>If the requested filter mode is INCLUDE and the requested source <li>
<t>If the requested filter mode is INCLUDE and the requested source
list is empty, then the entry corresponding to the requested list is empty, then the entry corresponding to the requested
interface and multicast address is deleted if present. If no such interface and multicast address is deleted if present. If no such
entry is present, the request is ignored.</t> entry is present, the request is ignored.</t>
</li>
<t>If the requested filter mode is EXCLUDE or the requested source <li>
<t>If the requested filter mode is EXCLUDE or the requested source
list is non-empty, then the entry corresponding to the requested list is non-empty, then the entry corresponding to the requested
interface and multicast address, if present, is changed to contain interface and multicast address, if present, is changed to contain
the requested filter mode and source list. If no such entry is the requested filter mode and source list. If no such entry is
present, a new entry is created, using the parameters specified in present, a new entry is created, using the parameters specified in
the request.</t> the request.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="Interface State" anchor="if_state"> <section anchor="if_state" numbered="true" toc="default">
<name>Interface State</name>
<t>In addition to the per-socket multicast reception state, a system <t>In addition to the per-socket multicast reception state, a system
must also maintain or compute multicast reception state for each of must also maintain or compute multicast reception state for each of
its interfaces. That state conceptually consists of a set of its interfaces. That state conceptually consists of a set of
records of the form:</t> records of the form:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
(multicast-address, filter-mode, source-list)]]></artwork>
<figure> <t>At most, one record per multicast-address exists for a given
<artwork><![CDATA[
(multicast-address, filter-mode, source-list)
]]></artwork>
</figure>
<t>At most one record per multicast-address exists for a given
interface. This per-interface state is derived from the per-socket interface. This per-interface state is derived from the per-socket
state, but may differ from the per-socket state when different state, but it may differ from the per-socket state when different
sockets have differing filter modes and/or source lists for the sockets have differing filter modes and/or source lists for the
same multicast address and interface. For example, suppose one same multicast address and interface. For example, suppose one
application or process invokes the following operation on socket application or process invokes the following operation on socket
s1:</t> s1:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
IPMulticastListen ( s1, i, m, INCLUDE, {a, b, c} )]]></artwork>
<figure> <t>requesting reception on interface i of packets sent to multicast
<artwork><![CDATA[
IPMulticastListen ( s1, i, m, INCLUDE, {a, b, c} )
]]></artwork>
</figure>
<t>requesting reception on interface i of packets sent to multicast
address m, only if they come from source a, b, or c. Suppose address m, only if they come from source a, b, or c. Suppose
another application or process invokes the following operation on another application or process invokes the following operation on
socket s2:</t> socket s2:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
IPMulticastListen ( s2, i, m, INCLUDE, {b, c, d} )]]></artwork>
<figure> <t>requesting reception on the same interface i of packets sent to the
<artwork><![CDATA[
IPMulticastListen ( s2, i, m, INCLUDE, {b, c, d} )
]]></artwork>
</figure>
<t>requesting reception on the same interface i of packets sent to the
same multicast address m, only if they come from sources b, c, or same multicast address m, only if they come from sources b, c, or
d. In order to satisfy the reception requirements of both sockets, d. In order to satisfy the reception requirements of both sockets,
it is necessary for interface i to receive packets sent to m from it is necessary for interface i to receive packets sent to m from
any one of the sources a, b, c, or d. Thus, in this example, the any one of the sources a, b, c, or d. Thus, in this example, the
reception state of interface i for multicast address m has filter reception state of interface i for multicast address m has filter
mode INCLUDE and source list {a, b, c, d}.</t> mode INCLUDE and source list {a, b, c, d}.</t>
<t>After a multicast packet has been accepted from an interface by the
<t>After a multicast packet has been accepted from an interface by the
IP layer, its subsequent delivery to the application or process IP layer, its subsequent delivery to the application or process
listening on a particular socket depends on the multicast reception listening on a particular socket depends on the multicast reception
state of that socket [and possibly also on other conditions, such state of that socket (and possibly also on other conditions, such
as what transport-layer port the socket is bound to]. So, in the as what transport-layer port the socket is bound to). So, in the
above example, if a packet arrives on interface i, destined to above example, if a packet arrives on interface i, destined to
multicast address m, with source address a, it will be delivered on multicast address m, with source address a, it will be delivered on
socket s1 but not on socket s2. Note that IGMP Queries and Reports socket s1 but not on socket s2. Note that IGMP Queries and Reports
are not subject to source filtering and must always be processed by are not subject to source filtering and must always be processed by
hosts and routers.</t> hosts and routers.</t>
<t>Filtering of packets based upon a socket's multicast reception <t>Filtering of packets based upon a socket's multicast reception
state is a new feature of this service interface. The previous state is a new feature of this service interface. The previous
service interface <xref target="RFC1112" /> described no filtering based up on service interface <xref target="RFC1112" format="default"/> described no fi ltering based upon
multicast join state; rather, a join on a socket simply caused the multicast join state; rather, a join on a socket simply caused the
host to join a group on the given interface, and packets destined host to join a group on the given interface, and packets destined
for that group could be delivered to all sockets whether they had for that group could be delivered to all sockets whether they had
joined or not.</t> joined or not.</t>
<t>The general rules for deriving the per-interface state from the
<t>The general rules for deriving the per-interface state from the
per-socket state are as follows: For each distinct (interface, per-socket state are as follows: For each distinct (interface,
multicast-address) pair that appears in any socket state, a per- multicast-address) pair that appears in any socket state, a per-interface r
interface record is created for that multicast address on that ecord is created for that multicast address on that
interface. Considering all socket records containing the same interface. Considering all socket records containing the same
(interface, multicast-address) pair, (interface, multicast-address) pair,
<list style="symbols"> </t>
<ul spacing="normal">
<t>if any such record has a filter mode of EXCLUDE, then the filter <li>
mode of the interface record is EXCLUDE, and the source list of the <t>if any such record has a filter mode of EXCLUDE, then the
interface record is the intersection of the source lists of all filter mode of the interface record is EXCLUDE, and the source
socket records in EXCLUDE mode, minus those source addresses that list of the interface record is the intersection of the source
appear in any socket record in INCLUDE mode. For example, if the lists of all socket records in EXCLUDE mode, minus those source
socket records for multicast address m on interface i are: addresses that appear in any socket record in INCLUDE mode. For
example, if the socket records for multicast address m on
<list style="hanging"> interface i are:</t>
<t>from socket s1: ( i, m, EXCLUDE, {a, b, c, d} )</t> <ul spacing="normal">
<t>from socket s2: ( i, m, EXCLUDE, {b, c, d, e} )</t> <li>from socket s1: ( i, m, EXCLUDE, {a, b, c, d} )</li>
<t>from socket s3: ( i, m, INCLUDE, {d, e, f} )</t> <li>from socket s2: ( i, m, EXCLUDE, {b, c, d, e} )</li>
</list> <li>from socket s3: ( i, m, INCLUDE, {d, e, f} )</li>
</ul>
then the corresponding interface record on interface i is: <t>then the corresponding interface record on interface i is:</t>
<ul spacing="normal">
<list style="hanging"> <li>( m, EXCLUDE, {b, c} )</li>
<t>( m, EXCLUDE, {b, c} )</t> </ul>
</list> <t>If a fourth socket is added, such as:</t>
<ul spacing="normal">
If a fourth socket is added, such as: <li>from socket s4: ( i, m, EXCLUDE, {} )</li>
</ul>
<list style="hanging"> <t>then the interface record becomes:</t>
<t>from socket s4: ( i, m, EXCLUDE, {} )</t> <ul spacing="normal">
</list> <li>( m, EXCLUDE, {} )</li>
</ul>
then the interface record becomes: </li>
<li>
<list style="hanging"> <t>if all such records have a filter mode of INCLUDE, then the
<t>( m, EXCLUDE, {} )</t> filter mode of the interface record is INCLUDE, and the source
</list></t> list of the interface record is the union of the source lists of
all the socket records. For example, if the socket records for
<t>if all such records have a filter mode of INCLUDE, then the multicast address m on interface i are:</t>
filter mode of the interface record is INCLUDE, and the source list <ul spacing="normal">
of the interface record is the union of the source lists of all the <li>from socket s1: ( i, m, INCLUDE, {a, b, c} )</li>
socket records. For example, if the socket records for multicast <li>from socket s2: ( i, m, INCLUDE, {b, c, d} )</li>
address m on interface i are: <li>from socket s3: ( i, m, INCLUDE, {e, f} )</li>
</ul>
<list style="hanging"> <t> then the corresponding interface record on interface i is:
<t>from socket s1: ( i, m, INCLUDE, {a, b, c} )</t> </t>
<t>from socket s2: ( i, m, INCLUDE, {b, c, d} )</t> <ul spacing="normal">
<t>from socket s3: ( i, m, INCLUDE, {e, f} )</t> <li>( m, INCLUDE, {a, b, c, d, e, f} )</li>
</list> </ul>
<t>An implementation <bcp14>MUST NOT</bcp14> use an EXCLUDE
then the corresponding interface record on interface i is: interface record to represent a group when all sockets for this
group are in INCLUDE state. If system resource limits are reached
<list style="hanging"> when an interface state source list is calculated, an error
<t>( m, INCLUDE, {a, b, c, d, e, f} )</t> <bcp14>MUST</bcp14> be returned to the application that requested
</list> the operation.</t>
</li>
An implementation MUST NOT use an EXCLUDE interface record to </ul>
represent a group when all sockets for this group are in INCLUDE <t>The above rules for deriving the interface state are (re-)evaluated
state. If system resource limits are reached when an interface
state source list is calculated, an error MUST be returned to the
application which requested the operation.</t>
</list></t>
<t>The above rules for deriving the interface state are (re-)evaluated
whenever an IPMulticastListen invocation modifies the socket state by whenever an IPMulticastListen invocation modifies the socket state by
adding, deleting, or modifying a per-socket state record. Note that adding, deleting, or modifying a per-socket state record. Note that
a change of socket state does not necessarily result in a change of a change of socket state does not necessarily result in a change of
interface state.</t> interface state.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<name>Message Formats</name>
<t>IGMP messages are encapsulated in IPv4 datagrams, with an IP protocol
number of 2.
<section title="Message Formats"> <!--[rfced] Is "IP Precedence of Internetwork Control" referring to
"IP Time-to-Live of 1"? If so, could "which is an" be added for
easier readability as shown below?
<t>IGMP messages are encapsulated in IPv4 datagrams, with an IP protocol Original:
number of 2. Every IGMP message described in this document is sent Every IGMP message described in this document is sent with
an IP Time-to-Live of 1, IP Precedence of Internetwork
Control (e.g., Type of Service 0xc0), and carries an
IP Router Alert option [RFC2113] in its IP header.
Perhaps:
Every IGMP message described in this document is sent with an
IP Time-to-Live of 1, which is an IP Precedence of Internetwork
Control (e.g., Type of Service 0xc0), and carries an IP Router
Alert option [RFC2113] in its IP header.
-->
Every IGMP message described in this document is sent
with an IP Time-to-Live of 1, IP Precedence of Internetwork Control with an IP Time-to-Live of 1, IP Precedence of Internetwork Control
(e.g., Type of Service 0xc0), and carries an IP Router Alert option (e.g., Type of Service 0xc0), and carries an IP Router Alert option
<xref target="RFC2113" /> in its IP header. IGMP message types are <xref target="RFC2113" format="default"/> in its IP header. IGMP message typ
registered per <xref target="I-D.ietf-pim-3228bis"/>.</t> es are
registered per <xref target="RFC9778" format="default"/>.</t>
<t>There are two IGMP message types of concern to the IGMPv3 protocol
described in this document:</t>
<t>There are two IGMP message types of concern to the IGMPv3 protocol <table anchor="v3-msgs" align="center">
described in this document:</t> <name>New Messages Introduced by IGMPv3</name>
<thead>
<tr>
<th align="left">Type Number (hex)</th>
<th align="left">Message Name</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">0x11</td>
<td align="left">Membership Query</td>
</tr>
<!-- [rfced] We see the following discrepancies with the IGMP Type Numbers regis
try <https://www.iana.org/assignments/igmp-type-numbers>. Please review and let
us know if we may update the names to match what appears in the IANA registry.
In addition, please consider whether uses of "version X" should be updated for
consistency as well.
<texttable anchor="v3-msgs" title="New messages introduced by IGMP3"> From the IANA registry:
<ttcol align="center">Type Number (hex)</ttcol> 0x22 IGMPv3 Membership Report
<ttcol align="center">Message Name</ttcol> Type 0x22 - IGMPv3 Membership Report
<c>0x11</c><c>Membership Query</c>
<c>0x22</c><c>Version 3 Membership Report</c>
</texttable>
<t>An implementation of IGMPv3 MUST also support the following three Table 1:
message types, for interoperation with previous versions of IGMP (see 0x22 Version 3 Membership Report
<xref target="interop" />):</t>
<texttable anchor="legacy-msgs" title="Legacy IGMP messages"> From the IANA registry:
<ttcol align="center">Type Number (hex)</ttcol> 0x12 IGMPv1 Membership Report
<ttcol align="center">Message Name</ttcol> 0x16 IGMPv2 Membership Report
<ttcol align="center">Reference</ttcol> 0x17 IGMPv2 Leave Group
<c>0x12</c><c>Version 1 Membership Report</c><c><xref target="RFC1112"
/></c>
<c>0x16</c><c>Version 2 Membership Report</c><c><xref target="RFC2236"
/></c>
<c>0x17</c><c>Version 2 Leave Group</c><c><xref target="RFC2236" /></c
>
</texttable>
<t>Unrecognized message types MUST be silently ignored. Other message Table 2:
0x12 Version 1 Membership Report
0x16 Version 2 Membership Report
0x17 Version 2 Leave Group
-->
<tr>
<td align="left">0x22</td>
<td align="left">Version 3 Membership Report</td>
</tr>
</tbody>
</table>
<t>An implementation of IGMPv3 <bcp14>MUST</bcp14> also support the follow
ing three
message types, for interoperation with previous versions of IGMP (see
<xref target="interop" format="default"/>):</t>
<table anchor="legacy-msgs" align="center">
<name>Legacy IGMP Messages</name>
<thead>
<tr>
<th align="left">Type Number (hex)</th>
<th align="left">Message Name</th>
<th align="left">Reference</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">0x12</td>
<td align="left">Version 1 Membership Report</td>
<td align="left">
<xref target="RFC1112" format="default"/></td>
</tr>
<tr>
<td align="left">0x16</td>
<td align="left">Version 2 Membership Report</td>
<td align="left">
<xref target="RFC2236" format="default"/></td>
</tr>
<tr>
<td align="left">0x17</td>
<td align="left">Version 2 Leave Group</td>
<td align="left">
<xref target="RFC2236" format="default"/></td>
</tr>
</tbody>
</table>
<t>Unrecognized message types <bcp14>MUST</bcp14> be silently ignored. Ot
her message
types may be used by newer versions or extensions of IGMP, by types may be used by newer versions or extensions of IGMP, by
multicast routing protocols, or for other uses.</t> multicast routing protocols, or for other uses.</t>
<t>In this document, unless otherwise qualified, the capitalized words
<t>In this document, unless otherwise qualified, the capitalized words
"Query" and "Report" refer to IGMP Membership Queries and IGMP "Query" and "Report" refer to IGMP Membership Queries and IGMP
Version 3 Membership Reports, respectively.</t> Version 3 Membership Reports, respectively.</t>
<section numbered="true" toc="default">
<section title="Membership Query Message"> <name>Membership Query Message</name>
<t>Membership Queries are sent by IP multicast routers to query the
<t>Membership Queries are sent by IP multicast routers to query the
multicast reception state of neighboring interfaces. Queries have multicast reception state of neighboring interfaces. Queries have
the following format:</t> the following format:</t>
<figure anchor="v3-qry">
<figure anchor="v3-qry" title="IGMPv3 Query Message"> <name>IGMPv3 Query Message</name>
<artwork><![CDATA[ <artwork name="" type="" align="left" alt=""><![CDATA[
0 1 2 3 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 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x11 | Max Resp Code | Checksum | | Type = 0x11 | Max Resp Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address | | Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags |S| QRV | QQIC | Number of Sources (N) | | Flags |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] | | Source Address [1] |
+- -+ +- -+
| Source Address [2] | | Source Address [2] |
+- . -+ +- . -+
. . . . . .
. . . . . .
+- -+ +- -+
| Source Address [N] | | Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwor
]]></artwork> k>
</figure> </figure>
<section anchor="max_resp_code" numbered="true" toc="default">
<section title="Max Resp Code" anchor="max_resp_code"> <name>Max Resp Code</name>
<t>The Max Resp Code field specifies the maximum time allowed before
<t>The Max Resp Code field specifies the maximum time allowed before sending a responding report. The actual time allowed, called the
sending a responding report. The actual time allowed, called the Max "Max Resp Time", is represented in units of 1/10 second and is derived
Resp Time, is represented in units of 1/10 second and is derived from from the Max Resp Code as follows:</t>
the Max Resp Code as follows:</t> <ul spacing="normal">
<li>If Max Resp Code &lt; 128, Max Resp Time = Max Resp Code</li>
<t>If Max Resp Code &lt; 128, Max Resp Time = Max Resp Code</t> <li><t>If Max Resp Code &gt;= 128, Max Resp Code represents a
floating-point value as follows:</t>
<t>If Max Resp Code >= 128, Max Resp Code represents a floating-point
value as follows:</t>
<figure anchor="max-resp" title="Max Resp Code Representation"> <figure anchor="max-resp">
<artwork><![CDATA[ <name>Max Resp Code Representation</name>
<artwork name="" type="" align="left" alt=""><![CDATA[
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|1| exp | mant | |1| exp | mant |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
Max Resp Time = (mant | 0x10) << (exp + 3) Max Resp Time = (mant | 0x10) << (exp + 3)]]></artwork>
]]></artwork> </figure>
</figure> </li>
</ul>
<t>Small values of Max Resp Time allow IGMPv3 routers to tune the "leave <t>Small values of Max Resp Time allow IGMPv3 routers to tune the "lea
ve
latency" (the time between the moment the last host leaves a group latency" (the time between the moment the last host leaves a group
and the moment the routing protocol is notified that there are no and the moment the routing protocol is notified that there are no
more members). Larger values, especially in the exponential range, more members). Larger values, especially in the exponential range,
allow tuning of the burstiness of IGMP traffic on a network.</t> allow tuning of the burstiness of IGMP traffic on a network.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Checksum"> <name>Checksum</name>
<t>The Checksum field is the 16-bit one's complement of the one's comp
<t>The Checksum is the 16-bit one's complement of the one's complement lement
sum of the whole IGMP message (the entire IP payload). For computing sum of the whole IGMP message (the entire IP payload). For computing
the checksum, the Checksum field is set to zero. When receiving the checksum, the Checksum field is set to zero. When receiving
packets, the checksum MUST be verified before processing a packet packets, the checksum <bcp14>MUST</bcp14> be verified before processing a pac
<xref target="RFC1071" />.</t> ket
</section> <xref target="RFC1071" format="default"/>.</t>
</section>
<section numbered="true" toc="default">
<name>Group Address</name>
<section title="Group Address"> <!--[rfced] Is "Section 4.1.9" the correct section reference in the
sentence below, or is "Section 4.1.11", which explains the Query
message variants, perhaps intended? Please review.
<t>The Group Address field is set to zero when sending a General Query, Original:
The Group Address field is set to zero when sending a General Query,
and set to the IP multicast address being queried when sending a and set to the IP multicast address being queried when sending a
Group-Specific Query or Group-and-Source-Specific Query (see Group-Specific Query or Group-and-Source-Specific Query (see
<xref target="src_addr_field" />, below).</t> Section 4.1.9, below).
</section> -->
<section title="Flags">
<t>The Flags field is a bitstring managed by an IANA registry defined in
<xref target="I-D.ietf-pim-3228bis"/>.</t>
</section>
<section title="S Flag (Suppress Router-Side Processing)"> <t>The Group Address field is set to zero when sending a General Query
and set to the IP multicast address being queried when sending a
Group-Specific Query or Group-and-Source-Specific Query (see
<xref target="src_addr_field" format="default"/>, below).</t>
</section>
<section numbered="true" toc="default">
<name>Flags</name>
<t>The Flags field is a bitstring managed by the "IGMP Type Numbers" r
egistry defined in
<xref target="RFC9778" format="default"/>.</t>
</section>
<section numbered="true" toc="default">
<t>When set to one, the S Flag indicates to any receiving multicast <name>S Flag (Suppress Router-Side Processing)</name>
<t>When set to one, the S flag indicates to any receiving multicast
routers that they are to suppress the normal timer updates they routers that they are to suppress the normal timer updates they
perform upon hearing a Query. It does not, however, suppress the perform upon hearing a Query. It does not, however, suppress the
querier election or the normal "host-side" processing of a Query that querier election or the normal "host-side" processing of a Query that
a router may be required to perform as a consequence of itself being a router may be required to perform as a consequence of itself being
a group member.</t> a group member.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="QRV (Querier's Robustness Variable)"> <name>QRV (Querier's Robustness Variable)</name>
<t>If non-zero, the QRV field contains the [Robustness Variable] value
<t>If non-zero, the QRV field contains the [Robustness Variable] value
used by the querier, i.e., the sender of the Query. If the querier's used by the querier, i.e., the sender of the Query. If the querier's
[Robustness Variable] exceeds 7, the maximum value of the QRV field, [Robustness Variable] exceeds 7, the maximum value of the QRV field,
the QRV is set to zero. Routers adopt the QRV value from the most the QRV is set to zero. Routers adopt the QRV value from the most
recently received Query as their own [Robustness Variable] value, recently received Query as their own [Robustness Variable] value,
unless that most recently received QRV was zero, in which case the unless that most recently received QRV was zero, in which case the
receivers use the default [Robustness Variable] value specified in receivers use the default [Robustness Variable] value specified in
<xref target="robust" /> or a statically configured value.</t> <xref target="robust" format="default"/> or a statically configured value.</t
</section> >
</section>
<section title="QQIC (Querier's Query Interval Code)"> <section numbered="true" toc="default">
<name>QQIC (Querier's Query Interval Code)</name>
<t>The Querier's Query Interval Code field specifies the [Query <t>The QQIC field specifies the [Query
Interval] used by the querier. The actual interval, called the Interval] used by the querier. The actual interval, called the
Querier's Query Interval (QQI), is represented in units of seconds "Querier's Query Interval (QQI)", is represented in units of seconds
and is derived from the Querier's Query Interval Code as follows:</t> and is derived from the QQIC as follows:</t>
<ul spacing="normal">
<t>If QQIC &lt; 128, QQI = QQIC</t> <li>If QQIC &lt; 128, QQI = QQIC</li>
<li><t>If QQIC &gt;= 128, QQIC represents a floating-point value as
<t>If QQIC >= 128, QQIC represents a floating-point value as follows:</t> follows:</t>
<figure anchor="QQIC">
<figure anchor="QQIC" title="QQIC Representation"> <name>QQIC Representation</name>
<artwork><![CDATA[ <artwork name="" type="" align="left" alt=""><![CDATA[
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|1| exp | mant | |1| exp | mant |
+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
QQI = (mant | 0x10) << (exp + 3) QQI = (mant | 0x10) << (exp + 3)]]></artwork>
]]></artwork> </figure>
</figure> </li>
</ul>
<t>Multicast routers that are not the current querier adopt the QQI <t>Multicast routers that are not the current querier adopt the QQI
value from the most recently received Query as their own [Query value from the most recently received Query as their own [Query
Interval] value, unless that most recently received QQI was zero, in Interval] value, unless that most recently received QQI was zero, in
which case the receiving routers use the default [Query Interval] which case the receiving routers use the default [Query Interval]
value specified in <xref target="qry_int" />.</t> value specified in <xref target="qry_int" format="default"/>.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Number of Sources (N)"> <name>Number of Sources (N)</name>
<t>The Number of Sources (N) field specifies how many source addresses
<t>The Number of Sources (N) field specifies how many source addresses
are present in the Query. This number is zero in a General Query or are present in the Query. This number is zero in a General Query or
a Group-Specific Query, and non-zero in a Group-and-Source-Specific a Group-Specific Query and non-zero in a Group-and-Source-Specific
Query. This number is limited by the MTU of the network over which Query. This number is limited by the MTU of the network over which
the Query is transmitted. For example, on an Ethernet with an MTU of the Query is transmitted. For example, on an Ethernet with an MTU of
1500 octets, the IP header including the Router Alert option consumes 1500 octets, the IP header including the Router Alert option consumes
24 octets, and the IGMP fields up to including the Number of Sources 24 octets, and the IGMP fields up to and including the Number of Sources
(N) field consume 12 octets, leaving 1464 octets for source (N) field consume 12 octets, leaving 1464 octets for source
addresses, which limits the number of source addresses to 366 addresses, which limits the number of source addresses to 366 (1464/4).</t>
(1464/4).</t> </section>
</section> <section anchor="src_addr_field" numbered="true" toc="default">
<name>Source Address [i]</name>
<section title="Source Address [i]" anchor="src_addr_field"> <t>The Source Address [i] fields are a vector of n IP unicast addresse
s,
<t>The Source Address [i] fields are a vector of n IP unicast addresses,
where n is the value in the Number of Sources (N) field.</t> where n is the value in the Number of Sources (N) field.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Additional Data"> <name>Additional Data</name>
<t>If the Packet Length field in the IP header of a received Query
<t>If the Packet Length field in the IP header of a received Query
indicates that there are additional octets of data present, beyond indicates that there are additional octets of data present, beyond
the fields described here, IGMPv3 implementations MUST include those the fields described here, IGMPv3 implementations <bcp14>MUST</bcp14> include
octets in the computation to verify the received IGMP Checksum, but those
MUST otherwise ignore those additional octets. When sending a Query, octets in the computation to verify the received IGMP Checksum but
an IGMPv3 implementation MUST NOT include additional octets beyond <bcp14>MUST</bcp14> otherwise ignore those additional octets. When sending a
Query,
an IGMPv3 implementation <bcp14>MUST NOT</bcp14> include additional octets be
yond
the fields described here.</t> the fields described here.</t>
</section> </section>
<section anchor="qry_vars" numbered="true" toc="default">
<section title="Query Variants" anchor="qry_vars"> <name>Query Variants</name>
<t>There are three variants of the Query message:
<t>There are three variants of the Query message:
<list style="numbers">
<t>A General Query is sent by a multicast router to learn the </t>
<ol spacing="normal" type="1"><li>
<t>A General Query is sent by a multicast router to learn the
complete multicast reception state of the neighboring interfaces complete multicast reception state of the neighboring interfaces
(that is, the interfaces attached to the network on which the (that is, the interfaces attached to the network on which the
Query is transmitted). In a General Query, both the Group Address Query is transmitted). In a General Query, both the Group Address
field and the Number of Sources (N) field are zero.</t> field and the Number of Sources (N) field are zero.</t>
</li>
<t>A Group-Specific Query is sent by a multicast router to learn <li>
<t>A Group-Specific Query is sent by a multicast router to learn
the reception state, with respect to a single multicast address, the reception state, with respect to a single multicast address,
of the neighboring interfaces. In a Group-Specific Query, the of the neighboring interfaces. In a Group-Specific Query, the
Group Address field contains the multicast address of interest, Group Address field contains the multicast address of interest,
and the Number of Sources (N) field contains zero.</t> and the Number of Sources (N) field contains zero.</t>
</li>
<t>A Group-and-Source-Specific Query is sent by a multicast router <li>
<t>A Group-and-Source-Specific Query is sent by a multicast router
to learn if any neighboring interface desires reception of packets to learn if any neighboring interface desires reception of packets
sent to a specified multicast address, from any of a specified sent to a specified multicast address, from any of a specified
list of sources. In a Group-and-Source-Specific Query, the Group list of sources. In a Group-and-Source-Specific Query, the Group
Address field contains the multicast address of interest, and the Address field contains the multicast address of interest, and the
Source Address [i] fields contain the source address(es) of Source Address [i] fields contain the source address(es) of
interest.</t> interest.</t>
</list></t> </li>
</section> </ol>
</section>
<section title="IP Destination Addresses for Queries"> <section numbered="true" toc="default">
<name>IP Destination Addresses for Queries</name>
<t>In IGMPv3, General Queries are sent with an IP destination address of <t>In IGMPv3, General Queries are sent with an IP destination address
of
224.0.0.1, the all-systems multicast address. Group-Specific and 224.0.0.1, the all-systems multicast address. Group-Specific and
Group-and-Source-Specific Queries are sent with an IP destination Group-and-Source-Specific Queries are sent with an IP destination
address equal to the multicast address of interest. However, a address equal to the multicast address of interest. However, a
system MUST accept and process any Query whose IP Destination system <bcp14>MUST</bcp14> accept and process any Query whose IP Destination
Address field contains any of the addresses (unicast or multicast) Address field contains any of the addresses (unicast or multicast)
assigned to the interface on which the Query arrives.</t> assigned to the interface on which the Query arrives.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Version 3 Membership Report Message"> <name>Version 3 Membership Report Message</name>
<t>Version 3 Membership Reports are sent by IP systems to report (to
<t>Version 3 Membership Reports are sent by IP systems to report (to
neighboring routers) the current multicast reception state, or neighboring routers) the current multicast reception state, or
changes in the multicast reception state, of their interfaces. changes in the multicast reception state, of their interfaces.
Reports have the following format:</t> Reports have the following format:</t>
<figure anchor="v3-rpt">
<figure anchor="v3-rpt" title="IGMPv3 Report Message"> <name>IGMPv3 Report Message</name>
<artwork><![CDATA[ <artwork name="" type="" align="left" alt=""><![CDATA[
0 1 2 3 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 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 0x22 | Reserved | Checksum | | Type = 0x22 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags | Number of Group Records (M) | | Flags | Number of Group Records (M) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Group Record [1] . . Group Record [1] .
skipping to change at line 630 skipping to change at line 699
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . | | . |
. . . . . .
| . | | . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Group Record [M] . . Group Record [M] .
. . . .
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwor
]]></artwork> k>
</figure> </figure>
<t>where each Group Record has the following internal format:</t>
<t>where each Group Record has the following internal format:</t> <figure anchor="v3-grp">
<name>IGMPv3 Report Group Record</name>
<figure anchor="v3-grp" title="IGMPv3 Report Group Record"> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Record Type | Aux Data Len | Number of Sources (N) | | Record Type | Aux Data Len | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Multicast Address | | Multicast Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] | | Source Address [1] |
+- -+ +- -+
| Source Address [2] | | Source Address [2] |
+- -+ +- -+
. . . . . .
. . . . . .
. . . . . .
+- -+ +- -+
| Source Address [N] | | Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Auxiliary Data . . Auxiliary Data .
. . . .
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwor
]]></artwork> k>
</figure> </figure>
<section numbered="true" toc="default">
<section title="Reserved"> <name>Reserved</name>
<t>The Reserved field is set to zero on transmission and ignored on
<t>The Reserved field is set to zero on transmission, and ignored on
reception.</t> reception.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Checksum"> <name>Checksum</name>
<t>The Checksum field is the 16-bit one's complement of the one's comp
<t>The Checksum is the 16-bit one's complement of the one's complement lement
sum of the whole IGMP message (the entire IP payload). For computing sum of the whole IGMP message (the entire IP payload). For computing
the checksum, the Checksum field is set to zero. When receiving the checksum, the Checksum field is set to zero. When receiving
packets, the checksum MUST be verified before processing a message.</t packets, the checksum <bcp14>MUST</bcp14> be verified before processin
> g a message.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Flags"> <name>Flags</name>
<t>The Flags field is a bitstring managed by an IANA registry defined in <t>The Flags field is a bitstring managed by the "IGMP Type Numbers" r
<xref target="I-D.ietf-pim-3228bis"/>.</t> egistry defined in
</section> <xref target="RFC9778" format="default"/>.</t>
</section>
<section title="Number of Group Records (M)"> <section numbered="true" toc="default">
<name>Number of Group Records (M)</name>
<t>The Number of Group Records (M) field specifies how many Group <t>The Number of Group Records (M) field specifies how many Group
Records are present in this Report.</t> Records are present in this Report.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Group Record"> <name>Group Record</name>
<t>Each Group Record is a block of fields containing information
<t>Each Group Record is a block of fields containing information
pertaining to the sender's membership in a single multicast group on pertaining to the sender's membership in a single multicast group on
the interface from which the Report is sent.</t> the interface from which the Report is sent.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Record Type"> <name>Record Type</name>
<t>See <xref target="grp_rec_types" format="default"/>, below.</t>
<t>See <xref target="grp_rec_types" />, below.</t> </section>
</section> <section numbered="true" toc="default">
<name>Aux Data Len</name>
<section title="Aux Data Len"> <t>The Aux Data Len field contains the length of the Auxiliary Data
<t>The Aux Data Len field contains the length of the Auxiliary Data
field in this Group Record, in units of 32-bit words. It may contain field in this Group Record, in units of 32-bit words. It may contain
zero, to indicate the absence of any auxiliary data.</t> zero, to indicate the absence of any auxiliary data.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Number of Sources (N)"> <name>Number of Sources (N)</name>
<t>The Number of Sources (N) field specifies how many source addresses
<t>The Number of Sources (N) field specifies how many source addresses
are present in this Group Record.</t> are present in this Group Record.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Address"> <name>Multicast Address</name>
<t>The Multicast Address field contains the IP multicast address to
<t>The Multicast Address field contains the IP multicast address to
which this Group Record pertains.</t> which this Group Record pertains.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Source Address [i]"> <name>Source Address [i]</name>
<t>The Source Address [i] fields are a vector of n IP unicast addresse
<t>The Source Address [i] fields are a vector of n IP unicast addresses, s,
where n is the value in this record's Number of Sources (N) field.</t> where n is the value in this record's Number of Sources (N) field.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Auxiliary Data"> <name>Auxiliary Data</name>
<t>The Auxiliary Data field, if present, contains additional informati
<t>The Auxiliary Data field, if present, contains additional information on
pertaining to this Group Record. The protocol specified in this pertaining to this Group Record. The protocol specified in this
document, IGMPv3, does not define any auxiliary data. Therefore, document, IGMPv3, does not define any auxiliary data. Therefore,
implementations of IGMPv3 MUST NOT include any auxiliary data (i.e., implementations of IGMPv3 <bcp14>MUST NOT</bcp14> include any auxiliary data
MUST set the Aux Data Len field to zero) in any transmitted Group (i.e.,
Record, and MUST ignore any auxiliary data present in any received <bcp14>MUST</bcp14> set the Aux Data Len field to zero) in any transmitted Gr
oup
Record and <bcp14>MUST</bcp14> ignore any auxiliary data present in any recei
ved
Group Record. The semantics and internal encoding of the Auxiliary Group Record. The semantics and internal encoding of the Auxiliary
Data field are to be defined by any future version or extension of Data field are to be defined by any future version or extension of
IGMP that uses this field.</t> IGMP that uses this field.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Additional Data"> <name>Additional Data</name>
<t>If the Packet Length field in the IP header of a received Report
<t>If the Packet Length field in the IP header of a received Report
indicates that there are additional octets of data present, beyond indicates that there are additional octets of data present, beyond
the last Group Record, IGMPv3 implementations MUST include those the last Group Record, IGMPv3 implementations <bcp14>MUST</bcp14> include tho
octets in the computation to verify the received IGMP Checksum, but se
MUST otherwise ignore those additional octets. When sending a octets in the computation to verify the received IGMP Checksum but
Report, an IGMPv3 implementation MUST NOT include additional octets <bcp14>MUST</bcp14> otherwise ignore those additional octets. When sending a
Report, an IGMPv3 implementation <bcp14>MUST NOT</bcp14> include additional o
ctets
beyond the last Group Record.</t> beyond the last Group Record.</t>
</section> </section>
<section anchor="grp_rec_types" numbered="true" toc="default">
<section title="Group Record Types" anchor="grp_rec_types"> <name>Group Record Types</name>
<t>There are a number of different types of Group Records that may be
<t>There are a number of different types of Group Records that may be
included in a Report message: included in a Report message:
<list style="symbols"> </t>
<ul spacing="normal">
<t>A Current-State Record is sent by a system in response to a Query <li>
received on an interface. It reports the current reception state <t>A Current-State Record is sent by a system in response to a
of that interface, with respect to a single multicast address. The Query received on an interface. It reports the current
Record Type of a Current-State Record may be one of the following reception state of that interface, with respect to a single
two values: multicast address. The Record Type of a Current-State Record
<list style="format %d - " counter="my_cnt"> may be one of the following two values:</t>
<t>MODE_IS_INCLUDE - indicates that the interface has a <ol group="my_cnt" spacing="normal" type="1">
filter mode of INCLUDE for the specified multicast <li>
address. The Source Address [i] fields in this Group <t>MODE_IS_INCLUDE - indicates that the interface has a
Record contain the interface's source list for the filter mode of INCLUDE for the specified multicast address.
specified multicast address, if it is non-empty.</t> The Source Address [i] fields in this Group Record contain
<t>MODE_IS_EXCLUDE - indicates that the interface has a the interface's source list for the specified multicast
filter mode of EXCLUDE for the specified multicast address, if it is non-empty.</t>
address. The Source Address [i] fields in this Group </li>
Record contain the interface's source list for the <li>
specified multicast address, if it is non-empty. An <t>MODE_IS_EXCLUDE - indicates that the interface has a
SSM-aware host SHOULD NOT send a MODE_IS_EXCLUDE record type filter mode of EXCLUDE for the specified multicast
for multicast addresses that fall within the SSM address range as address. The Source Address [i] fields in this Group Record
they will be ignored by SSM-aware routers <xref target="RFC4604"/>.</t contain the interface's source list for the specified
> multicast address, if it is non-empty. An SSM-aware host
</list></t> <bcp14>SHOULD NOT</bcp14> send a MODE_IS_EXCLUDE record type
for multicast addresses that fall within the SSM address
<t>A Filter-Mode-Change Record is sent by a system whenever a local range as they will be ignored by SSM-aware routers <xref
invocation of IPMulticastListen causes a change of the filter mode target="RFC4604" format="default"/>.</t>
(i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to </li>
INCLUDE), of the interface-level state entry for a particular </ol>
multicast address. The Record is included in a Report sent from </li>
the interface on which the change occurred. The Record Type of a <li>
Filter-Mode-Change Record may be one of the following two values: <t>A Filter-Mode-Change Record is sent by a system whenever a
<list style="format %d - " counter="my_cnt"> local invocation of IPMulticastListen causes a change of the
<t>CHANGE_TO_INCLUDE_MODE - indicates that the interface filter mode (i.e., a change from INCLUDE to EXCLUDE, or from
has changed to INCLUDE filter mode for the specified EXCLUDE to INCLUDE) of the interface-level state entry for a
multicast address. The Source Address [i] fields particular multicast address. The Record is included in a
in this Group Record contain the interface's new Report sent from the interface on which the change occurred.
source list for the specified multicast address, The Record Type of a Filter-Mode-Change Record may be one of the
if it is non-empty.</t> following two values:
<t>CHANGE_TO_EXCLUDE_MODE - indicates that the interface </t>
has changed to EXCLUDE filter mode for the specified <ol group="my_cnt" spacing="normal" type="1"><li>
multicast address. The Source Address [i] fields <t>CHANGE_TO_INCLUDE_MODE - indicates that the interface has
in this Group Record contain the interface's new changed to INCLUDE filter mode for the specified multicast
source list for the specified multicast address, address. The Source Address [i] fields in this Group Record
if it is non-empty. An SSM-aware host SHOULD NOT send a contain the interface's new source list for the specified
CHANGE_TO_EXCLUDE_MODE record type for multicast addresses multicast address, if it is non-empty.</t>
that fall within the SSM address range.</t> </li>
</list></t> <li>
<t>CHANGE_TO_EXCLUDE_MODE - indicates that the interface has
<t>A Source-List-Change Record is sent by a system whenever a local changed to EXCLUDE filter mode for the specified multicast
invocation of IPMulticastListen causes a change of source list that address. The Source Address [i] fields in this Group Record
is not coincident with a change of filter mode, of the contain the interface's new source list for the specified
interface-level state entry for a particular multicast address. multicast address, if it is non-empty. An SSM-aware host
The Record is included in a Report sent from the interface on which <bcp14>SHOULD NOT</bcp14> send a CHANGE_TO_EXCLUDE_MODE
the change occurred. The Record Type of a Source-List-Change record type for multicast addresses that fall within the SSM
Record may be one of the following two values: address range.</t>
<list style="format %d - " counter="my_cnt"> </li>
<t>ALLOW_NEW_SOURCES - indicates that the Source Address </ol>
[i] fields in this Group Record contain a list of the </li>
additional sources that the system wishes to <li>
hear from, for packets sent to the specified <t>A Source-List-Change Record is sent by a system whenever a
multicast address. If the change was to an INCLUDE local invocation of IPMulticastListen causes a change of the sourc
source list, these are the addresses that were added e
to the list; if the change was to an EXCLUDE source list that is not coincident with a change of the filter mode, of t
list, these are the addresses that were deleted from he
the list.</t> interface-level state entry for a particular multicast address.
<t>BLOCK_OLD_SOURCES - indicates that the Source Address The Record is included in a Report sent from the interface on
[i] fields in this Group Record contain a list of the which the change occurred. The Record Type of a
sources that the system no longer wishes to Source-List-Change Record may be one of the following two
hear from, for packets sent to the specified values:
multicast address. If the change was to an INCLUDE </t>
source list, these are the addresses that were <ol group="my_cnt" spacing="normal" type="1">
deleted from the list; if the change was to an <li>
EXCLUDE source list, these are the addresses that <t>ALLOW_NEW_SOURCES - indicates that the Source Address [i]
were added to the list.</t> fields in this Group Record contain a list of the additional
</list></t> sources that the system wishes to hear from, for packets
</list></t> sent to the specified multicast address. If the change was
to an INCLUDE source list, these are the addresses that were
<t>If a change of source list results in both allowing new sources and added to the list; if the change was to an EXCLUDE source
blocking old sources, then two Group Records are sent for the same list, these are the addresses that were deleted from the
multicast address, one of type ALLOW_NEW_SOURCES and one of type list.</t>
BLOCK_OLD_SOURCES.</t> </li>
<li>
<t>We use the term State-Change Record to refer to either a Filter- <t>BLOCK_OLD_SOURCES - indicates that the Source Address [i]
fields in this Group Record contain a list of the sources
that the system no longer wishes to hear from, for packets
sent to the specified multicast address. If the change was
to an INCLUDE source list, these are the addresses that were
deleted from the list; if the change was to an EXCLUDE
source list, these are the addresses that were added to the
list.</t>
</li>
</ol>
</li>
</ul>
<t>If a change of source list results in both allowing new sources
and blocking old sources, then two Group Records are sent for the
same multicast address, one of type ALLOW_NEW_SOURCES and one of
type BLOCK_OLD_SOURCES.</t>
<t>We use the term "State-Change Record" to refer to either a Filter-
Mode-Change Record or a Source-List-Change Record.</t> Mode-Change Record or a Source-List-Change Record.</t>
<t>Unrecognized Record Type values <bcp14>MUST</bcp14> be silently ign
<t>Unrecognized Record Type values MUST be silently ignored.</t> ored.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="IP Source Addresses for Reports"> <name>IP Source Addresses for Reports</name>
<t>An IGMP report is sent with a valid unicast IPv4 source address for
<t>An IGMP report is sent with a valid unicast IPv4 source address for the the
destination subnet. The 0.0.0.0 source address may be used by a destination subnet. The 0.0.0.0 source address may be used by a
system that has not yet acquired an IP address. Note that the system that has not yet acquired an IP address. Note that the
0.0.0.0 source address may simultaneously be used by multiple systems 0.0.0.0 source address may simultaneously be used by multiple systems
on a LAN. Routers MUST accept a report with a source address of on a LAN. Routers <bcp14>MUST</bcp14> accept a report with a source address of
0.0.0.0.</t> 0.0.0.0.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="IP Destination Addresses for Reports"> <name>IP Destination Addresses for Reports</name>
<t>Version 3 Reports are sent with an IP destination address of
<t>Version 3 Reports are sent with an IP destination address of
224.0.0.22, to which all IGMPv3-capable multicast routers listen. A 224.0.0.22, to which all IGMPv3-capable multicast routers listen. A
system that is operating in version 1 or version 2 compatibility system that is operating in version 1 or version 2 compatibility
modes sends version 1 or version 2 Reports to the multicast group modes sends version 1 or version 2 Reports to the multicast group
specified in the Group Address field of the Report. In addition, a specified in the Group Address field of the Report. In addition, a
system MUST accept and process any version 1 or version 2 Report system <bcp14>MUST</bcp14> accept and process any version 1 or version 2 Repo rt
whose IP Destination Address field contains any of the addresses whose IP Destination Address field contains any of the addresses
(unicast or multicast) assigned to the interface on which the Report (unicast or multicast) assigned to the interface on which the Report
arrives.</t> arrives.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Notation for Group Records"> <name>Notation for Group Records</name>
<t>In the rest of this document, we use the following notation to
<t>In the rest of this document, we use the following notation to
describe the contents of a Group Record pertaining to a particular describe the contents of a Group Record pertaining to a particular
multicast address:</t> multicast address:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure>
<artwork><![CDATA[
IS_IN ( x ) - Type MODE_IS_INCLUDE, source addresses x IS_IN ( x ) - Type MODE_IS_INCLUDE, source addresses x
IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x
TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x
TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x
ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x
BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x]]></artwork>
]]></artwork>
</figure>
<t>where x is either:
<list style="symbols">
<t>a capital letter (e.g., "A") to represent the set of source
addresses, or</t>
<t>a set expression (e.g., "A+B"), where "A+B" means the union of sets <t>where x is either:</t>
<ul spacing="normal">
<li>
<t>a capital letter (e.g., "A") to represent the set of source
addresses or</t>
</li>
<li>
<t>a set expression (e.g., "A+B"), where "A+B" means the union of
sets
A and B, "A*B" means the intersection of sets A and B, and "A-B" A and B, "A*B" means the intersection of sets A and B, and "A-B"
means the removal of all elements of set B from set A.</t> means the removal of all elements of set B from set A.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="Membership Report Size"> <section numbered="true" toc="default">
<name>Membership Report Size</name>
<t>If the set of Group Records required in a Report does not fit within <t>If the set of Group Records required in a Report does not fit withi
n
the size limit of a single Report message (as determined by the MTU the size limit of a single Report message (as determined by the MTU
of the network on which it will be sent), the Group Records are sent of the network on which it will be sent), the Group Records are sent
in as many Report messages as needed to report the entire set.</t> in as many Report messages as needed to report the entire set.</t>
<t>If a single Group Record contains so many source addresses that it
<t>If a single Group Record contains so many source addresses that it does not fit within the size limit of a single Report message, and if its
does not fit within the size limit of a single Report message, if its
Type is not MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, it is split Type is not MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, it is split
into multiple Group Records, each containing a different subset of into multiple Group Records, each containing a different subset of
the source addresses and each sent in a separate Report message. If the source addresses and each sent in a separate Report message. If
its Type is MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, a single Group its Type is MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, a single Group
Record is sent, containing as many source addresses as can fit, and</t Record is sent, containing as many source addresses as can fit, and
> the remaining source addresses are not reported; though the choice of
<t>the remaining source addresses are not reported; though the choice of
which sources to report is arbitrary, it is preferable to report the which sources to report is arbitrary, it is preferable to report the
same set of sources in each subsequent report, rather than reporting same set of sources in each subsequent report, rather than reporting
different sources each time.</t> different sources each time.</t>
</section> </section>
</section> </section>
</section> </section>
<section anchor="grp_mbrs" numbered="true" toc="default">
<section title="Description of the Protocol for Group Members" anchor="grp_mb <name>Description of the Protocol for Group Members</name>
rs"> <t>IGMP is an asymmetric protocol, specifying separate behaviors for
<t>IGMP is an asymmetric protocol, specifying separate behaviors for
group members -- that is, hosts or routers that wish to receive group members -- that is, hosts or routers that wish to receive
multicast packets -- and multicast routers. This section describes multicast packets -- and multicast routers. This section describes
the part of IGMPv3 that applies to all group members. (Note that a the part of IGMPv3 that applies to all group members. (Note that a
multicast router that is also a group member performs both parts of multicast router that is also a group member performs both parts of
IGMPv3, receiving and responding to its own IGMP message IGMPv3, receiving and responding to its own IGMP message
transmissions as well as those of its neighbors. The multicast transmissions as well as those of its neighbors. The multicast
router part of IGMPv3 is described in <xref target="mcast_rtrs" />.)</ router part of IGMPv3 is described in <xref target="mcast_rtrs" format
t> ="default"/>.)</t>
<t>A system performs the protocol described in this section over all
<t>A system performs the protocol described in this section over all
interfaces on which multicast reception is supported, even if more interfaces on which multicast reception is supported, even if more
than one of those interfaces is connected to the same network.</t> than one of those interfaces is connected to the same network.</t>
<t>For interoperability with multicast routers running older versions of
<t>For interoperability with multicast routers running older versions of
IGMP, systems maintain a MulticastRouterVersion variable for each IGMP, systems maintain a MulticastRouterVersion variable for each
interface on which multicast reception is supported. This section interface on which multicast reception is supported. This section
describes the behavior of group member systems on interfaces for describes the behavior of group member systems on interfaces for
which MulticastRouterVersion = 3. The algorithm for determining which MulticastRouterVersion = 3. The algorithm for determining
MulticastRouterVersion, and the behavior for versions other than 3, MulticastRouterVersion, and the behavior for versions other than 3,
are described in <xref target="interop" />.</t> are described in <xref target="interop" format="default"/>.</t>
<t>The all-systems multicast address, 224.0.0.1, is handled as a special
<t>The all-systems multicast address, 224.0.0.1, is handled as a special case. On all systems -- that is, all hosts and routers including
case. On all systems -- that is all hosts and routers, including
multicast routers -- reception of packets destined to the all-systems multicast routers -- reception of packets destined to the all-systems
multicast address, from all sources, is permanently enabled on all multicast address, from all sources, is permanently enabled on all
interfaces on which multicast reception is supported. No IGMP interfaces on which multicast reception is supported. No IGMP
messages are ever sent regarding the all-systems multicast address.</t > messages are ever sent regarding the all-systems multicast address.</t >
<t>There are two types of events that trigger IGMPv3 protocol actions on
<t>There are two types of events that trigger IGMPv3 protocol actions on
an interface: an interface:
<list style="symbols"> </t>
<t>a change of the interface reception state, caused by a local <ul spacing="normal">
<li>
<t>A change of the interface reception state, caused by a local
invocation of IPMulticastListen.</t> invocation of IPMulticastListen.</t>
</li>
<t>reception of a Query.</t> <li>
</list></t> <t>The reception of a Query.</t>
</li>
<t>(Received IGMP messages of types other than Query are silently </ul>
<t>(Received IGMP messages of types other than Query are silently
ignored, except as required for interoperation with earlier versions ignored, except as required for interoperation with earlier versions
of IGMP.)</t> of IGMP.)</t>
<t>The following subsections describe the actions to be taken for each
<t>The following subsections describe the actions to be taken for each
of these two cases. In those descriptions, timer and counter names of these two cases. In those descriptions, timer and counter names
appear in square brackets. The default values for those timers and appear in square brackets. The default values for those timers and
counters are specified in <xref target="timers" />.</t> counters are specified in <xref target="timers" format="default"/>.</t
>
<section title="Action on Change of Interface State"> <section numbered="true" toc="default">
<name>Action on Change of Interface State</name>
<t>An invocation of IPMulticastListen may cause the multicast reception <t>An invocation of IPMulticastListen may cause the multicast reception
state of an interface to change, according to the rules in state of an interface to change, according to the rules in
<xref target="if_state" />. Each such change affects the per-interface entry for a single <xref target="if_state" format="default"/>. Each such change affects the per -interface entry for a single
multicast address.</t> multicast address.</t>
<t>A change of interface state causes the system to immediately transmit
<t>A change of interface state causes the system to immediately transmit
a State-Change Report from that interface. The type and contents of a State-Change Report from that interface. The type and contents of
the Group Record(s) in that Report are determined by comparing the the Group Record(s) in that Report are determined by comparing the
filter mode and source list for the affected multicast address before filter mode and source list for the affected multicast address before
and after the change, according to the table below. If no interface and after the change, according to <xref target="state-change-record"/>. If no interface
state existed for that multicast address before the change (i.e., the state existed for that multicast address before the change (i.e., the
change consisted of creating a new per-interface record), or if no change consisted of creating a new per-interface record), or if no
state exists after the change (i.e., the change consisted of deleting state exists after the change (i.e., the change consisted of deleting
a per-interface record), then the "non-existent" state is considered a per-interface record), then the "non-existent" state is considered
to have a filter mode of INCLUDE and an empty source list.</t> to have a filter mode of INCLUDE and an empty source list.</t>
<texttable> <!--[rfced] We note that Tables 3-15 do not have titles (Tables 1 and 2
<ttcol align="center">Old State</ttcol> do). Would you like to add titles? If so, please provide the
<ttcol align="center">New State</ttcol> desired text.
<ttcol align="center">State-Change Record Sent</ttcol> -->
<c>INCLUDE (A)</c><c>INCLUDE (B)</c><c>ALLOW (B-A), BLOCK (A-B)</c>
<c>EXCLUDE (A)</c><c>EXCLUDE (B)</c><c>ALLOW (A-B), BLOCK (B-A)</c>
<c>INCLUDE (A)</c><c>EXCLUDE (B)</c><c>TO_EX (B)</c>
<c>EXCLUDE (A)</c><c>INCLUDE (B)</c><c>TO_IN (B)</c>
</texttable>
<t>If the computed source list for either an ALLOW or a BLOCK State- <table anchor="state-change-record" align="center">
<thead>
<tr>
<th align="left">Old State</th>
<th align="left">New State</th>
<th align="left">State-Change Record Sent</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">INCLUDE (A)</td>
<td align="left">INCLUDE (B)</td>
<td align="left">ALLOW (B-A), BLOCK (A-B)</td>
</tr>
<tr>
<td align="left">EXCLUDE (A)</td>
<td align="left">EXCLUDE (B)</td>
<td align="left">ALLOW (A-B), BLOCK (B-A)</td>
</tr>
<tr>
<td align="left">INCLUDE (A)</td>
<td align="left">EXCLUDE (B)</td>
<td align="left">TO_EX (B)</td>
</tr>
<tr>
<td align="left">EXCLUDE (A)</td>
<td align="left">INCLUDE (B)</td>
<td align="left">TO_IN (B)</td>
</tr>
</tbody>
</table>
<t>If the computed source list for either an ALLOW or a BLOCK State-
Change Record is empty, that record is omitted from the Report Change Record is empty, that record is omitted from the Report
message.</t> message.</t>
<t>To cover the possibility of the State-Change Report being missed by
<t>To cover the possibility of the State-Change Report being missed by
one or more multicast routers, it is retransmitted [Robustness one or more multicast routers, it is retransmitted [Robustness
Variable] - 1 more times, at intervals chosen at random from the Variable] - 1 more times, at intervals chosen at random from the
range (0, [Unsolicited Report Interval]).</t> range (0, [Unsolicited Report Interval]).</t>
<t>If more changes to the same interface state entry occur before all
<t>If more changes to the same interface state entry occur before all
the retransmissions of the State-Change Report for the first change the retransmissions of the State-Change Report for the first change
have been completed, each such additional change triggers the have been completed, each such additional change triggers the
immediate transmission of a new State-Change Report.</t> immediate transmission of a new State-Change Report.</t>
<t>The contents of the new transmitted report are calculated as follows.
<t>The contents of the new transmitted report are calculated as follows.
As was done with the first report, the interface state for the As was done with the first report, the interface state for the
affected group before and after the latest change is compared. The affected group before and after the latest change is compared. The
report records expressing the difference are built according to the report records expressing the difference are built according to <xref target=
table above. However these records are not transmitted in a message "state-change-record"/>. However, these records are not transmitted in a messag
but instead merged with the contents of the pending report, to create e
but instead are merged with the contents of the pending report to create
the new State-Change report. The rules for merging the difference the new State-Change report. The rules for merging the difference
report resulting from the state change and the pending report are report resulting from the state change and the pending report are
described below.</t> described below.</t>
<t>The transmission of the merged State-Change Report terminates
<t>The transmission of the merged State-Change Report terminates
retransmissions of the earlier State-Change Reports for the same retransmissions of the earlier State-Change Reports for the same
multicast address, and becomes the first of [Robustness Variable] multicast address, and becomes the first of [Robustness Variable]
transmissions of State-Change Reports.</t> transmissions of State-Change Reports.</t>
<t>Each time a source is included in the difference report calculated
<t>Each time a source is included in the difference report calculated
above, retransmission state for that source needs to be maintained above, retransmission state for that source needs to be maintained
until [Robustness Variable] State-Change reports have been sent by until [Robustness Variable] State-Change reports have been sent by
the host. This is done in order to ensure that a series of the host. This is done in order to ensure that a series of
successive state changes do not break the protocol robustness.</t> successive state changes do not break the protocol robustness.</t>
<t>If the interface reception-state change that triggers the new report
<t>If the interface reception-state change that triggers the new report is a filter-mode change, then the next [Robustness Variable] State-Change
is a filter-mode change, then the next [Robustness Variable] State- Reports will include a Filter-Mode-Change Record. This
Change Reports will include a Filter-Mode-Change record. This
applies even if any number of source-list changes occur in that applies even if any number of source-list changes occur in that
period. The host has to maintain retransmission state for the group period. The host has to maintain retransmission state for the group
until the [Robustness Variable] State-Change reports have been sent. until the [Robustness Variable] State-Change reports have been sent.
When [Robustness Variable] State-Change reports with Filter-Mode- When [Robustness Variable] State-Change reports with Filter-Mode-Change
Change records have been transmitted after the last filter-mode Records have been transmitted after the last filter-mode
change, and if source-list changes to the interface reception have change, and if source-list changes to the interface reception have
scheduled additional reports, then the next State-Change report will scheduled additional reports, then the next State-Change report will
include Source-List-Change records.</t> include Source-List-Change Records.</t>
<t>Each time a State-Change Report is transmitted, the contents are
determined as follows.
<t>Each time a State-Change Report is transmitted, the contents are <!--[rfced] For consistency, should "Filter-Mode-Change record"
determined as follows. If the report should contain a Filter-Mode- be plural in the first sentence (option A), or should
Change record, then if the current filter-mode of the interface is "Source-List-Change records" be singular in the second
INCLUDE, a TO_IN record is included in the report, otherwise a TO_EX sentence (option B)?
record is included. If instead the report should contain Source-
List-Change records, an ALLOW and a BLOCK record are included. The
contents of these records are built according to the table below.</t>
<texttable> Original:
<ttcol align="center">Record</ttcol> If the report should contain a Filter-Mode-Change record, then if
<ttcol align="center">Sources Included</ttcol> the current filter-mode of the interface is INCLUDE, a TO_IN record
<c>TO_IN</c><c>All in the current interface state that must be forward is included in the report, otherwise a TO_EX record is included. If
ed</c> instead the report should contain Source-List-Change records, an
<c>TO_EX</c><c>All in the current interface state that must be blocked ALLOW and a BLOCK record are included.
</c>
<c>ALLOW</c><c>All with retransmission state that must be forwarded</c
>
<c>BLOCK</c><c>All with retransmission state that must be blocked</c>
</texttable>
<t>If the computed source list for either an ALLOW or a BLOCK record is Perhaps A:
empty, that record is omitted from the State-Change report.</t> If the report should contain Filter-Mode-Change Records, and if
the current filter-mode of the interface is INCLUDE, a TO_IN record
is included in the report; otherwise, a TO_EX record is included. If
instead the report should contain Source-List-Change Records, an
ALLOW and a BLOCK record are included.
<t>Note: When the first State-Change report is sent, the non-existent or
pending report to merge with, can be treated as a source-change
report with empty ALLOW and BLOCK records (no sources have
retransmission state).</t>
</section>
<section title="Action on Reception of a Query"> Perhaps B:
If the report should contain a Filter-Mode-Change Record, and if
the current filter-mode of the interface is INCLUDE, a TO_IN record
is included in the report; otherwise, a TO_EX record is included. If
instead the report should contain a Source-List-Change Record, an
ALLOW and a BLOCK record are included.
-->
<t>When a system receives a Query, it does not respond immediately. If the report should contain a Filter-Mode-Change
Record, and if the current filter-mode of the interface is
INCLUDE, a TO_IN record is included in the report; otherwise, a TO_EX
record is included. If instead the report should contain Source-List-Change
Records, an ALLOW and a BLOCK record are included. The
contents of these records are built according to <xref target="sources
_included"/>.</t>
<table anchor="sources_included" align="center">
<thead>
<tr>
<th align="left">Record</th>
<th align="left">Sources Included</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">TO_IN</td>
<td align="left">All in the current interface state that must be f
orwarded</td>
</tr>
<tr>
<td align="left">TO_EX</td>
<td align="left">All in the current interface state that must be b
locked</td>
</tr>
<tr>
<td align="left">ALLOW</td>
<td align="left">All with retransmission state that must be forwar
ded</td>
</tr>
<tr>
<td align="left">BLOCK</td>
<td align="left">All with retransmission state that must be blocke
d</td>
</tr>
</tbody>
</table>
<t>If the computed source list for either an ALLOW or a BLOCK record is
empty, that record is omitted from the State-Change report.</t>
<!-- [rfced] Please review whether any of the notes in this document
should be in the <aside> element. It is defined as "a container for
content that is semantically less important or tangential to the
content that surrounds it" (https://authors.ietf.org/en/rfcxml-vocabulary#aside)
.
-->
<t>Note: When the first State-Change report is sent, the non-existent
pending report to merge with can be treated as a source-change
report with empty ALLOW and BLOCK records (no sources have
retransmission state).</t>
</section>
<section numbered="true" toc="default">
<name>Action on Reception of a Query</name>
<t>When a system receives a Query, it does not respond immediately.
Instead, it delays its response by a random amount of time, bounded Instead, it delays its response by a random amount of time, bounded
by the Max Resp Time value derived from the Max Resp Code in the by the Max Resp Time value derived from the Max Resp Code in the
received Query message. A system may receive a variety of Queries on received Query message. A system may receive a variety of Queries on
different interfaces and of different kinds (e.g., General Queries, different interfaces and of different kinds (e.g., General Queries,
Group-Specific Queries, and Group-and-Source-Specific Queries), each Group-Specific Queries, and Group-and-Source-Specific Queries), each
of which may require its own delayed response.</t> of which may require its own delayed response.</t>
<t>Before scheduling a response to a Query, the system must first
<t>Before scheduling a response to a Query, the system must first consider previously scheduled pending responses as, in many cases,
consider previously scheduled pending responses and in many cases it can schedule a combined response. Therefore, the system must be able to
schedule a combined response. Therefore, the system must be able to maintain the following state:</t>
maintain the following state:<list style="symbols"> <ul spacing="normal">
<li>
<t>A timer per interface for scheduling responses to General Queries.</t> <t>A timer per interface for scheduling responses to General Queries
.</t>
<t>A per-group and interface timer for scheduling responses to Group- </li>
<li>
<t>A per-group and interface timer for scheduling responses to Group
-
Specific and Group-and-Source-Specific Queries.</t> Specific and Group-and-Source-Specific Queries.</t>
</li>
<t>A per-group and interface list of sources to be reported in the <li>
<t>A per-group and interface list of sources to be reported in the
response to a Group-and-Source-Specific Query.</t> response to a Group-and-Source-Specific Query.</t>
</list></t> </li>
</ul>
<t>When a new Query with the Router-Alert option arrives on an <t>When a new Query with the Router Alert option arrives on an
interface, provided the system has state to report, a delay for a interface, provided the system has state to report, a delay for a
response is randomly selected in the range (0, [Max Resp Time]) where response is randomly selected in the range (0, [Max Resp Time]) where
Max Resp Time is derived from Max Resp Code in the received Query Max Resp Time is derived from Max Resp Code in the received Query
message. The following rules are then used to determine if a Report message. The following rules are then used to determine if a Report
needs to be scheduled and the type of Report to schedule. The rules needs to be scheduled and the type of Report to schedule. The rules
are considered in order and only the first matching rule is applied. are considered in order and only the first matching rule is applied.
<list style="numbers"> </t>
<t>If there is a pending response to a previous General Query <ol spacing="normal" type="1"><li>
<t>If there is a pending response to a previous General Query
scheduled sooner than the selected delay, no additional response scheduled sooner than the selected delay, no additional response
needs to be scheduled.</t> needs to be scheduled.</t>
</li>
<t>If the received Query is a General Query, the interface timer is <li>
<t>If the received Query is a General Query, the interface timer is
used to schedule a response to the General Query after the used to schedule a response to the General Query after the
selected delay. Any previously pending response to a General selected delay. Any previously pending response to a General
Query is canceled.</t> Query is canceled.</t>
</li>
<t>If the received Query is a Group-Specific Query or a Group-and- <li>
<t>If the received Query is a Group-Specific Query or a Group-and-
Source-Specific Query and there is no pending response to a Source-Specific Query and there is no pending response to a
previous Query for this group, then the group timer is used to previous Query for this group, then the group timer is used to
schedule a report. If the received Query is a Group-and-Source- schedule a report. If the received Query is a Group-and-Source-
Specific Query, the list of queried sources is recorded to be used Specific Query, the list of queried sources is recorded to be used
when generating a response.</t> when generating a response.</t>
</li>
<t>If there already is a pending response to a previous Query <li>
<t>If there already is a pending response to a previous Query
scheduled for this group, and either the new Query is a Group- scheduled for this group, and either the new Query is a Group-
Specific Query or the recorded source-list associated with the Specific Query or the recorded source-list associated with the
group is empty, then the group source-list is cleared and a single group is empty, then the group source-list is cleared and a single
response is scheduled using the group timer. The new response is response is scheduled using the group timer. The new response is
scheduled to be sent at the earliest of the remaining time for the scheduled to be sent at the earliest of the remaining time for the
pending report and the selected delay.</t> pending report and the selected delay.</t>
</li>
<t>If the received Query is a Group-and-Source-Specific Query and <li>
<t>If the received Query is a Group-and-Source-Specific Query and
there is a pending response for this group with a non-empty there is a pending response for this group with a non-empty
source-list, then the group source list is augmented to contain source-list, then the group source list is augmented to contain
the list of sources in the new Query and a single response is the list of sources in the new Query and a single response is
scheduled using the group timer. The new response is scheduled to scheduled using the group timer. The new response is scheduled to
be sent at the earliest of the remaining time for the pending be sent at the earliest of the remaining time for the pending
report and the selected delay.</t> report and the selected delay.</t>
</list></t> </li>
</ol>
<t>When the timer in a pending response record expires, the system <t>When the timer in a pending response record expires, the system
transmits, on the associated interface, one or more Report messages transmits, on the associated interface, one or more Report messages
carrying one or more Current-State Records (see <xref target="grp_rec_ carrying one or more Current-State Records (see <xref target="grp_rec_
types" />), as types" format="default"/>), as
follows:<list style="numbers"> follows:</t>
<ol spacing="normal" type="1"><li>
<t>If the expired timer is the interface timer (i.e., it is a pending <t>If the expired timer is the interface timer (i.e., it is a pendin
g
response to a General Query), then one Current-State Record is response to a General Query), then one Current-State Record is
sent for each multicast address for which the specified interface sent for each multicast address for which the specified interface
has reception state, as described in <xref target="if_state" />. The has reception state, as described in <xref target="if_state" format="d
Current- efault"/>. The Current-State Record carries the multicast address and its assoc
State Record carries the multicast address and its associated iated
filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list. filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list.
Multiple Current-State Records are packed into individual Report Multiple Current-State Records are packed into individual Report
messages, to the extent possible. messages, to the extent possible.
<vspace blankLines="1" /> </t>
<t>
This naive algorithm may result in bursts of packets when a system This naive algorithm may result in bursts of packets when a system
is a member of a large number of groups. Instead of using a is a member of a large number of groups. Instead of using a
single interface timer, implementations are recommended to spread single interface timer, implementations are recommended to spread
transmission of such Report messages over the interval (0, [Max transmission of such Report messages over the interval (0, [Max
Resp Time]). Note that any such implementation MUST avoid the Resp Time]). Note that any such implementation <bcp14>MUST</bcp14> avoid
"ack-implosion" problem, i.e., MUST NOT send a Report immediately the
"ack-implosion" problem, i.e., <bcp14>MUST NOT</bcp14> send a Report immed
iately
on reception of a General Query.</t> on reception of a General Query.</t>
</li>
<t>If the expired timer is a group timer and the list of recorded <li>
sources for the that group is empty (i.e., it is a pending <t>If the expired timer is a group timer and the list of recorded
sources for that group is empty (i.e., it is a pending
response to a Group-Specific Query), then if and only if the response to a Group-Specific Query), then if and only if the
interface has reception state for that group address, a single interface has reception state for that group address, a single
Current-State Record is sent for that address. The Current-State Current-State Record is sent for that address. The Current-State
Record carries the multicast address and its associated filter Record carries the multicast address and its associated filter
mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list.</t> mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list.</t>
</li>
<t>If the expired timer is a group timer and the list of recorded <li>
If the expired timer is a group timer and the list of recorded
sources for that group is non-empty (i.e., it is a pending sources for that group is non-empty (i.e., it is a pending
response to a Group-and-Source-Specific Query), then if and only response to a Group-and-Source-Specific Query), then if and only
if the interface has reception state for that group address, the if the interface has reception state for that group address, the
contents of the responding Current-State Record is determined from contents of the responding Current-State Record is determined from
the interface state and the pending response record, as specified the interface state and the pending response record, as specified
in the following table:</t></list></t> in <xref target="per-interface-state"/>.
</li>
<texttable> </ol>
<ttcol align="center">Per-Interface State</ttcol> <table anchor="per-interface-state" align="center">
<ttcol align="center">Set of Sources in the Pending Response Record</t <thead>
tcol> <tr>
<ttcol align="center">Current-State Record</ttcol> <th align="left">Per-Interface State</th>
<c>INCLUDE (A)</c><c>B</c><c>IS_IN (A*B)</c> <th align="left">Set of Sources in the Pending Response Record</th
<c>EXCLUDE (A)</c><c>B</c><c>IS_IN (B-A)</c> >
</texttable> <th align="left">Current-State Record</th>
</tr>
<t>If the resulting Current-State Record has an empty set of source </thead>
<tbody>
<tr>
<td align="left">INCLUDE (A)</td>
<td align="left">B</td>
<td align="left">IS_IN (A*B)</td>
</tr>
<tr>
<td align="left">EXCLUDE (A)</td>
<td align="left">B</td>
<td align="left">IS_IN (B-A)</td>
</tr>
</tbody>
</table>
<t>If the resulting Current-State Record has an empty set of source
addresses, then no response is sent.</t> addresses, then no response is sent.</t>
<t>Finally, after any required Report messages have been generated, the
<t>Finally, after any required Report messages have been generated, the
source lists associated with any reported groups are cleared.</t> source lists associated with any reported groups are cleared.</t>
</section> </section>
</section> </section>
<section anchor="mcast_rtrs" numbered="true" toc="default">
<section title="Description of the Protocol for Multicast Routers" anchor="mc <name>Description of the Protocol for Multicast Routers</name>
ast_rtrs"> <t>The purpose of IGMP is to enable each multicast router to learn, for
<t>The purpose of IGMP is to enable each multicast router to learn, for
each of its directly attached networks, which multicast addresses are each of its directly attached networks, which multicast addresses are
of interest to the systems attached to those networks. IGMP version of interest to the systems attached to those networks. IGMP version
3 adds the capability for a multicast router to also learn which 3 adds the capability for a multicast router to also learn which
sources are of interest to neighboring systems, for packets sent to sources are of interest to neighboring systems, for packets sent to
any particular multicast address. The information gathered by IGMP any particular multicast address. The information gathered by IGMP
is provided to whichever multicast routing protocol is being used by is provided to whichever multicast routing protocol is being used by
the router, in order to ensure that multicast packets are delivered the router, in order to ensure that multicast packets are delivered
to all networks where there are interested receivers.</t> to all networks where there are interested receivers.</t>
<t>This section describes the part of IGMPv3 that is performed by
<t>This section describes the part of IGMPv3 that is performed by
multicast routers. Multicast routers may also themselves become multicast routers. Multicast routers may also themselves become
members of multicast groups, and therefore also perform the group members of multicast groups, and therefore also perform the group
member part of IGMPv3, described in <xref target="grp_mbrs" />.</t> member part of IGMPv3, as described in <xref target="grp_mbrs" format=
"default"/>.</t>
<t>A multicast router performs the protocol described in this section <t>A multicast router performs the protocol described in this section
over each of its directly-attached networks. If a multicast router over each of its directly attached networks. If a multicast router
has more than one interface to the same network, it only needs to has more than one interface to the same network, it only needs to
operate this protocol over one of those interfaces. On each operate this protocol over one of those interfaces. On each
interface over which this protocol is being run, the router MUST interface over which this protocol is being run, the router <bcp14>MUST</bcp1
enable reception of multicast address 224.0.0.22, from all sources 4>
(and MUST perform the group member part of IGMPv3 for that address on enable reception of multicast address 224.0.0.22 from all sources
(and <bcp14>MUST</bcp14> perform the group member part of IGMPv3 for that add
ress on
that interface).</t> that interface).</t>
<t>Multicast routers need to know only that at least one system on an
<t>Multicast routers need to know only that at least one system on an
attached network is interested in packets to a particular multicast attached network is interested in packets to a particular multicast
address from a particular source; a multicast router is not required address from a particular source; a multicast router is not required
to keep track of the interests of each individual neighboring system. to keep track of the interests of each individual neighboring system.
(However, see <xref target="suppression" /> point 1 for discussion.)</ (However, see <xref target="suppression" format="default"/>, item 1 fo
t> r discussion.)</t>
<t>IGMPv3 is backward compatible with previous versions of the IGMP
<t>IGMPv3 is backward compatible with previous versions of the IGMP
protocol. In order to remain backward compatible with older IGMP protocol. In order to remain backward compatible with older IGMP
systems, IGMPv3 multicast routers MUST also implement versions 1 and systems, IGMPv3 multicast routers <bcp14>MUST</bcp14> also implement versions
2 of the protocol (see <xref target="interop" />).</t> 1 and
2 of the protocol (see <xref target="interop" format="default"/>).</t>
<section title="Conditions for IGMP Queries"> <section numbered="true" toc="default">
<name>Conditions for IGMP Queries</name>
<t>Multicast routers send General Queries periodically to request group <t>Multicast routers send General Queries periodically to request group
membership information from an attached network. These queries are membership information from an attached network. These queries are
used to build and refresh the group membership state of systems on used to build and refresh the group membership state of systems on
attached networks. Systems respond to these queries by reporting attached networks. Systems respond to these queries by reporting
their group membership state (and their desired set of sources) with their group membership state (and their desired set of sources) with
Current-State Group Records in IGMPv3 Membership Reports.</t> Current-State Group Records in IGMPv3 Membership Reports.</t>
<t>As a member of a multicast group, a system may express interest in
<t>As a member of a multicast group, a system may express interest in
receiving or not receiving traffic from particular sources. As the receiving or not receiving traffic from particular sources. As the
desired reception state of a system changes, it reports these changes desired reception state of a system changes, it reports these changes
using Filter-Mode-Change Records or Source-List-Change Records. using Filter-Mode-Change Records or Source-List-Change Records.
These records indicate an explicit state change in a group at a These records indicate an explicit state change in a group at a
system in either the group record's source list or its filter-mode. system in either the group record's source list or its filter-mode.
When a group membership is terminated at a system or traffic from a When a group membership is terminated at a system or traffic from a
particular source is no longer desired, a multicast router must query particular source is no longer desired, a multicast router must query
for other members of the group or listeners of the source before for other members of the group or listeners of the source before
deleting the group (or source) and pruning its traffic.</t> deleting the group (or source) and pruning its traffic.</t>
<t>To enable all systems on a network to respond to changes in group
<t>To enable all systems on a network to respond to changes in group membership, multicast routers send specific queries. A Group-Specific
membership, multicast routers send specific queries. A Group- Query is sent to verify there are no systems that desire
Specific Query is sent to verify there are no systems that desire
reception of the specified group or to "rebuild" the desired reception of the specified group or to "rebuild" the desired
reception state for a particular group. Group-Specific Queries are reception state for a particular group. Group-Specific Queries are
sent when a router receives a State-Change record indicating a system sent when a router receives a State-Change record indicating a system
is leaving a group.</t> is leaving a group.</t>
<t>A Group-and-Source Specific Query is used to verify there are no
<t>A Group-and-Source Specific Query is used to verify there are no systems on a network that desire receiving traffic from a set of
systems on a network which desire to receive traffic from a set of
sources. Group-and-Source Specific Queries list sources for a sources. Group-and-Source Specific Queries list sources for a
particular group which have been requested to no longer be forwarded. particular group that have been requested to no longer be forwarded.
This query is sent by a multicast router to learn if any systems This query is sent by a multicast router to learn if any systems
desire reception of packets to the specified group address from the desire reception of packets to the specified group address from the
specified source addresses. Group-and-Source Specific Queries are specified source addresses. Group-and-Source Specific Queries are
only sent in response to State-Change Records and never in response only sent in response to State-Change Records and never in response
to Current-State Records. <xref target="qry_vars" /> describes each q uery in to Current-State Records. <xref target="qry_vars" format="default"/> describes each query in
more detail.</t> more detail.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="IGMP State Maintained by Multicast Routers"> <name>IGMP State Maintained by Multicast Routers</name>
<t>Multicast routers implementing IGMPv3 keep state per group per
<t>Multicast routers implementing IGMPv3 keep state per group per
attached network. This group state consists of a filter-mode, a list attached network. This group state consists of a filter-mode, a list
of sources, and various timers. For each attached network running of sources, and various timers. For each attached network running
IGMP, a multicast router records the desired reception state for that IGMP, a multicast router records the desired reception state for that
network. That state conceptually consists of a set of records of the network. That state conceptually consists of a set of records of the
form: form:
<figure> </t>
<artwork><![CDATA[ <artwork name="" type="" align="left" alt=""><![CDATA[
(multicast address, group timer, filter-mode, (source records)) (multicast address, group timer, filter-mode, (source records))]]></artwor
]]></artwork> k>
</figure></t>
<t>Each source record is of the form: <t>Each source record is of the form:</t>
<figure> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![CDATA[ (source address, source timer)]]></artwork>
(source address, source timer)
]]></artwork>
</figure></t>
<t>If all sources within a given group are desired, an empty source <t>If all sources within a given group are desired, an empty source
record list is kept with filter-mode set to EXCLUDE. This means record list is kept with filter-mode set to EXCLUDE. This means
hosts on this network want all sources for this group to be hosts on this network want all sources for this group to be
forwarded. This is the IGMPv3 equivalent to a IGMPv1 or IGMPv2 group forwarded. This is the IGMPv3 equivalent to an IGMPv1 or IGMPv2 group
join.</t> join.</t>
<section anchor="sec-rfm" numbered="true" toc="default">
<section anchor="sec-rfm" title="Definition of Router Filter-Mode"> <name>Definition of Router Filter-Mode</name>
<t>To reduce internal state, IGMPv3 routers keep a filter-mode per gro
<t>To reduce internal state, IGMPv3 routers keep a filter-mode per group up
per attached network. This filter-mode is used to condense the total per attached network. This filter-mode is used to condense the total
desired reception state of a group to a minimum set such that all desired reception state of a group to a minimum set such that all
systems' memberships are satisfied. This filter-mode may change in systems' memberships are satisfied. This filter-mode may change in
response to the reception of particular types of group records or response to the reception of particular types of group records or
when certain timer conditions occur. In the following sections, we when certain timer conditions occur. In the following sections, we
use the term "router filter-mode" to refer to the filter-mode of a use the term "router filter-mode" to refer to the filter-mode of a
particular group within a router. <xref target="rcv_rpts" /> describe s the changes particular group within a router. <xref target="rcv_rpts" format="def ault"/> describes the changes
of a router filter-mode per group record received.</t> of a router filter-mode per group record received.</t>
<t>Conceptually, when a group record is received, the router filter-mo
<t>Conceptually, when a group record is received, the router filter-mode de
for that group is updated to cover all the requested sources using for that group is updated to cover all the requested sources using
the least amount of state. As a rule, once a group record with a the least amount of state. As a rule, once a group record with a
filter-mode of EXCLUDE is received, the router filter-mode for that filter-mode of EXCLUDE is received, the router filter-mode for that
group will be EXCLUDE.</t> group will be EXCLUDE.</t>
<t>When a router filter-mode for a group is EXCLUDE, the source record
<t>When a router filter-mode for a group is EXCLUDE, the source record list contains two types of sources. The first type is the set that
list contains two types of sources. The first type is the set which
represents conflicts in the desired reception state; this set must be represents conflicts in the desired reception state; this set must be
forwarded by some router on the network. The second type is the set forwarded by some router on the network. The second type is the set
of sources which hosts have requested to not be forwarded. <xref target="rat ionale" /> of sources that hosts have requested to not be forwarded. <xref target="rati onale" format="default"/>
describes the reasons for keeping two different sets when in EXCLUDE describes the reasons for keeping two different sets when in EXCLUDE
mode.</t> mode.</t>
<t>When a router filter-mode for a group is INCLUDE, the source record
<t>When a router filter-mode for a group is INCLUDE, the source record
list is the list of sources desired for the group. This is the total list is the list of sources desired for the group. This is the total
desired set of sources for that group. Each source in the source desired set of sources for that group. Each source in the source
record list must be forwarded by some router on the network.</t> record list must be forwarded by some router on the network.</t>
<t>Because a reported group record with a filter-mode of EXCLUDE will
<t>Because a reported group record with a filter-mode of EXCLUDE will
cause a router to transition its filter-mode for that group to cause a router to transition its filter-mode for that group to
EXCLUDE, a mechanism for transitioning a router's filter-mode back to EXCLUDE, a mechanism for transitioning a router's filter-mode back to
INCLUDE must exist. If all systems with a group record in EXCLUDE INCLUDE must exist. If all systems with a group record in EXCLUDE
filter-mode cease reporting, it is desirable for the router filter- filter-mode cease reporting, it is desirable for the router filter-
mode for that group to transition back to INCLUDE mode. This mode for that group to transition back to INCLUDE mode. This
transition occurs when the group timer expires and is explained in transition occurs when the group timer expires and is explained in
detail in <xref target="fltr_modes" />.</t> detail in <xref target="fltr_modes" format="default"/>.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Definition of Group Timers"> <name>Definition of Group Timers</name>
<t>The group timer is only used when a group is in EXCLUDE mode and it
<t>The group timer is only used when a group is in EXCLUDE mode and it
represents the time for the filter-mode of the group to expire and represents the time for the filter-mode of the group to expire and
switch to INCLUDE mode. We define a group timer as a decrementing switch to INCLUDE mode. We define a group timer as a decrementing
timer with a lower bound of zero kept per group per attached network. timer with a lower bound of zero kept per group per attached network.
Group timers are updated according to the types of group records Group timers are updated according to the types of group records
received.</t> received.</t>
<t>A group timer expiring when a router filter-mode for the group is
<t>A group timer expiring when a router filter-mode for the group is
EXCLUDE means there are no listeners on the attached network in EXCLUDE means there are no listeners on the attached network in
EXCLUDE mode. At this point, a router will transition to INCLUDE EXCLUDE mode. At this point, a router will transition to INCLUDE
filter-mode. <xref target="fltr_modes" /> describes the actions taken when a group filter-mode. <xref target="fltr_modes" format="default"/> describes t he actions taken when a group
timer expires while in EXCLUDE mode.</t> timer expires while in EXCLUDE mode.</t>
<t><xref target="group-timer"/> summarizes the role of the group timer
<t>The following table summarizes the role of the group timer. .
<xref target="rcv_rpts" /> describes the details of setting the group timer p <xref target="rcv_rpts" format="default"/> describes the details of setting t
er type of he group timer per type of
group record received.</t> group record received.</t>
<texttable> <table anchor="group-timer" align="center">
<ttcol align="center">Group Filter-Mode</ttcol> <thead>
<ttcol align="center">Group Timer Value</ttcol> <tr>
<ttcol align="center">Actions/Comments</ttcol> <th align="left">Group Filter-Mode</th>
<c>INCLUDE</c><c>Timer >= 0</c><c>All members in INCLUDE mode.</c> <th align="left">Group Timer Value</th>
<c>EXCLUDE</c><c>Timer > 0</c><c>At least one member in EXCLUDE mode.</c> <th align="left">Actions/Comments</th>
<c>EXCLUDE</c><c>Timer == 0</c> </tr>
<c>No more listeners to group. If all source timers have expired then </thead>
<tbody>
<tr>
<td align="left">INCLUDE</td>
<td align="left">Timer &gt;= 0</td>
<td align="left">All members in INCLUDE mode.</td>
</tr>
<tr>
<td align="left">EXCLUDE</td>
<td align="left">Timer &gt; 0</td>
<td align="left">At least one member in EXCLUDE mode.</td>
</tr>
<tr>
<td align="left">EXCLUDE</td>
<td align="left">Timer == 0</td>
<td align="left">No more listeners to group. If all source time
rs have expired, then
delete Group Record. If there are still source record timers runni ng, delete Group Record. If there are still source record timers runni ng,
switch to INCLUDE filter-mode using those source records with runni ng switch to INCLUDE filter-mode using those source records with runni ng
timers as the INCLUDE source record state.</c> timers as the INCLUDE source record state.</td>
</texttable> </tr>
</section> </tbody>
</table>
<section title="Definition of Source Timers"> </section>
<section numbered="true" toc="default">
<t>A source timer is kept per source record and is a decrementing timer <name>Definition of Source Timers</name>
<t>A source timer is kept per source record and is a decrementing time
r
with a lower bound of zero. Source timers are updated according to with a lower bound of zero. Source timers are updated according to
the type and filter-mode of the group record received. Source timers the type and filter-mode of the group record received. Source timers
are always updated (for a particular group) whenever the source is are always updated (for a particular group) whenever the source is
present in a received record for that group. <xref target="rcv_rpts" /> desc ribes present in a received record for that group. <xref target="rcv_rpts" format= "default"/> describes
the setting of source timers per type of group records received.</t> the setting of source timers per type of group records received.</t>
<t>A source record with a running timer with a router filter-mode for
<t>A source record with a running timer with a router filter-mode for
the group of INCLUDE means that there is currently one or more the group of INCLUDE means that there is currently one or more
systems (in INCLUDE filter-mode) which desire to receive that source. systems (in INCLUDE filter-mode) that desire to receive that source.
If a source timer expires with a router filter-mode for the group of If a source timer expires with a router filter-mode for the group of
INCLUDE, the router concludes that traffic from this particular INCLUDE, the router concludes that traffic from this particular
source is no longer desired on the attached network, and deletes the source is no longer desired on the attached network and deletes the
associated source record.</t> associated source record.</t>
<t>Source timers are treated differently when a router filter-mode for
<t>Source timers are treated differently when a router filter-mode for a a
group is EXCLUDE. If a source record has a running timer with a group is EXCLUDE. If a source record has a running timer with a
router filter-mode for the group of EXCLUDE, it means that at least router filter-mode for the group of EXCLUDE, it means that at least
one system desires the source. It should therefore be forwarded by a one system desires the source. It should therefore be forwarded by a
router on the network. <xref target="rationale" /> describes the reasons for keeping router on the network. <xref target="rationale" format="default"/> describes the reasons for keeping
state for sources that have been requested to be forwarded while in state for sources that have been requested to be forwarded while in
EXCLUDE state.</t> EXCLUDE state.</t>
<t>If a source timer expires with a router filter-mode for the group o
<t>If a source timer expires with a router filter-mode for the group of f
EXCLUDE, the router informs the routing protocol that there is no EXCLUDE, the router informs the routing protocol that there is no
longer a receiver on the network interested in traffic from this longer a receiver on the network interested in traffic from this
source.</t> source.</t>
<t>When a router filter-mode for a group is EXCLUDE, source records ar
<t>When a router filter-mode for a group is EXCLUDE, source records are e
only deleted when the group timer expires. <xref target="ss_fwd" /> describe only deleted when the group timer expires. <xref target="ss_fwd" format="def
s the ault"/> describes the
actions that should be taken dependent upon the value of a source actions that should be taken dependent upon the value of a source
timer.</t> timer.</t>
</section> </section>
</section> </section>
<section anchor="ss_fwd" numbered="true" toc="default">
<section title="IGMPv3 Source-Specific Forwarding Rules" anchor="ss_fwd"> <name>IGMPv3 Source-Specific Forwarding Rules</name>
<t>When a multicast router receives a datagram from a source destined to
<t>When a multicast router receives a datagram from a source destined to
a particular group, a decision has to be made whether to forward the a particular group, a decision has to be made whether to forward the
datagram onto an attached network or not. The multicast routing datagram onto an attached network or not. The multicast routing
protocol in use is in charge of this decision, and should use the protocol in use is in charge of this decision and should use the
IGMPv3 information to ensure that all sources/groups desired on a IGMPv3 information to ensure that all sources/groups desired on a
subnetwork are forwarded to that subnetwork. IGMPv3 information does subnetwork are forwarded to that subnetwork. IGMPv3 information does
not override multicast routing information; for example, if the not override multicast routing information; for example, if the
IGMPv3 filter-mode group for G is EXCLUDE, a router may still forward IGMPv3 filter-mode group for G is EXCLUDE, a router may still forward
packets for excluded sources to a transit subnet.</t> packets for excluded sources to a transit subnet.</t>
<t>To summarize, <xref target="forwarding_suggestions" /> describes the
<t>To summarize, the following table describes the forwarding forwarding
suggestions made by IGMP to the routing protocol for traffic suggestions made by IGMP to the routing protocol for traffic
originating from a source destined to a group. It also summarizes originating from a source destined to a group. It also summarizes
the actions taken upon the expiration of a source timer based on the the actions taken upon the expiration of a source timer based on the
router filter-mode of the group.</t> router filter-mode of the group.</t>
<texttable> <table anchor="forwarding_suggestions" align="center">
<ttcol align="center">Group Filter-Mode</ttcol> <thead>
<ttcol align="center">Group Timer Value</ttcol> <tr>
<ttcol align="center">Action</ttcol> <th align="left">Group Filter-Mode</th>
<c>INCLUDE</c><c>TIMER > 0</c><c>Suggest to forward traffic from source</c <th align="left">Group Timer Value</th>
> <th align="left">Action</th>
</tr>
<c>INCLUDE</c><c>TIMER == 0</c><c>Suggest to stop forwarding traffic from </thead>
<tbody>
<tr>
<td align="left">INCLUDE</td>
<td align="left">TIMER &gt; 0</td>
<td align="left">Suggest to forward traffic from source.</td>
</tr>
<tr>
<td align="left">INCLUDE</td>
<td align="left">TIMER == 0</td>
<td align="left">Suggest to stop forwarding traffic from
source and remove source record. If there are no more source source and remove source record. If there are no more source
records for the group, delete group record.</c> records for the group, delete group record.</td>
</tr>
<c>INCLUDE</c><c>No Source Elements</c><c>Suggest to not forward source</c <tr>
> <td align="left">INCLUDE</td>
<td align="left">No Source Elements</td>
<c>EXCLUDE</c><c>TIMER > 0</c><c>Suggest to forward traffic from source</c <td align="left">Suggest to not forward source.</td>
> </tr>
<tr>
<c>EXCLUDE</c><c>TIMER == 0</c><c>Suggest to not forward traffic from sour <td align="left">EXCLUDE</td>
ce (DO NOT remove record)</c> <td align="left">TIMER &gt; 0</td>
<td align="left">Suggest to forward traffic from source.</td>
<c>EXCLUDE</c><c>No Source Elements</c><c>Suggest to forward traffic from </tr>
source</c> <tr>
</texttable> <td align="left">EXCLUDE</td>
</section> <td align="left">TIMER == 0</td>
<td align="left">Suggest to not forward traffic from source (DO NO
<section title="Action on Reception of Reports" anchor="rcv_rpts"> T remove record).</td>
</tr>
<t>SSM-aware routers SHOULD ignore records that contain multicast addresses <tr>
<td align="left">EXCLUDE</td>
<td align="left">No Source Elements</td>
<td align="left">Suggest to forward traffic from source.</td>
</tr>
</tbody>
</table>
</section>
<section anchor="rcv_rpts" numbered="true" toc="default">
<name>Action on Reception of Reports</name>
<t>SSM-aware routers <bcp14>SHOULD</bcp14> ignore records that contain m
ulticast addresses
in the SSM address range if the record type is MODE_IS_EXCLUDE or in the SSM address range if the record type is MODE_IS_EXCLUDE or
CHANGE_TO_EXCLUDE_MODE. SSM-aware routers SHOULD ignore IGMPv1/IGMPv2 CHANGE_TO_EXCLUDE_MODE. SSM-aware routers <bcp14>SHOULD</bcp14> ignore IGMPv1
Report and IGMPv2 DONE messages that contain multicast addresses in the SSM a /IGMPv2
ddress range, SHOULD NOT Report and IGMPv2 DONE messages that contain multicast addresses in the SSM a
use such Reports to establish IP forwarding state, and MAY log an error if it ddress range, <bcp14>SHOULD NOT</bcp14>
receives use such Reports to establish IP forwarding state, and <bcp14>MAY</bcp14> log
an error if it receives
such a message.</t> such a message.</t>
<section numbered="true" toc="default">
<section title="Reception of Current-State Records"> <name>Reception of Current-State Records</name>
<t>When receiving Current-State Records, a router updates both its gro
<t>When receiving Current-State Records, a router updates both its group up
and source timers. In some circumstances, the reception of a type of and source timers. In some circumstances, the reception of a type of
group record will cause the router filter-mode for that group to group record will cause the router filter-mode for that group to
change. The table below describes the actions, with respect to state change. <xref target="router_state_8"/> describes the actions, with respect to state
and timers that occur to a router's state upon reception of Current- and timers that occur to a router's state upon reception of Current-
State Records.</t> State Records.</t>
<t>The following notation is used to describe the updating of source
<t>The following notation is used to describe the updating of source
timers. The notation ( A, B ) will be used to represent the total timers. The notation ( A, B ) will be used to represent the total
number of sources for a particular group, where</t> number of sources for a particular group, where</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure>
<artwork><![CDATA[
A = set of source records whose source timers > 0 (Sources that at A = set of source records whose source timers > 0 (Sources that at
least one host has requested to be forwarded) least one host has requested to be forwarded)
B = set of source records whose source timers = 0 (Sources that IGMP B = set of source records whose source timers = 0 (Sources that IGMP
will suggest to the routing protocol not to forward) will suggest to the routing protocol not to forward)]]></artwork>
]]></artwork>
</figure>
<t>Note that there will only be two sets when a router's filter-mode for <t>Note that there will only be two sets when a router's filter-mode f or
a group is EXCLUDE. When a router's filter-mode for a group is a group is EXCLUDE. When a router's filter-mode for a group is
INCLUDE, a single set is used to describe the set of sources INCLUDE, a single set is used to describe the set of sources
requested to be forwarded (e.g., simply (A)).</t> requested to be forwarded (e.g., simply (A)).</t>
<t>In Tables <xref target="router_state_8" format="counter"/> and <xre
<t>In the following tables, abbreviations are used for several variables f target="router_state_9" format="counter"/>, abbreviations are used for several
(all of which are described in detail in <xref target="timers" />). T variables
he variable (all of which are described in detail in <xref target="timers" format=
"default"/>). The variable
GMI is an abbreviation for the Group Membership Interval, which is GMI is an abbreviation for the Group Membership Interval, which is
the time in which group memberships will time out. The variable LMQT the time in which group memberships will time out. The variable LMQT
is an abbreviation for the Last Member Query Time, which is the total is an abbreviation for the Last Member Query Time, which is the total
time spent after Last Member Query Count retransmissions. LMQT time spent after Last Member Query Count retransmissions. LMQT
represents the "leave latency", or the difference between the represents the "leave latency" or the difference between the
transmission of a membership change and the change in the information transmission of a membership change and the change in the information
given to the routing protocol.</t> given to the routing protocol.</t>
<t>Within the "Actions" section of the router state tables, we use the
<t>Within the "Actions" section of the router state tables, we use the
notation 'A=J', which means that the set A of source records should notation 'A=J', which means that the set A of source records should
have their source timers set to value J. 'Delete A' means that the have their source timers set to value J. 'Delete A' means that the
set A of source records should be deleted. 'Group Timer=J' means set A of source records should be deleted. 'Group Timer=J' means
that the Group Timer for the group should be set to value J.</t> that the Group Timer for the group should be set to value J.</t>
<figure> <table anchor="router_state_8" align="center">
<artwork><![CDATA[ <thead>
Router State Report Rec'd New Router State Actions <tr>
<th>Router State</th>
INCLUDE (A) IS_IN (B) INCLUDE (A+B) (B)=GMI <th>Report Rec'd</th>
<th>New Router State</th>
INCLUDE (A) IS_EX (B) EXCLUDE (A*B,B-A) (B-A)=0 <th>Actions</th>
Delete (A-B) </tr>
Group Timer=GMI </thead>
<tbody>
EXCLUDE (X,Y) IS_IN (A) EXCLUDE (X+A,Y-A) (A)=GMI <tr>
<td>INCLUDE (A)</td>
EXCLUDE (X,Y) IS_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=GMI <td>IS_IN (B)</td>
Delete (X-A) <td>INCLUDE (A+B)</td>
Delete (Y-A) <td>(B)=GMI</td>
Group Timer=GMI </tr>
]]></artwork> <tr>
</figure> <td>INCLUDE (A)</td>
</section> <td>IS_EX (B)</td>
<td>EXCLUDE (A*B,B-A)</td>
<section title="Reception of Filter-Mode-Change and Source-List-Change Record <td>(B-A)=0<br/>Delete (A-B)<br/>Group Timer=GMI</td>
s" anchor="slc_recs"> </tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>IS_IN (A)</td>
<td>EXCLUDE (X+A,Y-A)</td>
<td>(A)=GMI</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>IS_EX (A)</td>
<td>EXCLUDE (A-Y,Y*A)</td>
<td>(A-X-Y)=GMI<br/>Delete (X-A)<br/>Delete (Y-A)<br/>Group Timer=GMI</
td>
</tr>
</tbody>
</table>
<t>When a change in the global state of a group occurs in a system, the </section>
<section anchor="slc_recs" numbered="true" toc="default">
<name>Reception of Filter-Mode-Change and Source-List-Change Records</
name>
<t>When a change in the global state of a group occurs in a system, th
e
system sends either a Source-List-Change Record or a Filter-Mode- system sends either a Source-List-Change Record or a Filter-Mode-
Change Record for that group. As with Current-State Records, routers Change Record for that group. As with Current-State Records, routers
must act upon these records and possibly change their own state to must act upon these records and possibly change their own state to
reflect the new desired membership state of the network.</t> reflect the new desired membership state of the network.</t>
<t>Routers must query sources that are requested to be no longer
<t>Routers must query sources that are requested to be no longer
forwarded to a group. When a router queries or receives a query for forwarded to a group. When a router queries or receives a query for
a specific set of sources, it lowers its source timers for those a specific set of sources, it lowers its source timers for those
sources to a small interval of Last Member Query Time seconds. If sources to a small interval of Last Member Query Time seconds. If
group records are received in response to the queries which express group records are received in response to the queries which express
interest in receiving traffic from the queried sources, the interest in receiving traffic from the queried sources, the
corresponding timers are updated.</t> corresponding timers are updated.</t>
<t>Similarly, when a router queries a specific group, it lowers its
<t>Similarly, when a router queries a specific group, it lowers its
group timer for that group to a small interval of Last Member Query group timer for that group to a small interval of Last Member Query
Time seconds. If any group records expressing EXCLUDE mode interest Time seconds. If any group records expressing EXCLUDE mode interest
in the group are received within the interval, the group timer for in the group are received within the interval, the group timer for
the group is updated and the suggestion to the routing protocol to the group is updated and the suggestion to the routing protocol to
forward the group stands without any interruption.</t> forward the group stands without any interruption.</t>
<t>During a query period (i.e., Last Member Query Time seconds), the
<t>During a query period (i.e., Last Member Query Time seconds), the
IGMP component in the router continues to suggest to the routing IGMP component in the router continues to suggest to the routing
protocol that it forwards traffic from the groups or sources that it protocol that it forwards traffic from the groups or sources that it
is querying. It is not until after Last Member Query Time seconds is querying. It is not until after Last Member Query Time seconds
without receiving a record expressing interest in the queried group without receiving a record expressing interest in the queried group
or sources that the router may prune the group or sources from the or sources that the router may prune the group or sources from the
network.</t> network.</t>
<t> <xref target="router_state_9"/> describes the changes in group sta
<t>The following table describes the changes in group state and the te and the
action(s) taken when receiving either Filter-Mode-Change or Source- action(s) taken when receiving either Filter-Mode-Change or Source-List-Chang
List-Change Records. This table also describes the queries which are e
Records. This table also describes the queries that are
sent by the querier when a particular report is received.</t> sent by the querier when a particular report is received.</t>
<t>We use the following notation for describing the queries that are
<t>We use the following notation for describing the queries which are
sent. We use the notation 'Q(G)' to describe a Group-Specific Query sent. We use the notation 'Q(G)' to describe a Group-Specific Query
to G. We use the notation 'Q(G,A)' to describe a Group-and-Source to G. We use the notation 'Q(G,A)' to describe a Group-and-Source
Specific Query to G with source-list A. If source-list A is null as Specific Query to G with source-list A. If source-list A is null as
a result of the action (e.g., A*B) then no query is sent as a result a result of the action (e.g., A*B), then no query is sent as a result
of the operation.</t> of the operation.</t>
<t>In order to maintain protocol robustness, queries sent by actions i
<t>In order to maintain protocol robustness, queries sent by actions in n
the table below need to be transmitted [Last Member Query Count] <xref target="router_state_9"/> need to be transmitted [Last Member Query Cou
nt]
times, once every [Last Member Query Interval].</t> times, once every [Last Member Query Interval].</t>
<t>If while scheduling new queries there are already pending queries t
<t>If while scheduling new queries, there are already pending queries to o
be retransmitted for the same group, the new and pending queries have be retransmitted for the same group, the new and pending queries have
to be merged. In addition, received host reports for a group with to be merged. In addition, received host reports for a group with
pending queries may affect the contents of those queries. pending queries may affect the contents of those queries.
<xref target="ssqs" /> describes the process of building and maintaining the state of <xref target="ssqs" format="default"/> describes the process of building and maintaining the state of
pending queries.</t> pending queries.</t>
<figure> <table anchor="router_state_9" align="center">
<artwork><![CDATA[ <thead>
Router State Report Rec'd New Router State Actions <tr>
<th>Router State</th>
INCLUDE (A) ALLOW (B) INCLUDE (A+B) (B)=GMI <th>Report Rec'd</th>
<th>New Router State</th>
INCLUDE (A) BLOCK (B) INCLUDE (A) Send Q(G,A*B) <th>Actions</th>
</tr>
INCLUDE (A) TO_EX (B) EXCLUDE (A*B,B-A) (B-A)=0 </thead>
Delete (A-B) <tbody>
Send Q(G,A*B) <tr>
Group Timer=GMI <td>INCLUDE (A)</td>
<td>ALLOW (B)</td>
INCLUDE (A) TO_IN (B) INCLUDE (A+B) (B)=GMI <td>INCLUDE (A+B)</td>
Send Q(G,A-B) <td>(B)=GMI</td>
</tr>
EXCLUDE (X,Y) ALLOW (A) EXCLUDE (X+A,Y-A) (A)=GMI <tr>
<td>INCLUDE (A)</td>
EXCLUDE (X,Y) BLOCK (A) EXCLUDE (X+(A-Y),Y) (A-X-Y)=Group Timer <td>BLOCK (B)</td>
Send Q(G,A-Y) <td>INCLUDE (A)</td>
<td>Send Q(G,A*B)</td>
EXCLUDE (X,Y) TO_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=Group Timer </tr>
Delete (X-A) <tr>
Delete (Y-A) <td>INCLUDE (A)</td>
Send Q(G,A-Y) <td>TO_EX (B)</td>
Group Timer=GMI <td>EXCLUDE (A*B,B-A)</td>
<td>(B-A)=0<br/>Delete (A-B)<br/>Send Q(G,A*B)<br/>Group Timer=GMI</td>
EXCLUDE (X,Y) TO_IN (A) EXCLUDE (X+A,Y-A) (A)=GMI </tr>
Send Q(G,X-A) <tr>
Send Q(G) <td>INCLUDE (A)</td>
]]></artwork> <td>TO_IN (B)</td>
</figure> <td>INCLUDE (A+B)</td>
</section> <td>(B)=GMI<br/>Send Q(G,A-B)</td>
</section> </tr>
<tr>
<section title="Switching Router Filter-Modes" anchor="fltr_modes"> <td>EXCLUDE (X,Y)</td>
<td>ALLOW (A)</td>
<td>EXCLUDE (X+A,Y-A)</td>
<td>(A)=GMI</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>BLOCK (A)</td>
<td>EXCLUDE (X+(A-Y),Y)</td>
<td>(A-X-Y)=Group Timer<br/>Send Q(G,A-Y)</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>TO_EX (A)</td>
<td>EXCLUDE (A-Y,Y*A)</td>
<td>(A-X-Y)=Group Timer<br/>Delete (X-A)<br/>Delete (Y-A)<br/>Send Q(G,A
-Y)<br/>Group Timer=GMI</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>TO_IN (A)</td>
<td>EXCLUDE (X+A,Y-A)</td>
<td>(A)=GMI<br/>Send Q(G,X-A)<br/>Send Q(G)</td>
</tr>
</tbody>
</table>
<t>The group timer is used as a mechanism for transitioning the router </section>
</section>
<section anchor="fltr_modes" numbered="true" toc="default">
<name>Switching Router Filter-Modes</name>
<t>The group timer is used as a mechanism for transitioning the router
filter-mode from EXCLUDE to INCLUDE.</t> filter-mode from EXCLUDE to INCLUDE.</t>
<t>When a group timer expires with a router filter-mode of EXCLUDE, a
<t>When a group timer expires with a router filter-mode of EXCLUDE, a
router assumes that there are no systems with a filter-mode of router assumes that there are no systems with a filter-mode of
EXCLUDE present on the attached network. When a router's filter-mode EXCLUDE present on the attached network. When a router's filter-mode
for a group is EXCLUDE and the group timer expires, the router for a group is EXCLUDE and the group timer expires, the router
filter-mode for the group transitions to INCLUDE.</t> filter-mode for the group transitions to INCLUDE.</t>
<t>A router uses source records with running source timers as its state
<t>A router uses source records with running source timers as its state
for the switch to a filter-mode of INCLUDE. If there are any source for the switch to a filter-mode of INCLUDE. If there are any source
records with source timers greater than zero (i.e., requested to be records with source timers greater than zero (i.e., requested to be
forwarded), a router switches to filter-mode of INCLUDE using those forwarded), a router switches to filter-mode of INCLUDE using those
source records. Source records whose timers are zero (from the source records. Source records whose timers are zero (from the
previous EXCLUDE mode) are deleted.</t> previous EXCLUDE mode) are deleted.</t>
<t>For example, if a router's state for a group is EXCLUDE(X,Y) and the
<t>For example, if a router's state for a group is EXCLUDE(X,Y) and the
group timer expires for that group, the router switches to filter- group timer expires for that group, the router switches to filter-
mode of INCLUDE with state INCLUDE(X).</t> mode of INCLUDE with state INCLUDE(X).</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Action on Reception of Queries"> <name>Action on Reception of Queries</name>
<section title="Timer Updates"> <section numbered="true" toc="default">
<name>Timer Updates</name>
<t>When a router sends or receives a query with a clear Suppress <t>When a router sends or receives a query with a clear Suppress
Router-Side Processing flag, it must update its timers to reflect the Router-Side Processing flag, it must update its timers to reflect the
correct timeout values for the group or sources being queried. The correct timeout values for the group or sources being queried. <xref target="
following table describes the timer actions when sending or receiving timer_actions"/> describes the timer actions when sending or receiving
a Group-Specific or Group-and-Source Specific Query with the Suppress a Group-Specific or Group-and-Source Specific Query with the S flag not set.<
Router-Side Processing flag not set.</t> /t>
<texttable> <table anchor="timer_actions" align="center">
<ttcol align="center">Query</ttcol> <thead>
<ttcol align="center">Action</ttcol> <tr>
<c>Q(G,A)</c><c>Source Timer for sources in A are lowered to LMQT</c> <th align="left">Query</th>
<c>Q(G)</c><c>Group Timer is lowered to LMQT</c> <th align="left">Action</th>
</texttable> </tr>
</thead>
<t>When a router sends or receives a query with the Suppress Router-Side <tbody>
Processing flag set, it will not update its timers.</t> <tr>
</section> <td align="left">Q(G,A)</td>
<td align="left">Source Timer for sources in A are lowered to LM
<section title="Querier Election"> QT</td>
</tr>
<t>IGMPv3 elects a single querier per subnet using the same querier <tr>
<td align="left">Q(G)</td>
<td align="left">Group Timer is lowered to LMQT</td>
</tr>
</tbody>
</table>
<t>When a router sends or receives a query with the S flag set, it wil
l not update its timers.</t>
</section>
<section numbered="true" toc="default">
<name>Querier Election</name>
<t>IGMPv3 elects a single querier per subnet using the same querier
election mechanism as IGMPv2, namely by IP address. When a router election mechanism as IGMPv2, namely by IP address. When a router
receives a general query with a lower IP address, it sets the Other-Querier- receives a general query with a lower IP address, it sets the Other Querier P
Present timer to Other Querier Present Interval and ceases to send resent
timer to Other Querier Present Interval and ceases to send
general queries on the network if it was the previously elected querier. general queries on the network if it was the previously elected querier.
After its Other-Querier Present timer expires, it should begin After its Other-Querier Present timer expires, it should begin
sending General Queries.</t> sending General Queries.</t>
<t>If a router receives an older version general query, it <bcp14>MUST
<t>If a router receives an older version general query, it MUST use the oldes </bcp14> use the oldest
t
version of IGMP on the network. For a detailed description of version of IGMP on the network. For a detailed description of
compatibility issues between IGMP versions see <xref target="interop" compatibility issues between IGMP versions, see <xref target="interop"
/>.</t> format="default"/>.</t>
</section> </section>
<section anchor="ssqs" numbered="true" toc="default">
<section title="Building and Sending Specific Queries" anchor="ssqs"> <name>Building and Sending Specific Queries</name>
<section title="Building and Sending Group Specific Queries"> <section numbered="true" toc="default">
<name>Building and Sending Group-Specific Queries</name>
<t>When a table action "Send Q(G)" is encountered, then the group timer <t>When a table action "Send Q(G)" is encountered, the group timer
must be lowered to LMQT. The router must then immediately send a must be lowered to LMQT. The router must then immediately send a
group specific query as well as schedule [Last Member Query Count - group-specific query as well as schedule [Last Member Query Count -
1] query retransmissions to be sent every [Last Member Query 1] query retransmissions to be sent every [Last Member Query
Interval] over [Last Member Query Time].</t> Interval] over [Last Member Query Time].</t>
<t>When transmitting a group-specific query, if the group timer is
<t>When transmitting a group specific query, if the group timer is
larger than LMQT, the "Suppress Router-Side Processing" bit is set in larger than LMQT, the "Suppress Router-Side Processing" bit is set in
the query message.</t> the query message.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Building and Sending Group and Source Specific Queries"> <!-- [rfced] We see "Send Q(G,X-A)" not "Send Q(G,X)" in Table 9. Is
this variance okay or is an update needed?
<t>When a table action "Send Q(G,X)" is encountered by a querier in the Original:
table in <xref target="slc_recs" />, the following actions must be per When a table action "Send Q(G,X)" is encountered by a querier in the
formed for table in Section 6.4.2, the following actions must be performed for
each of the sources in X of group G, with source timer larger than each of the sources in X of group G, with source timer larger than
LMQT: LMQT:
<list style="symbols">
<t>Set number of retransmissions for each source to [Last Member Query
Count].</t>
<t>Lower source timer to LMQT.</t>
</list></t>
<t>The router must then immediately send a group and source specific Perhaps:
When a table action "Send Q(G,X-A)" is encountered by a querier in
Table 9 (Section 6.4.2), the following actions must be performed for
each of the sources in X of group G, with the source timer larger than
LMQT:
-->
<name>Building and Sending Group-and-Source-Specific Queries</name>
<t>When a table action "Send Q(G,X)" is encountered by a querier in
<xref target="router_state_9"/> (<xref target="slc_recs" format="default"/>), th
e following actions must be performed for each of the sources in X of group G, w
ith the source timer larger than
LMQT:
</t>
<ul spacing="normal">
<li>
<t>Set the number of retransmissions for each source to [Last Me
mber Query Count].</t>
</li>
<li>
<t>Lower the source timer to LMQT.</t>
</li>
</ul>
<t>The router must then immediately send a group and source specific
query as well as schedule [Last Member Query Count - 1] query query as well as schedule [Last Member Query Count - 1] query
retransmissions to be sent every [Last Member Query Interval] over retransmissions to be sent every [Last Member Query Interval] over
[Last Member Query Time]. The contents of these queries are [Last Member Query Time]. The contents of these queries are
calculated as follows.</t> calculated as follows.</t>
<t>When building a group and source specific query for group G, two
<t>When building a group and source specific query for a group G, two
separate query messages are sent for the group. The first one has separate query messages are sent for the group. The first one has
the "Suppress Router-Side Processing" bit set and contains all the the "Suppress Router-Side Processing" bit set and contains all the
sources with retransmission state and timers greater than LMQT. The sources with retransmission state and timers greater than LMQT. The
second has the "Suppress Router-Side Processing" bit clear and second has the "Suppress Router-Side Processing" bit clear and
contains all the sources with retransmission state and timers lower contains all the sources with retransmission state and timers lower
or equal to LMQT. If either of the two calculated messages does not or equal to LMQT. If either of the two calculated messages does not
contain any sources, then its transmission is suppressed.</t> contain any sources, then its transmission is suppressed.</t>
<t>Note: If a group-specific query is scheduled to be transmitted at
<t>Note: If a group specific query is scheduled to be transmitted at the the
same time as a group and source specific query for the same group, same time as a group and source specific query for the same group,
then transmission of the group and source specific message with the then transmission of the group and source specific message with the
"Suppress Router-Side Processing" bit set may be suppressed.</t> "Suppress Router-Side Processing" bit set may be suppressed.</t>
</section> </section>
</section> </section>
</section> </section>
</section> </section>
<section anchor="interop" numbered="true" toc="default">
<section title="Interoperation With Older Versions of IGMP" anchor="interop"> <name>Interoperation With Older Versions of IGMP</name>
<t>IGMP version 3 hosts and routers interoperate with hosts and routers
<t>IGMP version 3 hosts and routers interoperate with hosts and routers
that have not yet been upgraded to IGMPv3. This compatibility is that have not yet been upgraded to IGMPv3. This compatibility is
maintained by hosts and routers taking appropriate actions depending maintained by hosts and routers taking appropriate actions depending
on the versions of IGMP operating on hosts and routers within a on the versions of IGMP operating on hosts and routers within a
network.</t> network.</t>
<section numbered="true" toc="default">
<section title="Query Version Distinctions"> <name>Query Version Distinctions</name>
<t>The IGMP version of a Membership Query message is determined as
<t>The IGMP version of a Membership Query message is determined as
follows: follows:
<list style="empty"> </t>
<t>IGMPv1 Query: length = 8 octets AND Max Resp Code field is zero</t> <ul spacing="normal">
<t>IGMPv2 Query: length = 8 octets AND Max Resp Code field is non-zero <li>
</t> <t>IGMPv1 Query: length = 8 octets AND Max Resp Code field is zero</
<t>IGMPv3 Query: length >= 12 octets</t> t>
</list></t> </li>
<li>
<t>Query messages that do not match any of the above conditions (e.g., a <t>IGMPv2 Query: length = 8 octets AND Max Resp Code field is non-ze
Query of length 10 octets) MUST be silently ignored.</t> ro</t>
</section> </li>
<li>
<section title="Group Member Behavior"> <t>IGMPv3 Query: length &gt;= 12 octets</t>
<section title="In the Presence of Older Version Queriers"> </li>
</ul>
<t>In order to be compatible with older version routers, IGMPv3 hosts <t>Query messages that do not match any of the above conditions (e.g., a
MUST operate in version 1 and version 2 compatibility modes. IGMPv3 Query of length 10 octets) <bcp14>MUST</bcp14> be silently ignored.</t>
hosts MUST keep state per local interface regarding the compatibility </section>
mode of each attached network. A host's compatibility mode is <section numbered="true" toc="default">
determined from the Host Compatibility Mode variable which can be in <name>Group Member Behavior</name>
one of three states: IGMPv1, IGMPv2 or IGMPv3. This variable is <section numbered="true" toc="default">
<name>In the Presence of Older Version Queriers</name>
<t>In order to be compatible with older version routers, IGMPv3 hosts
<bcp14>MUST</bcp14> operate in version 1 and version 2 compatibility modes. I
GMPv3
hosts <bcp14>MUST</bcp14> keep state per local interface regarding the compat
ibility mode of each attached network. A host's compatibility mode is
determined from the Host Compatibility Mode variable, which can be in
one of three states: IGMPv1, IGMPv2, or IGMPv3. This variable is
kept per interface and is dependent on the version of General Queries kept per interface and is dependent on the version of General Queries
heard on that interface as well as the Older Version Querier Present heard on that interface as well as the Older Version Querier Present
timers for the interface.</t> timers for the interface.</t>
<t>In order to switch gracefully between versions of IGMP, hosts keep
<t>In order to switch gracefully between versions of IGMP, hosts keep
both an IGMPv1 Querier Present timer and an IGMPv2 Querier Present both an IGMPv1 Querier Present timer and an IGMPv2 Querier Present
timer per interface. IGMPv1 Querier Present is set to Older Version timer per interface. IGMPv1 Querier Present is set to Older Version
Querier Present Timeout seconds whenever an IGMPv1 Membership Query Querier Present Timeout seconds whenever an IGMPv1 Membership Query
is received. IGMPv2 Querier Present is set to Older Version Querier is received. IGMPv2 Querier Present is set to Older Version Querier
Present Timeout seconds whenever an IGMPv2 General Query is received.< /t> Present Timeout seconds whenever an IGMPv2 General Query is received.< /t>
<t>The Host Compatibility Mode of an interface changes whenever an old
<t>The Host Compatibility Mode of an interface changes whenever an older er
version query (than the current compatibility mode) is heard or when version query (than the current compatibility mode) is heard or when
certain timer conditions occur. When the IGMPv1 Querier Present certain timer conditions occur. When the IGMPv1 Querier Present
timer expires, a host switches to Host Compatibility mode of IGMPv2 timer expires, a host switches to Host Compatibility Mode of IGMPv2
if it has a running IGMPv2 Querier Present timer. If it does not if it has a running IGMPv2 Querier Present timer. If it does not
have a running IGMPv2 Querier Present timer then it switches to Host have a running IGMPv2 Querier Present timer, then it switches to Host
Compatibility of IGMPv3. When the IGMPv2 Querier Present timer Compatibility of IGMPv3. When the IGMPv2 Querier Present timer
expires, a host switches to Host Compatibility mode of IGMPv3.</t> expires, a host switches to Host Compatibility Mode of IGMPv3.</t>
<t>The Host Compatibility Mode variable is based on whether an older
<t>The Host Compatibility Mode variable is based on whether an older
version General query was heard in the last Older Version Querier version General query was heard in the last Older Version Querier
Present Timeout seconds. The Host Compatibility mode variable value MUST NOT Present Timeout seconds. The Host Compatibility Mode variable value <bcp14>MU ST NOT</bcp14>
be changed by an older version group-specific query. be changed by an older version group-specific query.
The Host Compatibility Mode is set depending on the following:</t> The Host Compatibility Mode is set depending on the following:</t>
<texttable> <table align="center">
<ttcol align="center">Host Compatibility Mode</ttcol> <thead>
<ttcol align="center">Timer State</ttcol> <tr>
<c>IGMPv3 (default)</c><c>IGMPv2 Querier Present not running and IGMPv1 Qu <th align="left">Host Compatibility Mode</th>
erier Present not running</c> <th align="left">Timer State</th>
<c>IGMPv2</c><c>IGMPv2 Querier Present running and IGMPv1 Querier Present </tr>
not running</c> </thead>
<c>IGMPv1</c><c>IGMPv1 Querier Present running</c> <tbody>
</texttable> <tr>
<td align="left">IGMPv3 (default)</td>
<t>If a host receives a query which causes its Querier Present timers to <td align="left">IGMPv2 Querier Present not running and IGMPv1 Q
uerier Present not running</td>
</tr>
<tr>
<td align="left">IGMPv2</td>
<td align="left">IGMPv2 Querier Present running and IGMPv1 Queri
er Present not running</td>
</tr>
<tr>
<td align="left">IGMPv1</td>
<td align="left">IGMPv1 Querier Present running</td>
</tr>
</tbody>
</table>
<t>If a host receives a query that causes its Querier Present timers t
o
be updated and correspondingly its compatibility mode, it should be updated and correspondingly its compatibility mode, it should
switch compatibility modes immediately.</t> switch compatibility modes immediately.</t>
<t>When Host Compatibility Mode is IGMPv3, a host acts using the IGMPv
<t>When Host Compatibility Mode is IGMPv3, a host acts using the IGMPv3 3
protocol on that interface. When Host Compatibility Mode is IGMPv2, protocol on that interface. When Host Compatibility Mode is IGMPv2,
a host acts in IGMPv2 compatibility mode, using only the IGMPv2 a host acts in IGMPv2 compatibility mode, using only the IGMPv2
protocol, on that interface. When Host Compatibility Mode is IGMPv1, protocol, on that interface. When Host Compatibility Mode is IGMPv1,
a host acts in IGMPv1 compatibility mode, using only the IGMPv1 a host acts in IGMPv1 compatibility mode, using only the IGMPv1
protocol on that interface.</t> protocol on that interface.</t>
<t>An IGMPv1 router will send General Queries with the Max Resp Code s
<t>An IGMPv1 router will send General Queries with the Max Resp Code set et
to 0. This MUST be interpreted as a value of 100 (10 seconds).</t> to 0. This <bcp14>MUST</bcp14> be interpreted as a value of 100 (10 seconds)
.</t>
<t>An IGMPv2 router will send General Queries with the Max Resp Code set <t>An IGMPv2 router will send General Queries with the Max Resp Code s
et
to the desired Max Resp Time, i.e., the full range of this field is to the desired Max Resp Time, i.e., the full range of this field is
linear and the exponential algorithm described in <xref target="max_re sp_code" /> is linear and the exponential algorithm described in <xref target="max_re sp_code" format="default"/> is
not used.</t> not used.</t>
<t>Whenever a host changes its compatibility mode, it cancels all its
<t>Whenever a host changes its compatibility mode, it cancels all its
pending response and retransmission timers.</t> pending response and retransmission timers.</t>
<t>An SSM-aware host that receives an IGMPv1 Query, an IGMPv2 General
<t>An SSM-aware host that receives an IGMPv1 Query, an IGMPv2 General Query, Query,
or an IGMPv2 Group Specific Query for a multicast address in the SSM address range or an IGMPv2 Group Specific Query for a multicast address in the SSM address range
SHOULD log an error. It is RECOMMENDED that implementions provide a configura <bcp14>SHOULD</bcp14> log an error. It is <bcp14>RECOMMENDED</bcp14> that imp
tion option lementations provide a configuration option
to disable use of Host Compatibility Mode to allow networks to operate only i to disable use of the Host Compatibility Mode to allow networks to operate on
n SSM mode. ly in SSM mode.
This configuration option SHOULD be disabled by default.</t> This configuration option <bcp14>SHOULD</bcp14> be disabled by default.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="In the Presence of Older Version Group Members"> <name>In the Presence of Older Version Group Members</name>
<t>An IGMPv3 host may be placed on a network where there are hosts tha
<t>An IGMPv3 host may be placed on a network where there are hosts that t
have not yet been upgraded to IGMPv3. A host MAY allow its IGMPv3 have not yet been upgraded to IGMPv3. A host <bcp14>MAY</bcp14> allow its IG
MPv3
Membership Record to be suppressed by either a Version 1 Membership Membership Record to be suppressed by either a Version 1 Membership
Report, or a Version 2 Membership Report. SSM-aware hosts MUST NOT allow Report, or a Version 2 Membership Report. SSM-aware hosts <bcp14>MUST NOT</bc p14> allow
its IGMPv3 Membership Record to be suppressed.</t> its IGMPv3 Membership Record to be suppressed.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Router Behavior"> <name>Multicast Router Behavior</name>
<section title="In the Presence of Older Version Queriers"> <section numbered="true" toc="default">
<name>In the Presence of Older Version Queriers</name>
<t>IGMPv3 routers may be placed on a network where at least one router <t>IGMPv3 routers may be placed on a network where at least one router
on the network has not yet been upgraded to IGMPv3. The following on the network has not yet been upgraded to IGMPv3. The following
requirements apply: requirements apply:
<list style="symbols"> </t>
<ul spacing="normal">
<t>If any older versions of IGMP are present on routers, the querier <li>
MUST use the lowest version of IGMP present on the network. This <t>If any older versions of IGMP are present on routers, the queri
er
<bcp14>MUST</bcp14> use the lowest version of IGMP present on the network.
This
must be administratively assured; routers that desire to be must be administratively assured; routers that desire to be
compatible with IGMPv1 and IGMPv2 MUST have a configuration option compatible with IGMPv1 and IGMPv2 <bcp14>MUST</bcp14> have a configuration option
to act in IGMPv1 or IGMPv2 compatibility modes. When in IGMPv1 to act in IGMPv1 or IGMPv2 compatibility modes. When in IGMPv1
mode, routers MUST send Periodic Queries with a Max Resp Code of 0 mode, routers <bcp14>MUST</bcp14> send Periodic Queries with a Max Resp Cod
and truncated at the Group Address field (i.e., 8 bytes long), and e of 0
MUST ignore Leave Group messages. They SHOULD also warn about and truncated at the Group Address field (i.e., 8 bytes long) and
receiving an IGMPv2 or IGMPv3 query, although such warnings MUST be <bcp14>MUST</bcp14> ignore Leave Group messages. They <bcp14>SHOULD</bcp14
rate-limited. When in IGMPv2 mode, routers MUST send Periodic > also warn about
Queries truncated at the Group Address field (i.e., 8 bytes long), receiving an IGMPv2 or IGMPv3 query, although such warnings <bcp14>MUST</bc
and SHOULD also warn about receiving an IGMPv3 query (such warnings p14> be
MUST be rate-limited). They also MUST fill in the Max Resp Time in rate-limited. When in IGMPv2 mode, routers <bcp14>MUST</bcp14> send Period
ic
Queries truncated at the Group Address field (i.e., 8 bytes long)
and <bcp14>SHOULD</bcp14> also warn about receiving an IGMPv3 query (such w
arnings
<bcp14>MUST</bcp14> be rate-limited). They also <bcp14>MUST</bcp14> fill i
n the Max Resp Time in
the Max Resp Code field, i.e., the exponential algorithm described the Max Resp Code field, i.e., the exponential algorithm described
in <xref target="max_resp_code" /> is not used.</t> in <xref target="max_resp_code" format="default"/> is not used.</t>
</li>
<t>If a router is not explicitly configured to use IGMPv1 or IGMPv2 <li>
and hears an IGMPv1 Query or IGMPv2 General Query, it SHOULD log a <t>If a router is not explicitly configured to use IGMPv1 or IGMPv
warning. These warnings MUST be rate-limited.</t> 2
<t>It is RECOMMENDED that implementions provide a configuration option and hears an IGMPv1 Query or IGMPv2 General Query, it <bcp14>SHOULD</bcp14>
log a
warning. These warnings <bcp14>MUST</bcp14> be rate-limited.</t>
</li>
<li>
<t>It is <bcp14>RECOMMENDED</bcp14> that implementations provide a
configuration option
to disable use of compatibility mode to allow networks to operate only to disable use of compatibility mode to allow networks to operate only
in SSM mode. This configuration option SHOULD be disabled by default.</t> in SSM mode. This configuration option <bcp14>SHOULD</bcp14> be disabled by d
</list></t> efault.</t>
</section> </li>
</ul>
<section title="In the Presence of Older Version Group Members"> </section>
<section numbered="true" toc="default">
<t>IGMPv3 routers may be placed on a network where there are hosts that <name>In the Presence of Older Version Group Members</name>
<t>IGMPv3 routers may be placed on a network where there are hosts tha
t
have not yet been upgraded to IGMPv3. In order to be compatible with have not yet been upgraded to IGMPv3. In order to be compatible with
older version hosts, IGMPv3 routers MUST operate in version 1 and older version hosts, IGMPv3 routers <bcp14>MUST</bcp14> operate in version 1 and
version 2 compatibility modes. IGMPv3 routers keep a compatibility version 2 compatibility modes. IGMPv3 routers keep a compatibility
mode per group record. A group's compatibility mode is determined mode per group record. A group's compatibility mode is determined
from the Group Compatibility Mode variable which can be in one of from the Group Compatibility Mode variable, which can be in one of
three states: IGMPv1, IGMPv2 or IGMPv3. This variable is kept per three states: IGMPv1, IGMPv2, or IGMPv3. This variable is kept per
group record and is dependent on the version of Membership Reports group record and is dependent on the version of Membership Reports
heard for that group as well as the Older Version Host Present timer heard for that group as well as the Older Version Host Present timer
for the group.</t> for the group.</t>
<t>In order to switch gracefully between versions of IGMP, routers kee
<t>In order to switch gracefully between versions of IGMP, routers keep p
an IGMPv1 Host Present timer and an IGMPv2 Host Present timer per an IGMPv1 Host Present timer and an IGMPv2 Host Present timer per
group record. The IGMPv1 Host Present timer is set to Older Version group record. The IGMPv1 Host Present timer is set to Older Version
Host Present Timeout seconds whenever an IGMPv1 Membership Report is Host Present Timeout seconds whenever an IGMPv1 Membership Report is
received. The IGMPv2 Host Present timer is set to Older Version Host received. The IGMPv2 Host Present timer is set to Older Version Host
Present Timeout seconds whenever an IGMPv2 Membership Report is Present Timeout seconds whenever an IGMPv2 Membership Report is
received.</t> received.</t>
<t>The Group Compatibility Mode of a group record changes whenever an
<t>The Group Compatibility Mode of a group record changes whenever an
older version report (than the current compatibility mode) is heard older version report (than the current compatibility mode) is heard
or when certain timer conditions occur. When the IGMPv1 Host Present or when certain timer conditions occur. When the IGMPv1 Host Present
timer expires, a router switches to Group Compatibility mode of timer expires, a router switches to Group Compatibility Mode of
IGMPv2 if it has a running IGMPv2 Host Present timer. If it does not IGMPv2 if it has a running IGMPv2 Host Present timer. If it does not
have a running IGMPv2 Host Present timer then it switches to Group have a running IGMPv2 Host Present timer, then it switches to Group
Compatibility of IGMPv3. When the IGMPv2 Host Present timer expires Compatibility Mode of IGMPv3. When the IGMPv2 Host Present timer expires
and the IGMPv1 Host Present timer is not running, a router switches and the IGMPv1 Host Present timer is not running, a router switches
to Group Compatibility mode of IGMPv3. Note that when a group to Group Compatibility Mode of IGMPv3. Note that when a group
switches back to IGMPv3 mode, it takes some time to regain source- switches back to IGMPv3 mode, it takes some time to regain source-
specific state information. Source-specific information will be specific state information. Source-specific information will be
learned during the next General Query, but sources that should be learned during the next General Query, but sources that should be
blocked will not be blocked until [Group Membership Interval] after blocked will not be blocked until [Group Membership Interval] after
that.</t> that.</t>
<t>The Group Compatibility Mode variable is based on whether an older
<t>The Group Compatibility Mode variable is based on whether an older
version report was heard in the last Older Version Host Present version report was heard in the last Older Version Host Present
Timeout seconds. The Group Compatibility Mode is set depending on Timeout seconds. The Group Compatibility Mode is set depending on
the following:</t> the following:</t>
<texttable> <table align="center">
<ttcol align="center">Group Compatibility Mode</ttcol> <thead>
<ttcol align="center">Timer State</ttcol> <tr>
<c>IGMPv3 (default)</c><c>IGMPv2 Host Present not running and IGMPv1 Host <th align="left">Group Compatibility Mode</th>
Present not running</c> <th align="left">Timer State</th>
<c>IGMPv2</c><c>IGMPv2 Host Present running and IGMPv1 Host Present not ru </tr>
nning</c> </thead>
<c>IGMPv1</c><c>IGMPv1 Host Present running</c> <tbody>
</texttable> <tr>
<td align="left">IGMPv3 (default)</td>
<t>If a router receives a report which causes its older Host Present <td align="left">IGMPv2 Host Present not running and IGMPv1 Host
Present not running</td>
</tr>
<tr>
<td align="left">IGMPv2</td>
<td align="left">IGMPv2 Host Present running and IGMPv1 Host Pre
sent not running</td>
</tr>
<tr>
<td align="left">IGMPv1</td>
<td align="left">IGMPv1 Host Present running</td>
</tr>
</tbody>
</table>
<t>If a router receives a report that causes its older Host Present
timers to be updated and correspondingly its compatibility mode, it timers to be updated and correspondingly its compatibility mode, it
SHOULD switch compatibility modes immediately.</t> <bcp14>SHOULD</bcp14> switch compatibility modes immediately.</t>
<t>When Group Compatibility Mode is IGMPv3, a router acts using the
<t>When Group Compatibility Mode is IGMPv3, a router acts using the
IGMPv3 protocol for that group.</t> IGMPv3 protocol for that group.</t>
<t>When Group Compatibility Mode is IGMPv2, a router internally
<t>When Group Compatibility Mode is IGMPv2, a router internally
translates the following IGMPv2 messages for that group to their translates the following IGMPv2 messages for that group to their
IGMPv3 equivalents:</t> IGMPv3 equivalents:</t>
<texttable> <table align="center">
<ttcol align="center">IGMPv2 Message</ttcol> <thead>
<ttcol align="center">IGMPv3 Equivalent</ttcol> <tr>
<c>Report</c><c>IS_EX( {} )</c> <th align="left">IGMPv2 Message</th>
<c>Leave</c><c>TO_IN( {} )</c> <th align="left">IGMPv3 Equivalent</th>
</texttable> </tr>
</thead>
<t>IGMPv3 BLOCK messages are ignored, as are source-lists in TO_EX() <tbody>
<tr>
<td align="left">Report</td>
<td align="left">IS_EX( {} )</td>
</tr>
<tr>
<td align="left">Leave</td>
<td align="left">TO_IN( {} )</td>
</tr>
</tbody>
</table>
<t>IGMPv3 BLOCK messages are ignored, as are source-lists in TO_EX()
messages (i.e., any TO_EX() message is treated as TO_EX( {} )).</t> messages (i.e., any TO_EX() message is treated as TO_EX( {} )).</t>
<t>When Group Compatibility Mode is IGMPv1, a router internally
<t>When Group Compatibility Mode is IGMPv1, a router internally
translates the following IGMPv1 and IGMPv2 messages for that group to translates the following IGMPv1 and IGMPv2 messages for that group to
their IGMPv3 equivalents:</t> their IGMPv3 equivalents:</t>
<texttable> <table align="center">
<ttcol align="center">IGMPv2 Message</ttcol> <thead>
<ttcol align="center">IGMPv3 Equivalent</ttcol> <tr>
<c>v1 Report</c><c>IS_EX( {} )</c> <th align="left">IGMPv2 Message</th>
<c>v2 Report</c><c>IS_EX( {} )</c> <th align="left">IGMPv3 Equivalent</th>
</texttable> </tr>
</thead>
<t>In addition to ignoring IGMPv3 BLOCK messages and source-lists in <tbody>
<tr>
<td align="left">v1 Report</td>
<td align="left">IS_EX( {} )</td>
</tr>
<tr>
<td align="left">v2 Report</td>
<td align="left">IS_EX( {} )</td>
</tr>
</tbody>
</table>
<t>In addition to ignoring IGMPv3 BLOCK messages and source-lists in
TO_EX() messages as in IGMPv2 Group Compatibility Mode, IGMPv2 Leave TO_EX() messages as in IGMPv2 Group Compatibility Mode, IGMPv2 Leave
messages and IGMPv3 TO_IN() messages are also ignored.</t> messages and IGMPv3 TO_IN() messages are also ignored.</t>
</section> </section>
</section> </section>
</section> </section>
<section anchor="timers" numbered="true" toc="default">
<name>List of Timers, Counters, and Their Default Values</name>
<section title="List of Timers, Counters and Their Default Values" anchor="ti <!--[rfced] What does "these" refer to in this sentence? Can the text
mers"> be rephrased for clarity as shown below?
<t>Most of these timers are configurable. If non-default settings are Original:
used, they MUST be consistent among all systems on a single link. 8. List of Timers, Counters and Their Default Values
Note that parentheses are used to group expressions to make the
algebra clear.</t>
<section title="Robustness Variable" anchor="robust"> Most of these timers are configurable.
<t>The Robustness Variable allows tuning for the expected packet loss on Perhaps:
a network. If a network is expected to be lossy, the Robustness 8. List of Timers, Counters, and Their Default Values
Variable may be increased. IGMP is robust to (Robustness Variable -
1) packet losses. The Robustness Variable MUST NOT be zero, and
SHOULD NOT be one. Default: 2</t>
</section> Most timers and counters are configurable.
<section title="Query Interval" anchor="qry_int"> -->
<t>The Query Interval is the interval between General Queries sent by <t>Most of these timers are configurable. If non-default settings are
used, they <bcp14>MUST</bcp14> be consistent among all systems on a single li
nk.
Note that parentheses are used to group expressions to make the
algebra clear.</t>
<section anchor="robust" numbered="true" toc="default">
<name>Robustness Variable</name>
<t>The Robustness Variable allows tuning for the expected packet loss on
a network. If a network is expected to be lossy, the Robustness
Variable may be increased. IGMP is robust to (Robustness Variable -
1) packet losses. The Robustness Variable <bcp14>MUST NOT</bcp14> be zero an
d
<bcp14>SHOULD NOT</bcp14> be one. Default: 2.</t>
</section>
<section anchor="qry_int" numbered="true" toc="default">
<name>Query Interval</name>
<t>The Query Interval is the interval between General Queries sent by
the Querier. Default: 125 seconds.</t> the Querier. Default: 125 seconds.</t>
<t>By varying the [Query Interval], an administrator may tune the number
<t>By varying the [Query Interval], an administrator may tune the number
of IGMP messages on the network; larger values cause IGMP Queries to of IGMP messages on the network; larger values cause IGMP Queries to
be sent less often.</t> be sent less often.</t>
</section>
<section numbered="true" toc="default">
<name>Query Response Interval</name>
</section> <!--[rfced] We updated this text to be a complete sentence. Please let
<section title="Query Response Interval"> us know if it is not correct.
<t>The Max Response Time used to calculate the Max Resp Code inserted Original:
into the periodic General Queries. Default: 100 (10 seconds)</t> 8.3. Query Response Interval
<t>By varying the [Query Response Interval], an administrator may tune The Max Response Time used to calculate the Max Resp Code inserted
into the periodic General Queries.
Current:
8.3. Query Response Interval
The Query Response Interval uses the Max Response Time to calculate
the Max Resp Code that is inserted into the periodic General Queries.
-->
<t>The Query Response Interval uses the Max Response Time to calculate t
he Max Resp Code that is inserted into the periodic General Queries. Default: 1
00 (10 seconds).</t>
<t>By varying the [Query Response Interval], an administrator may tune
the burstiness of IGMP messages on the network; larger values make the burstiness of IGMP messages on the network; larger values make
the traffic less bursty, as host responses are spread out over a the traffic less bursty, as host responses are spread out over a
larger interval. The number of seconds represented by the [Query larger interval. The number of seconds represented by the [Query
Response Interval] must be less than the [Query Interval].</t> Response Interval] must be less than the [Query Interval].</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Group Membership Interval"> <name>Group Membership Interval</name>
<t>The Group Membership Interval is the amount of time that must pass
<t>The Group Membership Interval is the amount of time that must pass
before a multicast router decides there are no more members of a before a multicast router decides there are no more members of a
group or a particular source on a network.</t> group or a particular source on a network.</t>
<t>This value <bcp14>MUST</bcp14> be ((the Robustness Variable) times (t
<t>This value MUST be ((the Robustness Variable) times (the Query he Query
Interval)) plus (2 * Query Response Interval).</t> Interval)) plus (2 * Query Response Interval).</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Other Querier Present Interval"> <name>Other Querier Present Interval</name>
<t>The Other Querier Present Interval is the length of time that must
<t>The Other Querier Present Interval is the length of time that must
pass before a multicast router decides that there is no longer pass before a multicast router decides that there is no longer
another multicast router which should be the querier. This value another multicast router that should be the querier. This value
MUST be ((the Robustness Variable) times (the Query Interval)) plus <bcp14>MUST</bcp14> be ((the Robustness Variable) times (the Query Interval))
plus
(one half of one Query Response Interval).</t> (one half of one Query Response Interval).</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Startup Query Interval"> <name>Startup Query Interval</name>
<t>The Startup Query Interval is the interval between General Queries
<t>The Startup Query Interval is the interval between General Queries
sent by a Querier on startup. Default: 1/4 the Query Interval.</t> sent by a Querier on startup. Default: 1/4 the Query Interval.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Startup Query Count"> <name>Startup Query Count</name>
<t>The Startup Query Count is the number of Queries sent out on startup,
<t>The Startup Query Count is the number of Queries sent out on startup, separated by the Startup Query Interval. Default: The Robustness
separated by the Startup Query Interval. Default: the Robustness
Variable.</t> Variable.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Last Member Query Interval"> <name>Last Member Query Interval</name>
<t>The Last Member Query Interval (LMQI) is the Max Response Time used t
<t>The Last Member Query Interval is the Max Response Time used to o
calculate the Max Resp Code inserted into Group-Specific Queries sent calculate the Max Resp Code that is inserted into Group-Specific Queries sent
in response to Leave Group messages. It is also the Max Response in response to Leave Group messages. It is also the Max Response
Time used in calculating the Max Resp Code for Group-and-Source- Time used in calculating the Max Resp Code for Group-and-Source-Specific
Specific Query messages. Default: 10 (1 second)</t> Query messages. Default: 10 (1 second).</t>
<t>Note that for values of LMQI greater than 12.8 seconds, a limited set <t>Note that for values of LMQI greater than 12.8 seconds, a limited set
of values can be represented, corresponding to sequential values of of values can be represented, corresponding to sequential values of
Max Resp Code. When converting a configured time to a Max Resp Code Max Resp Code. When converting a configured time to a Max Resp Code
value, it is recommended to use the exact value if possible, or the value, it is recommended to use the exact value, if possible, or the
next lower value if the requested value is not exactly representable.</t> next lower value if the requested value is not exactly representable.</t>
<t>This value may be tuned to modify the "leave latency" of the network.
<t>This value may be tuned to modify the "leave latency" of the network.
A reduced value results in reduced time to detect the loss of the A reduced value results in reduced time to detect the loss of the
last member of a group or source.</t> last member of a group or source.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Last Member Query Count"> <name>Last Member Query Count</name>
<t>The Last Member Query Count is the number of Group-Specific Queries
<t>The Last Member Query Count is the number of Group-Specific Queries
sent before the router assumes there are no local members. The Last sent before the router assumes there are no local members. The Last
Member Query Count is also the number of Group-and-Source-Specific Member Query Count is also the number of Group-and-Source-Specific
Queries sent before the router assumes there are no listeners for a Queries sent before the router assumes there are no listeners for a
particular source. Default: the Robustness Variable.</t> particular source. Default: The Robustness Variable.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Last Member Query Time"> <name>Last Member Query Time</name>
<t>The Last Member Query Time is the time value represented by the Last
<t>The Last Member Query Time is the time value represented by the Last
Member Query Interval, multiplied by the Last Member Query Count. It Member Query Interval, multiplied by the Last Member Query Count. It
is not a tunable value, but may be tuned by changing its components.</t> is not a tunable value, but it may be tuned by changing its components.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Unsolicited Report Interval"> <name>Unsolicited Report Interval</name>
<t>The Unsolicited Report Interval is the time between repetitions of a
<t>The Unsolicited Report Interval is the time between repetitions of a
host's initial report of membership in a group. Default: 1 second.</t> host's initial report of membership in a group. Default: 1 second.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Older Version Querier Present Interval"> <name>Older Version Querier Present Interval</name>
<t>The Older Version Querier Present Interval is the timeout for transitionin <t>The Older Version Querier Present Interval is the timeout for transit
g ioning
a host back to IGMPv3 mode once an older version query is heard. a host back to IGMPv3 mode once an older version query is heard.
When an older version query is received, hosts set their Older When an older version query is received, hosts set their Older
Version Querier Present Timer to Older Version Querier Present Interval.</t> Version Querier Present Timer to Older Version Querier Present Interval.</t>
<t>It is <bcp14>RECOMMENDED</bcp14> to use the default values for calcul
<t>It is RECOMMENDED to use the default values for calculating the interval v ating the interval value
alue
as hosts do not know the values configured on the querying routers. as hosts do not know the values configured on the querying routers.
This value SHOULD be [Robustness Variable] times [Query This value <bcp14>SHOULD</bcp14> be [Robustness Variable] times [Query
Interval] plus (10 times the Max Resp Time in the last received query message ).</t> Interval] plus (10 times the Max Resp Time in the last received query message ).</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Older Host Present Interval"> <name>Older Host Present Interval</name>
<t>The Older Host Present Interval is the timeout for transitioning a
<t>The Older Host Present Interval is the time-out for transitioning a
group back to IGMPv3 mode once an older version report is sent for group back to IGMPv3 mode once an older version report is sent for
that group. When an older version report is received, routers set that group. When an older version report is received, routers set
their Older Host Present Timer to Older Host Present Interval.</t> their Older Host Present Timer to Older Host Present Interval.</t>
<t>This value <bcp14>MUST</bcp14> be ((the Robustness Variable) times (t
<t>This value MUST be ((the Robustness Variable) times (the Query he Query
Interval)) plus (one Query Response Interval).</t> Interval)) plus (one Query Response Interval).</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Configuring Timers"> <name>Configuring Timers</name>
<t>This section is meant to provide advice to network administrators on
<t>This section is meant to provide advice to network administrators on
how to tune these settings to their network. Ambitious router how to tune these settings to their network. Ambitious router
implementations might tune these settings dynamically based upon implementations might tune these settings dynamically based upon
changing characteristics of the network.</t> changing characteristics of the network.</t>
<section numbered="true" toc="default">
<section title="Robustness Variable"> <name>Robustness Variable</name>
<t>The Robustness Variable tunes IGMP to expected losses on a link.
<t>The Robustness Variable tunes IGMP to expected losses on a link.
IGMPv3 is robust to (Robustness Variable - 1) packet losses, e.g., if IGMPv3 is robust to (Robustness Variable - 1) packet losses, e.g., if
the Robustness Variable is set to the default value of 2, IGMPv3 is the Robustness Variable is set to the default value of 2, IGMPv3 is
robust to a single packet loss but may operate imperfectly if more robust to a single packet loss but may operate imperfectly if more
losses occur. On lossy subnetworks, the Robustness Variable should losses occur. On lossy subnetworks, the Robustness Variable should
be increased to allow for the expected level of packet loss. However, be increased to allow for the expected level of packet loss. However,
increasing the Robustness Variable increases the leave latency of the increasing the Robustness Variable increases the leave latency of the
subnetwork. (The leave latency is the time between when the last subnetwork. (The leave latency is the time between when the last
member stops listening to a source or group and when the traffic member stops listening to a source or group and when the traffic
stops flowing.)</t> stops flowing.)</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Query Interval"> <name>Query Interval</name>
<t>The overall level of periodic IGMP traffic is inversely proportiona
<t>The overall level of periodic IGMP traffic is inversely proportional l
to the Query Interval. A longer Query Interval results in a lower to the Query Interval. A longer Query Interval results in a lower
overall level of IGMP traffic. The Query Interval MUST be equal to overall level of IGMP traffic. The Query Interval <bcp14>MUST</bcp14> be equ al to
or longer than the Max Response Time inserted in General Query or longer than the Max Response Time inserted in General Query
messages.</t> messages.</t>
</section>
</section> <section numbered="true" toc="default">
<section title="Max Response Time"> <name>Max Response Time</name>
<t>The burstiness of IGMP traffic is inversely proportional to the Max
<t>The burstiness of IGMP traffic is inversely proportional to the Max
Response Time. A longer Max Response Time will spread Report Response Time. A longer Max Response Time will spread Report
messages over a longer interval. However, a longer Max Response Time messages over a longer interval. However, a longer Max Response Time
in Group-Specific and Source-and-Group-Specific Queries extends the in Group-Specific and Source-and-Group-Specific Queries extends the
leave latency. (The leave latency is the time between when the last leave latency. (The leave latency is the time between when the last
member stops listening to a source or group and when the traffic member stops listening to a source or group and when the traffic
stops flowing.) The expected rate of Report messages can be stops flowing.) The expected rate of Report messages can be
calculated by dividing the expected number of Reporters by the Max calculated by dividing the expected number of Reporters by the Max
Response Time. The Max Response Time may be dynamically calculated Response Time. The Max Response Time may be dynamically calculated
per Query by using the expected number of Reporters for that Query as per Query by using the expected number of Reporters for that Query as
follows:</t> follows:</t>
<texttable> <table align="center">
<ttcol align="center">Query Type</ttcol> <thead>
<ttcol align="center">Expected number of Reporters</ttcol> <tr>
<c>General Query</c><c>All systems on subnetwork</c> <th align="left">Query Type</th>
<c>Group-Specific Query</c><c>All systems that had expressed interest in t <th align="left">Expected Number of Reporters</th>
he group on the subnetwork</c> </tr>
<c>Source-and-Group-Specific Query</c><c>All systems on the subnetwork tha </thead>
t had expressed interest in <tbody>
the source and group</c> <tr>
</texttable> <td align="left">General Query</td>
<td align="left">All systems on the subnetwork</td>
<t>A router is not required to calculate these populations or tune the </tr>
<tr>
<td align="left">Group-Specific Query</td>
<td align="left">All systems that had expressed interest in the
group on the subnetwork</td>
</tr>
<tr>
<td align="left">Source-and-Group-Specific Query</td>
<td align="left">All systems on the subnetwork that had expresse
d interest in
the source and group</td>
</tr>
</tbody>
</table>
<t>A router is not required to calculate these populations or tune the
Max Response Time dynamically; these are simply guidelines.</t> Max Response Time dynamically; these are simply guidelines.</t>
</section> </section>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Security Considerations"> <name>Security Considerations</name>
<t>IGMP provides any form of confidentiality. This means any device
<t>IGMP does provide any form of confidentiality. This means any device
on a link can passively receive any IGMP message on the link. Such access on a link can passively receive any IGMP message on the link. Such access
can lead to privacy concerns around potentially sensitive multicast groups can lead to privacy concerns around potentially sensitive multicast groups
or the ability to identify/map the devices on a link.</t> or the ability to identify/map the devices on a link.</t>
<t>We consider the ramifications of a forged message of each type and
<t>We consider the ramifications of a forged message of each type, and describe the usage of an IPsec Authentication Header (AH) to authenticate mes
describe the usage of IPsec AH to authenticate messages if desired.</t> sages if desired.</t>
<section numbered="true" toc="default">
<section title="Query Message"> <name>Query Message</name>
<t>A forged Query message from a machine with a lower IP address than
<t>A forged Query message from a machine with a lower IP address than
the current Querier will cause Querier duties to be assigned to the the current Querier will cause Querier duties to be assigned to the
forger. If the forger then sends no more Query messages, other forger. If the forger then sends no more Query messages, other
routers' Other Querier Present timer will time out and one will routers' Other Querier Present timer will time out and one will
resume the role of Querier. During this time, if the forger ignores resume the role of Querier. During this time, if the forger ignores
Leave Messages, traffic might flow to groups with no members for up Leave messages, traffic might flow to groups with no members for up
to [Group Membership Interval].</t> to [Group Membership Interval].</t>
<t>A Denial-of-Service (DoS) attack on a host could be staged through fo
<t>A DoS attack on a host could be staged through forged Group-and- rged Group-and-
Source-Specific Queries. The attacker can find out about membership Source-Specific Queries. The attacker can find out about membership
of a specific host with a general query. After that it could send a of a specific host with a general query. After that, it could send a
large number of Group-and-Source-Specific queries, each with a large large number of Group-and-Source-Specific queries, each with a large
source list and the Maximum Response Time set to a large value. The source list and the Maximum Response Time set to a large value. The
host will have to store and maintain the sources specified in all of host will have to store and maintain the sources specified in all of
those queries for as long as it takes to send the delayed response. those queries for as long as it takes to send the delayed response.
This would consume both memory and CPU cycles in order to augment the This would consume both memory and CPU cycles in order to augment the
recorded sources with the source lists included in the successive recorded sources with the source lists included in the successive
queries.</t> queries.</t>
<t>To protect against such a DoS attack, a host stack implementation
<t>To protect against such a DoS attack, a host stack implementation
could restrict the number of Group-and-Source-Specific Queries per could restrict the number of Group-and-Source-Specific Queries per
group membership within this interval, and/or record only a limited group membership within this interval and/or record only a limited
number of sources.</t> number of sources.</t>
<t>Forged Query messages from the local network can be easily traced.
<t>Forged Query messages from the local network can be easily traced.
There are three measures necessary to defend against externally There are three measures necessary to defend against externally
forged Queries: forged Queries:
<list style="bullets"> </t>
<t>Routers SHOULD NOT forward Queries. This is easier for a router to <ul spacing="normal">
accomplish if the Query carries the Router-Alert option.</t> <li>
<t>Routers <bcp14>SHOULD NOT</bcp14> forward Queries. This is easie
<t>Hosts SHOULD ignore v2 or v3 Queries without the Router-Alert r for a router to
accomplish if the Query carries the Router Alert option.</t>
</li>
<li>
<t>Hosts <bcp14>SHOULD</bcp14> ignore v2 or v3 Queries without the R
outer Alert
option.</t> option.</t>
</li>
<t>Hosts SHOULD ignore v1, v2 or v3 General Queries sent to a <li>
<t>Hosts <bcp14>SHOULD</bcp14> ignore v1, v2, or v3 General Queries
sent to a
multicast address other than 224.0.0.1, the all-systems address.</t> multicast address other than 224.0.0.1, the all-systems address.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="Current-State Report messages"> <section numbered="true" toc="default">
<name>Current-State Report Messages</name>
<t>A forged Report message may cause multicast routers to think there <t>A forged Report message may cause multicast routers to think there
are members of a group on a network when there are not. Forged are members of a group on a network when there are not. Forged
Report messages from the local network are meaningless, since joining Report messages from the local network are meaningless, as joining
a group on a host is generally an unprivileged operation, so a local a group on a host is generally an unprivileged operation, so a local
user may trivially gain the same result without forging any messages. user may trivially gain the same result without forging any messages.
Forged Report messages from external sources are more troublesome; Forged Report messages from external sources are more troublesome;
there are two defenses against externally forged Reports: there are two defenses against externally forged Reports:
<list style="bullets"> </t>
<t>Ignore the Report if you cannot identify the source address of the <ol spacing="normal">
<li>
<t>Ignore the Report if you cannot identify the source address of th
e
packet as belonging to a network assigned to the interface on which packet as belonging to a network assigned to the interface on which
the packet was received. This solution means that Reports sent by the packet was received. This solution means that Reports sent by
mobile hosts without addresses on the local network will be mobile hosts without addresses on the local network will be
ignored. Report messages with a source address of 0.0.0.0 SHOULD ignored. Report messages with a source address of 0.0.0.0 <bcp14>SHOULD</b cp14>
be accepted on any interface.</t> be accepted on any interface.</t>
</li>
<t>Ignore Report messages without Router Alert options <xref target="RFC2113" <li>
/>, and <t>Ignore Report messages without Router Alert options <xref target=
require that routers not forward Report messages. (The requirement "RFC2113" format="default"/> and
require routers to not forward Report messages. (The requirement
is not a requirement of generalized filtering in the forwarding is not a requirement of generalized filtering in the forwarding
path, since the packets already have Router Alert options in them.) path, as the packets already have Router Alert options in them.)
This solution breaks backwards compatibility with implementations This solution breaks backwards compatibility with implementations
of IGMPv1 or earlier versions of IGMPv2 which did not require of IGMPv1 or earlier versions of IGMPv2 that did not require a
Router Alert.</t> Router Alert.</t>
</list></t> </li>
</ol>
<t>A forged Version 1 Report Message may put a router into "version 1 <t>A forged Version 1 Report Message may put a router into "version 1
members present" state for a particular group, meaning that the members present" state for a particular group, meaning that the
router will ignore Leave messages. This can cause traffic to flow to router will ignore Leave messages. This can cause traffic to flow to
groups with no members for up to [Group Membership Interval]. This groups with no members for up to [Group Membership Interval]. This
can be solved by providing routers with a configuration switch to can be solved by providing routers with a configuration switch to
ignore Version 1 messages completely. This breaks automatic ignore Version 1 messages completely. This breaks automatic
compatibility with Version 1 hosts, so should only be used in compatibility with Version 1 hosts, so it should only be used in
situations where "fast leave" is critical.</t> situations where "fast leave" is critical.</t>
<t>A forged Version 2 Report Message may put a router into "version 2
<t>A forged Version 2 Report Message may put a router into "version 2
members present" state for a particular group, meaning that the members present" state for a particular group, meaning that the
router will ignore IGMPv3 source-specific state messages. This can router will ignore IGMPv3 source-specific state messages. This can
cause traffic to flow from unwanted sources for up to [Group cause traffic to flow from unwanted sources for up to [Group
Membership Interval]. This can be solved by providing routers with a Membership Interval]. This can be solved by providing routers with a
configuration switch to ignore Version 2 messages completely. This configuration switch to ignore Version 2 messages completely. This
breaks automatic compatibility with Version 2 hosts, so should only breaks automatic compatibility with Version 2 hosts, so it should only
be used in situations where source include and exclude is critical.</t> be used in situations where source include and exclude is critical.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="State-Change Report Messages"> <name>State-Change Report Messages</name>
<t>A forged State-Change Report message will cause the Querier to send
<t>A forged State-Change Report message will cause the Querier to send
out Group-Specific or Source-and-Group-Specific Queries for the group out Group-Specific or Source-and-Group-Specific Queries for the group
in question. This causes extra processing on each router and on each in question. This causes extra processing on each router and on each
member of the group, but can not cause loss of desired traffic. member of the group, but it cannot cause loss of desired traffic.
There are two defenses against externally forged State-Change Report There are two defenses against externally forged State-Change Report
messages: messages:
<list style="bullets"> </t>
<t>Ignore the State-Change Report message if you cannot identify the <ol spacing="normal">
<li>
<t>Ignore the State-Change Report message if you cannot identify the
source address of the packet as belonging to a subnet assigned to source address of the packet as belonging to a subnet assigned to
the interface on which the packet was received. This solution the interface on which the packet was received. This solution
means that State-Change Report messages sent by mobile hosts means that State-Change Report messages sent by mobile hosts
without addresses on the local subnet will be ignored. State- without addresses on the local subnet will be ignored. State-
Change Report messages with a source address of 0.0.0.0 SHOULD be Change Report messages with a source address of 0.0.0.0 <bcp14>SHOULD</bcp1 4> be
accepted on any interface.</t> accepted on any interface.</t>
</li>
<t>Ignore State-Change Report messages without Router Alert options <li>
<xref target="RFC2113" />, and require that routers not forward State-Change <t>Ignore State-Change Report messages without Router Alert options
<xref target="RFC2113" format="default"/> and require routers to not forward
State-Change
Report messages. (The requirement is not a requirement of Report messages. (The requirement is not a requirement of
generalized filtering in the forwarding path, since the packets generalized filtering in the forwarding path, as the packets
already have Router Alert options in them.)</t> already have Router Alert options in them.)</t>
</list></t> </li>
</section> </ol>
</section>
<section title="IPsec Usage"> <section numbered="true" toc="default">
<name>IPsec Usage</name>
<t>In addition to these measures, IPsec in Authentication Header mode <t>In addition to these measures, IPsec in AH mode
<xref target="RFC4302" /> may be used to protect against remote attacks by en <xref target="RFC4302" format="default"/> may be used to protect against remo
suring that te attacks by ensuring that IGMPv3 messages came from a system on the LAN (or, m
IGMPv3 messages came from a system on the LAN (or, more specifically, ore specifically,
a system with the proper key). When using IPsec, the messages sent from a system with the proper key). When using IPsec, the messages sent
to 224.0.0.1 and 224.0.0.22 should be authenticated using AH. When to 224.0.0.1 and 224.0.0.22 should be authenticated using AH. When
keying, there are two possibilities: keying, there are two possibilities:
<list style="numbers"> </t>
<t>Use a symmetric signature algorithm with a single key for the LAN <ol spacing="normal" type="1"><li>
<t>Use a symmetric signature algorithm with a single key for the LAN
(or a key for each group). This allows validation that a packet (or a key for each group). This allows validation that a packet
was sent by a system with the key. This has the limitation that was sent by a system with the key. This has the limitation that
any system with the key can forge a message; it is not possible to any system with the key can forge a message; it is not possible to
authenticate the individual sender precisely. It also requires authenticate the individual sender precisely. It also requires
disabling IPSec's Replay Protection.</t> disabling IPsec's Replay Protection.</t>
</li>
<t>When appropriate key management standards have been developed, use <li>
<t>When appropriate key management standards have been developed, us
e
an asymmetric signature algorithm. All systems need to know the an asymmetric signature algorithm. All systems need to know the
public key of all routers, and all routers need to know the public public key of all routers, and all routers need to know the public
key of all systems. This requires a large amount of key key of all systems. This requires a large amount of key
management but has the advantage that senders can be authenticated management but has the advantage that senders can be authenticated
individually so e.g., a host cannot forge a message that only individually so, e.g., a host cannot forge a message that only
routers should be allowed to send.</t> routers should be allowed to send.</t>
</list></t> </li>
</ol>
<t>This solution only directly applies to Query and Leave messages in <t>This solution only directly applies to Query and Leave messages in
IGMPv1 and IGMPv2, since Reports are sent to the group being reported IGMPv1 and IGMPv2 as Reports are sent to the group being reported,
and it is not feasible to agree on a key for host-to-router and it is not feasible to agree on a key for host-to-router
communication for arbitrary multicast groups.</t> communication for arbitrary multicast groups.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="IANA Considerations"> <name>IANA Considerations</name>
<t>All IGMP types described in this document are managed via <xref target="I- <t>All IGMP types described in this document are managed via <xref target=
D.ietf-pim-3228bis"/>.</t> "RFC9778" format="default"/>.</t>
<t>References to RFC 3376 that currently exist in IANA registries are to be u <t>IANA has replaced each reference to <xref target="RFC3376"/> with a ref
pdated to reference erence to this document in both the "IGMP Type Numbers" and "IPFIX Information E
this document. This includes a reference in the IGMP Type Numbers registry an lements" registries.
d the informational </t>
reference in the IPFIX Information Elements registry.</t> </section>
</section>
<section title="Contributors">
<t>Brad Cain, Steve Deering, Isidor Kouvelas, Bill Fenner, and Ajit Thyagaraj
an
are the authors of RFC 3376, which forms the bulk of the content contained he
rein.</t>
<t>Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe and Tim Winters have con
tributed
valuable content to this version of the specification.</t>
</section>
<section title="Acknowledgments">
<t>We would like to thank Ran Atkinson, Luis Costa, Toerless Eckert,
Dino Farinacci, Serge Fdida, Wilbert de Graaf, Sumit Gupta, Mark
Handley, Bob Quinn, Michael Speer, Dave Thaler and Rolland Vida for
comments and suggestions on RFC 3376.</t>
<t>Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable feedb
ack on this
version of the specification and we thank them for their input.</t>
</section>
</middle>
<back>
<references title="Normative References">
<?rfc include="reference.RFC.1112" ?>
<?rfc include="reference.RFC.2113" ?>
<?rfc include="reference.RFC.2119" ?>
<?rfc include="reference.RFC.2236" ?>
<?rfc include="reference.RFC.4302" ?>
<?rfc include="reference.RFC.4607" ?>
<?rfc include="reference.RFC.4604" ?>
<?rfc include="reference.RFC.8174" ?>
<?rfc include="reference.I-D.ietf-pim-3228bis" ?>
</references>
<references title="Informative References"> </middle>
<?rfc include="reference.RFC.1071" ?> <back>
<?rfc include="reference.RFC.3376" ?> <references>
<?rfc include="reference.RFC.3569" ?> <name>References</name>
<?rfc include="reference.RFC.3678" ?> <references>
</references> <name>Normative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1
112.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
113.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
119.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
236.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
302.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
607.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
604.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
174.xml"/>
<section anchor="rationale" title="Design Rationale"> <!-- [rfced] As RFC 9778 will be published with this document, please consider
<section anchor="state-change" title="The Need for State-Change Messages"> whether the reference should be to [BCP57] or [RFC9778].
<t>IGMPv3 specifies two types of Membership Reports: Current-State and -->
State Change. This section describes the rationale for the need for <!-- [I-D.ietf-pim-3228bis] companion document RFC 9778 -->
both these types of Reports.</t> <reference anchor="RFC9778" target="https://www.rfc-editor.org/info/rfc97
78">
<front>
<title>IANA Considerations for Internet Group Management Protocols</t
itle>
<author initials="B." surname="Haberman" fullname="Brian Haberman" ro
le="editor">
<organization>Johns Hopkins University Applied Physics Lab</organiz
ation>
</author>
<date month="March" year="2025"/>
</front>
<seriesInfo name="BCP" value="57"/>
<seriesInfo name="RFC" value="9778"/>
<seriesInfo name="DOI" value="10.17487/RFC9778"/>
</reference>
<t>Routers need to distinguish Membership Reports that were sent in </references>
<references>
<name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1
071.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
376.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
569.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
678.xml"/>
</references>
</references>
<section anchor="rationale" numbered="true" toc="default">
<name>Design Rationale</name>
<section anchor="state-change" numbered="true" toc="default">
<name>The Need for State-Change Messages</name>
<t>IGMPv3 specifies two types of Membership Reports: Current-State and
State Change. This section describes the rationale for needing both types of
Reports.</t>
<t>Routers need to distinguish Membership Reports that were sent in
response to Queries from those that were sent as a result of a change response to Queries from those that were sent as a result of a change
in interface state. Membership reports that are sent in response to in interface state. Membership reports that are sent in response to
Membership Queries are used mainly to refresh the existing state at Membership Queries are used mainly to refresh the existing state at
the router; they typically do not cause transitions in state at the the router; they typically do not cause transitions in state at the
router. Membership Reports that are sent in response to changes in router. Membership Reports that are sent in response to changes in
interface state require the router to take some action in response to interface state require the router to take some action in response to
the received report (see <xref target="rcv_rpts" />).</t> the received report (see <xref target="rcv_rpts" format="default"/>).<
/t>
<t>The inability to distinguish between the two types of reports would <t>The inability to distinguish between the two types of reports would
force a router to treat all Membership Reports as potential changes force a router to treat all Membership Reports as potential changes
in state and could result in increased processing at the router as in state, and it could result in increased processing at the router as
well as an increase in IGMP traffic on the network.</t> well as an increase in IGMP traffic on the network.</t>
</section> </section>
<section anchor="suppression" numbered="true" toc="default">
<section anchor="suppression" title="Host Suppression"> <name>Host Suppression</name>
<t>In IGMPv1 and IGMPv2, a host would cancel sending a pending <t>In IGMPv1 and IGMPv2, a host would cancel sending pending
membership reports if a similar report was observed from another membership reports if a similar report was observed from another
member on the network. In IGMPv3, this suppression of host member on the network. In IGMPv3, this suppression of host
membership reports has been removed. The following points explain membership reports has been removed. The following points explain
the reasons behind this decision. the reasons behind this decision.
<list style="numbers"> </t>
<ol spacing="normal" type="1"><li>
<t>Routers may want to track per-host membership status on an <t>Routers may want to track per-host membership status on an
interface. This allows routers to implement fast leaves (e.g., interface. This allows routers to implement fast leaves (e.g.,
for layered multicast congestion control schemes) as well as track for layered multicast congestion control schemes) as well as track
membership status for possible accounting purposes.</t> membership status for possible accounting purposes.</t>
</li>
<t>Membership Report suppression does not work well on bridged LANs. <li>
Many bridges and Layer2/Layer3 switches that implement IGMP <t>Membership Report suppression does not work well on bridged LANs.
Many bridges and Layer 2 / Layer 3 switches that implement IGMP
snooping do not forward IGMP messages across LAN segments in order snooping do not forward IGMP messages across LAN segments in order
to prevent membership report suppression. Removing membership to prevent membership report suppression. Removing membership
report suppression eases the job of these IGMP snooping devices.</t> report suppression eases the job of these IGMP snooping devices.</t>
</li>
<t>By eliminating membership report suppression, hosts have fewer <li>
<t>By eliminating membership report suppression, hosts have fewer
messages to process; this leads to a simpler state machine messages to process; this leads to a simpler state machine
implementation.</t> implementation.</t>
</li>
<t>In IGMPv3, a single membership report now bundles multiple <li>
<t>In IGMPv3, a single membership report now bundles multiple
multicast group records to decrease the number of packets sent. multicast group records to decrease the number of packets sent.
In comparison, the previous versions of IGMP required that each In comparison, the previous versions of IGMP required that each
multicast group be reported in a separate message.</t> multicast group be reported in a separate message.</t>
</list></t> </li>
</section> </ol>
</section>
<section anchor="switch-modes" title="Switching Router Filter Modes from EXCL <section anchor="switch-modes" numbered="true" toc="default">
UDE to INCLUDE"> <name>Switching Router Filter Modes from EXCLUDE to INCLUDE</name>
<t>If hosts exist in both EXCLUDE and INCLUDE modes for a single
<t>If there exist hosts in both EXCLUDE and INCLUDE modes for a single
multicast group in a network, the router must be in EXCLUDE mode as multicast group in a network, the router must be in EXCLUDE mode as
well (see <xref target="sec-rfm" />). In EXCLUDE mode, a router forwards tra ffic well (see <xref target="sec-rfm" format="default"/>). In EXCLUDE mode, a rou ter forwards traffic
from all sources unless that source exists in the exclusion source from all sources unless that source exists in the exclusion source
list. If all hosts in EXCLUDE mode cease to exist, it would be list. If all hosts in EXCLUDE mode cease to exist, it would be
desirable for the router to switch back to INCLUDE mode seamlessly desirable for the router to switch back to INCLUDE mode seamlessly
without interrupting the flow of traffic to existing receivers.</t> without interrupting the flow of traffic to existing receivers.</t>
<t>One of the ways to accomplish this is for routers to keep track of
<t>One of the ways to accomplish this is for routers to keep track of
all sources desired by hosts that are in INCLUDE mode even though the all sources desired by hosts that are in INCLUDE mode even though the
router itself is in EXCLUDE mode. If the group timer now expires in router itself is in EXCLUDE mode. If the group timer now expires in
EXCLUDE mode, it implies that there are no hosts in EXCLUDE mode on EXCLUDE mode, it implies that there are no hosts in EXCLUDE mode on
the network (otherwise a membership report from that host would have the network (otherwise, a membership report from that host would have
refreshed the group timer). The router can then switch to INCLUDE refreshed the group timer). The router can then switch to INCLUDE
mode seamlessly with the list of sources currently being forwarded in mode seamlessly with the list of sources currently being forwarded in
its source list.</t> its source list.</t>
</section> </section>
</section> </section>
<section anchor="summary" numbered="true" toc="default">
<section anchor="summary" title="Summary of Changes from IGMPv2"> <name>Summary of Changes from IGMPv2</name>
<t>While the main additional feature of IGMPv3 is the addition of source
<t>While the main additional feature of IGMPv3 is the addition of source filtering, the following is a summary of other changes from <xref target="RFC
filtering, the following is a summary of other changes from RFC 2236. 2236"/>.
<list style="symbols"> </t>
<t>State is maintained as Group + List-of-Sources, not simply Group as <ul spacing="normal">
<li>
<t>State is maintained as Group + List-of-Sources, not simply Group as
in IGMPv2.</t> in IGMPv2.</t>
</li>
<t>Interoperability with IGMPv1 and IGMPv2 systems is defined as <li>
<t>Interoperability with IGMPv1 and IGMPv2 systems is defined as
operations on the IGMPv3 state.</t> operations on the IGMPv3 state.</t>
</li>
<t>The IP Service Interface has changed to allow specification of <li>
<t>The IP service interface has changed, to allow specification of
source-lists.</t> source-lists.</t>
</li>
<t>The Querier includes its Robustness Variable and Query Interval in <li>
<t>The Querier includes its Robustness Variable and Query Interval in
Query packets to allow synchronization of these variables on non- Query packets to allow synchronization of these variables on non-
Queriers.</t> Queriers.</t>
</li>
<t>The Max Response Time in Query messages has an exponential range, <li>
<t>The Max Response Time in Query messages has an exponential range,
changing the maximum from 25.5 seconds to about 53 minutes, for use changing the maximum from 25.5 seconds to about 53 minutes, for use
on links with huge numbers of systems.</t> on links with a huge number of systems.</t>
</li>
<li>
<t>Hosts retransmit state-change messages for increased robustness.</t
>
</li>
<li>
<t>Additional data sections are defined, to allow later extensions.</t
>
</li>
<li>
<t>Report packets are sent to 224.0.0.22, to assist Layer 2 switches
in snooping.</t>
</li>
<li>
<t>Report packets can contain multiple group records, to allow
reporting of full current state using fewer packets.</t>
</li>
<li>
<t>Hosts no longer perform suppression, to simplify implementations
and permit explicit membership tracking.</t>
</li>
<li>
<t>A new S flag in Query messages
fixes robustness issues, which were also present in IGMPv2.</t>
</li>
</ul>
</section>
<section anchor="errata-details" numbered="true" toc="default">
<name>Summary of Changes from RFC 3376</name>
<t>The following is a list of changes made since <xref target="RFC3376"/>
was published.
</t>
<ul spacing="normal">
<li>
<t>Modified the definition of Older Version Querier Present
Interval to address Erratum 4375.</t>
</li>
<li>
<t>Modified the metadata to fix the Obsoletes vs. Updates relationship
with <xref target="RFC2236"/> per Erratum 1501.</t>
</li>
<li>
<t>Updated the introductory text to describe the Updates relationship
with <xref target="RFC2236"/> per Erratum 7339.</t>
</li>
<li>
<t>Updated the definition of Group Membership Interval to address Erra
tum 6725.</t>
</li>
<li>
<t>Updated the text relating to the router filter-mode to address Erra
tum 5562.</t>
</li>
<li>
<t>Clarified the use of General Queries in the Querier election proces
s.</t>
</li>
</ul>
</section>
<t>Hosts retransmit state-change messages for increased robustness.</t> <section numbered="false" toc="default">
<name>Acknowledgments</name>
<t>We would like to thank <contact fullname="Ran Atkinson"/>, <contact
fullname="Luis Costa"/>, <contact fullname="Toerless Eckert"/>, <contact
fullname="Dino Farinacci"/>, <contact fullname="Serge Fdida"/>, <contact
fullname="Wilbert de Graaf"/>, <contact fullname="Sumit Gupta"/>,
<contact fullname="Mark Handley"/>, <contact fullname="Bob Quinn"/>,
<contact fullname="Michael Speer"/>, <contact fullname="Dave Thaler"/>,
and <contact fullname="Rolland Vida"/> for comments and suggestions on
<xref target="RFC3376"/>.</t>
<t>Additional data sections are defined to allow later extensions.</t> <t><contact fullname="Stig Venaas"/>, <contact fullname="Hitoshi
Asaeda"/>, and <contact fullname="Mike McBride"/> have provided valuable
feedback on this specification, and we thank them for their input.</t>
</section>
<section numbered="false" toc="default">
<name>Contributors</name>
<t><contact fullname="Brad Cain"/>, <contact fullname="Steve Deering"/>,
<contact fullname="Isidor Kouvelas"/>, <contact fullname="Bill
Fenner"/>, and <contact fullname="Ajit Thyagarajan"/> are the authors of
<xref target="RFC3376"/>, which forms the bulk of the content contained he
rein.</t>
<t>Report packets are sent to 224.0.0.22, to assist layer-2 switches <t><contact fullname="Anuj Budhiraja"/>, <contact fullname="Toerless
in snooping.</t> Eckert"/>, <contact fullname="Olufemi Komolafe"/>, and <contact
fullname="Tim Winters"/> have contributed valuable content to this
specification.</t>
</section>
</back>
<t>Report packets can contain multiple group records, to allow <!-- [rfced] Please review each artwork element in the xml file. Specifically,
reporting of full current state using fewer packets.</t> should any artwork element be tagged as sourcecode or another element,
e.g., the artwork element in Section 6.4.1? If sourcecode is correct for any of
these, please let us know if the "type" attribute of each sourcecode element.
If the current list of preferred values for "type"
(https://www.rfc-editor.org/rpc/wiki/doku.php?id=sourcecode-types)
does not contain an applicable type, then feel free to let us know.
Also, it is acceptable to leave the "type" attribute not set.
-->
<t>Hosts no longer perform suppression, to simplify implementations <!-- [rfced] Terminology
and permit explicit membership tracking.</t>
<t>New Suppress Router-Side Processing (S) flag in Query messages a) Throughout the text, the following terminology appears to be used
fixes robustness issues which were also present in IGMPv2.</t> inconsistently. Please review these occurrences and let us know if/how they
</list></t> may be made consistent.
</section>
Group-and-Source-Specific Query vs. Group-and-Source Specific Query vs.
group and source specific query
Group-and-Source-Specific Queries vs. Group-and-Source-Specific queries vs.
Group-and-Source Specific Queries
Group-Specific Query vs. Group Specific Query
[Note: Table 15 uses "Source-and-Group-Specific Query" and "Group-Specifi
c Query".]
Group Record vs. group record
Group Timer (2) vs. group timer (24)
[Note: See two uppercase instances in Sections 6.4.1 and 6.6.1 (Table 10).]
Max Response Time vs. Max Resp Time
[Note: Are these terms different or the same?]
Membership Report vs. membership report
Some examples:
Membership Reports that are sent in response...
Membership reports that are sent in response...
Queries vs. queries
Ex: number of Queries
response to Queries
If while scheduling new queries
pending queries
general queries
Querier election vs. querier election
[Note: Also see Querier vs. querier below.]
b) We updated the text to reflect the forms on the right. Please let us know
if further changes are desired.
backwards compatible -> backward compatible
Filter-Mode-Change record -> Filter-Mode-Change Record (3 instances)
Host Compatibility mode -> Host Compatibility Mode (3)
Group Compatibility mode -> Group Compatibility Mode (3)
Leave Messages -> Leave messages (1)
Other-Querier Present and Other-Querier-Present -> Other Querier Present (2)
Router-Alert -> Router Alert (not hyphenated in attributive position)
Router Filter-Mode -> router filter-mode (1)
IP Service Interface -> IP service interface (1)
Source-List-Change record -> Source-List-Change Record (1)
c) Is it correct that 2 instances of "Sources" appear as uppercase in
Section 6.4.1, or should they be lowercase?
Original:
A = set of source records whose source timers > 0 (Sources that at
least one host has requested to be forwarded)
B = set of source records whose source timers = 0 (Sources that IGMP
will suggest to the routing protocol not to forward)
d) Querier vs. querier. We note that uppercase "Querier" seems to be used when
it is part of a term; otherwise, it appears as lowercase. Should "Querier" be
made lowercase in any of the sentences below, as we see instances
in the text such as "used by the querier", "sent by the querier", etc.?
Current:
The Query Interval is the interval between General Queries sent by
the Querier.
The Startup Query Interval is the interval between General Queries
sent by a Querier on startup.
A forged Query message from a machine with a lower IP address than
the current Querier will cause Querier duties to be assigned to the
forger.
If the forger then sends no more Query messages, other
routers' Other Querier Present timer will time out and one will
resume the role of Querier.
A forged State-Change Report message will cause the Querier to send
out Group-Specific or Source-and-Group-Specific Queries for the group
in question.
The Querier includes its Robustness Variable and Query Interval in
Query packets to allow synchronization of these variables on non-
Queriers.
-->
<!-- [rfced] Abbreviations
a) FYI - We have added expansions for abbreviations upon first use
per Section 3.6 of RFC 7322 ("RFC Style Guide"). Please review each
expansion in the document carefully to ensure correctness.
Authentication Header (AH)
Denial of Service (DoS)
-->
<!-- [rfced] Please review the "Inclusive Language" portion of the online
Style Guide <https://www.rfc-editor.org/styleguide/part2/#inclusive_language>
and let us know if any changes are needed. Updates of this nature typically
result in more precise language, which is helpful for readers.
Note that our script did not flag any words in particular, but this should
still be reviewed as a best practice, but please consider whether the following
could be updated with alternate wording:
hear (2)
heard (7)
hearing (1)
Could "receive", "received", and "receiving" be used instead? For example,
does the S flag perform an action upon "hearing" a Query and are General
Queries "heard" on the interface, or could "receiving" and "received",
respectively, be used as shown below?
(3376bis and 3810bis)
Original:
When set to one, the S Flag indicates to any receiving multicast
routers that they are to suppress the normal timer updates they
perform upon hearing a Query.
Perhaps:
When set to one, the S (Suppress Router-Side Processing) flag
indicates to any receiving multicast routers that they are to
suppress the normal timer updates they perform upon receiving
a Query.
(3376bis)
Original:
This variable is kept per interface and is dependent on the version
of General Queries heard on that interface as well as the Older
Version Querier Present timers for the interface.
Perhaps:
This variable is kept per interface and is dependent on the version
of General Queries received on that interface as well as the Older
Version Querier Present timers for the interface.
-->
<section anchor="errata-details" title="Summary of Changes from RFC 3376">
<t>The following is a list of changes made since RFC 3376.
<list style="symbols">
<t>Modified definition of Older Version Querier Present
Interval to address Erratum 4375.</t>
<t>Modified metadata to fix Obsoletes vs Updates relationship with RFC
2236 per Erratum 1501.</t>
<t>Updated introductory text to describe Updates relationship with RFC
2236 per Erratum 7339.</t>
<t>Updated Group Membership Interval definition to address Erratum 672
5.</t>
<t>Updated text for Router Filter-Mode to address Erratum 5562.</t>
<t>Clarified the use of General Queries in the Querier election proces
s.</t>
</list></t>
</section>
</back>
</rfc> </rfc>
 End of changes. 387 change blocks. 
1565 lines changed or deleted 2197 lines changed or added

This html diff was produced by rfcdiff 1.48.