rfc9777xml2.original.xml   rfc9777.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-3810bis-12" ipr="pre5378trust200902"
updates="2710" obsoletes="3810">
<front>
<title abbrev="MLDv2 Revision">Multicast Listener Discovery Version 2 (MLDv2
) for IPv6</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-3810bis-12" number="9777" ipr="pre5378trust200902" updates="2710" obsolet
es="3810" consensus="true" submissionType="IETF" 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 "MLDv2 Revision" to "MLDv2 for IPv6" for clarity
and to match the document title more closely?
Original:
MLDv2 Revision
Perhaps:
MLDv2 for IPv6
-->
<!-- MLDv2 is being published as an Internet Stanard. We have marked this
as STD 101 (new STD), as we do not see any existing STDs related to MLD.
Please review and let us know if changes are needed. See
https://www.rfc-editor.org/search/rfc_search_detail.php?sortkey=Number&sorting=D
ESC&page=All&pubstatus%5B%5D=Standards%20Track&std_trk=Internet%20Standard
-->
<!-- [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="MLDv2 Revision">Multicast Listener Discovery Version 2 (MLDv2
) for IPv6</title>
<seriesInfo name="RFC" value="9777"/>
<seriesInfo name="STD" value="101"/>
<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>
<date year="2025" month="March"/>
<abstract> <area>RTG</area>
<t>This document updates RFC 2710, and it specifies Version 2 of the <workgroup>pim</workgroup>
Multicast Listener Discovery Protocol (MLDv2). MLD is used by an
<!-- [rfced] Please insert any keywords (beyond those that appear in
the title) for use on https://www.rfc-editor.org/search. -->
<keyword>example</keyword>
<abstract>
<!--[rfced] In the Abstract, is it preferred to lead with the Updates
relationship, e.g., "This document updates RFC 2710" (first
sentence), or should that text be grouped with "This document
obsoletes RFC 3810" (last sentence), which would also match the
Abstract in draft-ietf-pim-3376bis-12?
Also, note that we updated the expansion of "MLD" so that it does
not include "Protocol" for consistency.
Original:
This document updates RFC 2710, and it specifies Version 2
of the Multicast Listener Discovery Protocol (MLDv2).
This document obsoletes RFC 3810.
Perhaps:
This document specifies the Multicast Listener Discovery
version 2 (MLDv2) protocol.
This document updates RFC 2710 and obsoletes RFC 3810.
-->
<t>This document updates RFC 2710, and it specifies the
Multicast Listener Discovery version 2 (MLDv2) protocol. MLD is used by an
IPv6 router to discover the presence of multicast listeners on IPv6 router to discover the presence of multicast listeners on
directly attached links, and to discover which multicast addresses directly attached links and to discover which multicast addresses
are of interest to those neighboring nodes. MLDv2 is designed to be are of interest to those neighboring nodes. MLDv2 is designed to be
interoperable with MLDv1. MLDv2 adds the ability for a node to interoperable with MLDv1. MLDv2 adds the ability for a node to
report interest in listening to packets with a particular multicast report interest in listening to packets with a particular multicast
address only from specific source addresses or from all sources address only from specific source addresses or from all sources
except for specific source addresses.</t> except for specific source addresses.</t>
<t>This document obsoletes RFC 3810.</t>
</abstract>
</front>
<middle>
<section anchor="intro" numbered="true" toc="default">
<name>Introduction</name>
<t>The Multicast Listener Discovery (MLD) protocol is used by IPv6
routers to discover the presence of multicast listeners (i.e., nodes
that wish to receive multicast packets) on their directly attached
links and to discover specifically which multicast addresses are of
interest to those neighboring nodes.
<t>This document obsoletes RFC 3810.</t> <!--[rfced] Is "on the one hand" and "on the other hand" necessary in
</abstract> this sentence? While we understand that it was included in RFC
</front> 3810, please consider, for ease of reading, if you would like to
remove it and perhaps include "respectively", if performing the
"multicast router part" corresponds to collecting the multicast
listener information and the "multicast address listener part"
corresponds to informing other neighboring multicast routers of
its listening state, as shown below.
<middle> Original:
<section anchor="intro" title="Introduction"> Note that a multicast router may itself be a listener of one or more
multicast addresses; in this case it performs both the "multicast
router part" and the "multicast address listener part" of the
protocol, to collect the multicast listener information needed by its
multicast routing protocol on the one hand, and to inform itself and
other neighboring multicast routers of its listening state on the
other hand.
<t>The Multicast Listener Discovery Protocol (MLD) is used by IPv6 Perhaps:
routers to discover the presence of multicast listeners (i.e., nodes Note that a multicast router may itself be a listener of one or more
that wish to receive multicast packets) on their directly attached multicast addresses; in this case, it performs both the "multicast
links, and to discover specifically which multicast addresses are of router part" and the "multicast address listener part" of the
interest to those neighboring nodes. Note that a multicast router protocol, to collect the multicast listener information needed by
its multicast routing protocol and to inform itself and other
neighboring multicast routers of its listening state, respectively.
-->
Note that a multicast router
may itself be a listener of one or more multicast addresses; in this may itself be a listener of one or more multicast addresses; in this
case it performs both the "multicast router part" and the "multicast case, it performs both the "multicast router part" and the "multicast
address listener part" of the protocol, to collect the multicast address listener part" of the protocol, to collect the multicast
listener information needed by its multicast routing protocol on the listener information needed by its multicast routing protocol on the
one hand, and to inform itself and other neighboring multicast one hand, and to inform itself and other neighboring multicast
routers of its listening state on the other hand.</t> routers of its listening state on the other hand.</t>
<t>This document specifies version 2 of MLD. The previous version of
<t>This document specifies Version 2 of MLD. The previous version of MLD is specified in <xref target="RFC2710" format="default"/>; in this docume
MLD is specified in <xref target="RFC2710" />. In this document we will refe nt, we will refer to it as "MLDv1". MLDv2 is a translation of IGMPv3 <xref targ
r to it et="RFC9776" format="default"/>
as MLDv1. MLDv2 is a translation of the IGMPv3 protocol <xref target="RFC337
6" />
for IPv6 semantics.</t> for IPv6 semantics.</t>
<t>The MLDv2 protocol, when compared to MLDv1, adds support for "source
<t>The MLDv2 protocol, when compared to MLDv1, adds support for "source
filtering", i.e., the ability for a node to report interest in filtering", i.e., the ability for a node to report interest in
listening to packets only from specific source addresses, as listening to packets only from specific source addresses, as
required to support Source-Specific Multicast <xref target="RFC3569" />, or f required to support Source-Specific Multicast (SSM) <xref target="RFC3569" fo
rom *all rmat="default"/>, or from <strong>all
but* specific source addresses, sent to a particular multicast but</strong> specific source addresses, sent to a particular multicast
address. MLDv2 is designed to be interoperable with MLDv1.</t> address. MLDv2 is designed to be interoperable with MLDv1.</t>
<t>This document uses "SSM-aware" to refer to systems that support SSM
as defined in <xref target="RFC4607" format="default"/>.</t>
<t>This document obsoletes <xref target="RFC3810" format="default"/>. <xre
f target="_810-changes" format="default"/> lists the main
changes from <xref target="RFC3810" format="default"/>.</t>
<section numbered="true" toc="default">
<name>Conventions Used in This Document</name>
<t>This document uses SSM-aware to refer to systems that support Source-Speci <t>
fic Multicast (SSM) The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>",
as defined in <xref target="RFC4607"/>.</t> "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>
",
<t>This document obsoletes <xref target="RFC3810"/>. <xref target="3810-chang "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>",
es"/> lists the main "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
changes from <xref target="RFC3810"/>.</t> "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to
be
<section title="Conventions Used in This Document"> interpreted as described in BCP&nbsp;14 <xref target="RFC2119"/> <xref
<t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", target="RFC8174"/> when, and only when, they appear in all capitals, as
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and shown here.
"OPTIONAL" in this document are to be interpreted as described in BCP </t>
14 <xref target="RFC2119"/><xref target="RFC8174"/> when, and only when, they </section>
appear in all </section>
capitals, as shown here.</t> <section numbered="true" toc="default">
</section> <name>Protocol Overview</name>
</section> <t>This section gives a brief description of the protocol operation. The
<section title="Protocol Overview">
<t>This section gives a brief description of the protocol operation. The
following sections present the protocol details.</t> following sections present the protocol details.</t>
<t>MLD is an asymmetric protocol; it specifies separate behaviors for
<t>MLD is an asymmetric protocol; it specifies separate behaviors for
multicast address listeners (i.e., hosts or routers that listen to multicast address listeners (i.e., hosts or routers that listen to
multicast packets) and multicast routers. The purpose of MLD is to multicast packets) and multicast routers. The purpose of MLD is to
enable each multicast router to learn, for each of its directly enable each multicast router to learn, for each of its directly
attached links, which multicast addresses and which sources have attached links, which multicast addresses and which sources have
interested listeners on that link. The information gathered by MLD interested listeners on that link. The information gathered by MLD
is provided to whichever multicast routing protocol is used by the is provided to whichever multicast routing protocol is used by the
router, in order to ensure that multicast packets are delivered to router, in order to ensure that multicast packets are delivered to
all links where there are listeners interested in such packets.</t> all links where there are listeners interested in such packets.</t>
<t>Multicast routers only need to know that at least one node on an
<t>Multicast routers only need to know that at least one node on an
attached link is listening to packets for a particular multicast attached link is listening to packets for 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 individually keep track of the interests of each neighboring to individually keep track of the interests of each neighboring
node. (Nevertheless, see <xref target="host_suppress" /> item 1 for d node. (Nevertheless, see <xref target="host_suppress" format="default
iscussion.)</t> "/>, item 1 for discussion.)</t>
<t>A multicast router performs the router part of the MLDv2 protocol
<t>A multicast router performs the router part of the MLDv2 protocol (described in detail in <xref target="mr_proto" format="default"/>) on each o
(described in details in <xref target="mr_proto" />) on each of its directly f its directly attached
attached
links. If a multicast router has more than one interface connected links. If a multicast router has more than one interface connected
to the same link, it only needs to operate the protocol on one of to the same link, it only needs to operate the protocol on one of
those interfaces. The router behavior depends on whether there are those interfaces. The router behavior depends on whether there are
several multicast routers on the same subnet, or not. If that is the several multicast routers on the same subnet, or not. If that is the
case, a querier election mechanism (described in <xref target="elect" />) is case, a querier election mechanism (described in <xref target="elect" format= "default"/>) is
used to elect a single multicast router to be in Querier state. This used to elect a single multicast router to be in Querier state. This
router is called the Querier. All multicast routers on the subnet router is called the "Querier". All multicast routers on the subnet
listen to the messages sent by multicast address listeners, and listen to the messages sent by multicast address listeners, and
maintain the same multicast listening information state, so that they maintain the same multicast listening information state, so that they
can take over the querier role, should the present Querier fail. can take over the querier role, should the present Querier fail.
Nevertheless, only the Querier sends periodical or triggered query Nevertheless, only the Querier sends periodical or triggered query
messages on the subnet, as described in <xref target="mld_qrys" />.</t> messages on the subnet, as described in <xref target="mld_qrys" format="defau
lt"/>.</t>
<t>A multicast address listener performs the listener part of the <t>A multicast address listener performs the listener part of the
MLDv2 protocol (described in details in <xref target="proto" />) on all inter MLDv2 protocol (described in detail in <xref target="proto" format="default"/
faces >) on all interfaces
on which multicast reception is supported, even if more than one of on which multicast reception is supported, even if more than one of
those interfaces are connected to the same link.</t> those interfaces are connected to the same link.</t>
<section anchor="build_state" numbered="true" toc="default">
<section title="Building Multicast Listening State on Multicast Address Liste <name>Building Multicast Listening State on Multicast Address Listeners<
ners" anchor="build_state"> /name>
<t>Upper-layer protocols and applications that run on a multicast
<t>Upper-layer protocols and applications that run on a multicast
address listener node use specific service interface calls (described address listener node use specific service interface calls (described
in <xref target="srvc_if" />) to ask the IP layer to enable or disable recept ion of in <xref target="srvc_if" format="default"/>) to ask the IP layer to enable o r disable reception of
packets sent to specific multicast addresses. The node keeps packets sent to specific multicast addresses. The node keeps
Multicast Address Listening state for each socket on which the Multicast Address Listening state for each socket on which the
service interface calls have been invoked (<xref target="sock_state" />). In addition service interface calls have been invoked (<xref target="sock_state" format=" default"/>). In addition
to this per-socket multicast listening state, a node must also to this per-socket multicast listening state, a node must also
maintain or compute multicast listening state for each of its maintain or compute multicast listening state for each of its
interfaces (<xref target="if_state" />). Conceptually, that state consists o f a set interfaces (<xref target="if_state" format="default"/>). Conceptually, that state consists of a set
of records, with each record containing an IPv6 multicast address, a of records, with each record containing an IPv6 multicast address, a
filter mode, and a source list. The filter mode may be either filter mode, and a source list. The filter mode may be either
INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to
the specified multicast address is enabled only from the source the specified multicast address is enabled only from the source
addresses listed in the source list. In EXCLUDE mode, reception of addresses listed in the source list. In EXCLUDE mode, reception of
packets sent to the given multicast address is enabled from all packets sent to the given multicast address is enabled from all
source addresses except those listed in the source list.</t> source addresses except those listed in the source list.</t>
<t>At most one record per multicast address exists for a given <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 it when different sockets have differing state, but it may differ from the per-socket state when different
sockets have differing
filter modes and/or source lists for the same multicast address and filter modes and/or source lists for the same multicast address and
interface. After a multicast packet has been accepted from an interface. After a multicast packet has been accepted from an
interface by the IP layer, its subsequent delivery to the application interface by the IP layer, its subsequent delivery to the application
connected to a particular socket depends on the multicast listening connected to a particular socket depends on the multicast listening
state of that socket (and possibly also on other conditions, such as state of that socket (and possibly also on other conditions, such as
what transport-layer port the socket is bound to). Note that MLDv2 what transport-layer port the socket is bound to). Note that MLDv2
messages are not subject to source filtering and must always be messages are not subject to source filtering and must always be
processed by hosts and routers.</t> processed by hosts and routers.</t>
</section> </section>
<section anchor="msg_ex" numbered="true" toc="default">
<section title="Exchanging Messages between the Querier and the Listening Nod <name>Exchanging Messages between the Querier and the Listening Nodes</n
es" anchor="msg_ex"> ame>
<t>There are three types of MLDv2 query messages: General Queries,
<t>There are three types of MLDv2 query messages: General Queries,
Multicast Address Specific Queries, and Multicast Address and Source Multicast Address Specific Queries, and Multicast Address and Source
Specific Queries. The Querier periodically sends General Queries, to Specific Queries. The Querier periodically sends General Queries, to
learn multicast address listener information from an attached link. learn multicast address listener information from an attached link.
These queries are used to build and refresh the Multicast Address These queries are used to build and refresh the Multicast Address
Listener state inside all multicast routers on the link.</t> Listener state inside all multicast routers on the link.</t>
<t>Nodes respond to these queries by reporting their per-interface
<t>Nodes respond to these queries by reporting their per-interface Multicast Address Listening state through Current State Report
Multicast Address Listening state, through Current State Report messages sent to a specific multicast address that all MLDv2 routers on
messages sent to a specific multicast address all MLDv2 routers on
the link listen to. On the other hand, if the listening state of a the link listen to. On the other hand, if the listening state of a
node changes, the node immediately reports these changes through a node changes, the node immediately reports these changes through a
State Change Report message. The State Change Report contains either State Change Report message. The State Change Report contains either
Filter Mode Change records, Source List Change records, or records of Filter Mode Change Records, Source List Change Records, or records of
both types. A detailed description of the report messages is both types. A detailed description of the report messages is
presented in <xref target="mar_types" />.</t> presented in <xref target="mar_types" format="default"/>.</t>
<t>Both router and listener state changes are mainly triggered by the
<t>Both router and listener state changes are mainly triggered by the expiration of a specific timer or the reception of an MLD message
expiration of a specific timer, or the reception of an MLD message
(listener state change can be also triggered by the invocation of a (listener state change can be also triggered by the invocation of a
service interface call). Therefore, to enhance protocol robustness, service interface call). Therefore, to enhance protocol robustness,
in spite of the possible unreliability of message exchanges, messages in spite of the possible unreliability of message exchanges, messages
are retransmitted several times. Furthermore, timers are set so as are retransmitted several times. Furthermore, timers are set so as
to take into account the possible message losses, and to wait for to take into account the possible message losses and to wait for
retransmissions.</t> retransmissions.</t>
<t>Periodical General Queries and Current State Reports do not apply
<t>Periodical General Queries and Current State Reports do not apply this rule, in order to not overload the link; it is assumed that in
this rule, in order not to overload the link; it is assumed that in general, these messages do not generate state changes as their main
general these messages do not generate state changes, their main purpose is to refresh existing state. Thus, even if one such
purpose being to refresh existing state. Thus, even if one such
message is lost, the corresponding state will be refreshed during the message is lost, the corresponding state will be refreshed during the
next reporting period.</t> next reporting period.</t>
<t>As opposed to Current State Reports, State Change Reports are
<t>As opposed to Current State Reports, State Change Reports are
retransmitted several times, in order to avoid them being missed by retransmitted several times, in order to avoid them being missed by
one or more multicast routers. The number of retransmissions depends one or more multicast routers. The number of retransmissions depends
on the so-called Robustness Variable. This variable allows tuning on the so-called Robustness Variable. This variable allows tuning
the protocol according to the expected packet loss on a link. If a the protocol according to the expected packet loss on a link. If a
link is expected to be lossy (e.g., a wireless connection), the value link is expected to be lossy (e.g., a wireless connection), the value
of the Robustness Variable may be increased. MLD is robust to of the Robustness Variable may be increased. MLD is robust to
[Robustness Variable]-1 packet losses. This document recommends a [Robustness Variable]-1 packet losses. This document recommends a
default value of 2 for the Robustness Variable (see <xref target="robu default value of 2 for the Robustness Variable (see <xref target="robu
st" />).</t> st" format="default"/>).</t>
<t>If more changes to the same per-interface state entry occur before
<t>If more changes to the same per-interface state entry occur before
all the retransmissions of the State Change Report for the first all the retransmissions of the State Change Report for the first
change have been completed, each additional change triggers the change have been completed, each additional change triggers the
immediate transmission of a new State Change Report. <xref target="ch g_if_state" /> immediate transmission of a new State Change Report. <xref target="ch g_if_state" format="default"/>
shows how the content of this new report is computed. Retransmissions shows how the content of this new report is computed. Retransmissions
of the new State Change Report will be scheduled as well, in order to of the new State Change Report will be scheduled as well, in order to
ensure that each instance of state change is transmitted at least ensure that each instance of state change is transmitted at least
[Robustness Variable] times.</t> [Robustness Variable] times.</t>
<t>If a node on a link expresses, through a State Change Report, its
<t>If a node on a link expresses, through a State Change Report, its
desire to no longer listen to a particular multicast address (or desire to no longer listen to a particular multicast address (or
source), the Querier must query for other listeners of the multicast source), the Querier must query for other listeners of the multicast
address (or source) before deleting the multicast address (or source) address (or source) before deleting the multicast address (or source)
from its Multicast Address Listener state and stopping the from its Multicast Address Listener state and stopping the
corresponding traffic. Thus, the Querier sends a Multicast Address corresponding traffic. Thus, the Querier sends a Multicast Address
Specific Query to verify whether there are nodes still listening to a Specific Query to verify whether there are nodes still listening to a
specified multicast address or not. Similarly, the Querier sends a specified multicast address or not. Similarly, the Querier sends a
Multicast Address and Source Specific Query to verify whether, for a Multicast Address and Source Specific Query to verify whether, for a
specified multicast address, there are nodes still listening to a specified multicast address, there are nodes still listening to a
specific set of sources, or not. <xref target="qry_vars" /> describes each query specific set of sources, or not. <xref target="qry_vars" format="defa ult"/> describes each query
in more detail.</t> in more detail.</t>
<t>Both Multicast Address Specific Queries and Multicast Address and
<t>Both Multicast Address Specific Queries and Multicast Address and
Source Specific Queries are only sent in response to State Change Source Specific Queries are only sent in response to State Change
Reports, never in response to Current State Reports. This Reports, never in response to Current State Reports. This
distinction between the two types of reports is needed to avoid the distinction between the two types of reports is needed to avoid the
router treating all Multicast Listener Reports as potential changes router treating all Multicast Listener Reports as potential changes
in state. By doing so, the fast leave mechanism of MLDv2, described in state. By doing so, the fast leave mechanism of MLDv2, described
<!-- The following cross-reference appears to be to the wrong section in more detail in <xref target="mr-state" format="default"/>, might not be ef
--> fective if a State
in more detail in <xref target="mr-state" />, might not be effective if a Sta Change Report is lost and only the following Current State Report is
te
Change Report is lost, and only the following Current State Report is
received by the router. Nevertheless, it avoids an increased received by the router. Nevertheless, it avoids an increased
processing at the router and it reduces the MLD traffic on the link. processing at the router, and it reduces the MLD traffic on the link.
More details on the necessity of distinguishing between the two More details on the necessity of distinguishing between the two
report types can be found in <xref target="state_change" />.</t> report types can be found in <xref target="state_change" format="defau
lt"/>.</t>
<t>Nodes respond to the above queries through Current State Reports, <t>Nodes respond to the above queries through Current State Reports
that contain their per-interface Multicast Address Listening state that contain their per-interface Multicast Address Listening state
only for the multicast addresses (or sources) being queried.</t> only for the multicast addresses (or sources) being queried.</t>
<t>As stated earlier, in order to ensure protocol robustness, all the
<t>As stated earlier, in order to ensure protocol robustness, all the
queries, except the periodical General Queries, are retransmitted queries, except the periodical General Queries, are retransmitted
several times within a given time interval. The number of several times within a given time interval. The number of
retransmissions depends on the Robustness Variable. If, while retransmissions depends on the Robustness Variable. If, while
scheduling new queries, there are pending queries to be retransmitted scheduling new queries, there are pending queries to be retransmitted
for the same multicast address, the new queries and the pending for the same multicast address, the new queries and the pending
queries have to be merged. In addition, host reports received for a queries have to be merged. In addition, host reports received for a
multicast address with pending queries may affect the contents of multicast address with pending queries may affect the contents of
those queries. The process of building and maintaining the state of those queries. The process of building and maintaining the state of
pending queries is presented in <xref target="spec_qry" />.</t> pending queries is presented in <xref target="spec_qry" format="defaul
t"/>.</t>
<t>Protocol robustness is also enhanced through the use of the S flag <t>Protocol robustness is also enhanced through the use of the S flag (S
(Suppress Router-Side Processing). As described above, when a uppress Router-Side Processing). As described above, when a
Multicast Address Specific or a Multicast Address and Source Specific Multicast Address Specific or a Multicast Address and Source Specific
Query is sent by the Querier, a number of retransmissions of the Query is sent by the Querier, a number of retransmissions of the
query are scheduled. In the original (first) query the S flag is query are scheduled. In the original (first) query, the S flag is
clear. When the Querier sends this query, it lowers the timers for clear. When the Querier sends this query, it lowers the timers for
the concerned multicast address (or source) to a given value; the concerned multicast address (or source) to a given value;
similarly, any non-querier multicast router that receives the query similarly, any non-querier multicast router that receives the query
lowers its timers in the same way. Nevertheless, while waiting for lowers its timers in the same way. Nevertheless, while waiting for
the next scheduled queries to be sent, the Querier may receive a the next scheduled queries to be sent, the Querier may receive a
report that updates the timers. The scheduled queries still have to report that updates the timers. The scheduled queries still have to
be sent, in order to ensure that a non-querier router keeps its state be sent, in order to ensure that a non-querier router keeps its state
synchronized with the current Querier (the non-querier router might synchronized with the current Querier (the non-querier router might
have missed the first query). Nevertheless, the timers should not be have missed the first query). Nevertheless, the timers should not be
lowered again, as a valid answer was already received. Therefore, in lowered again, as a valid answer was already received. Therefore, in
subsequent queries the Querier sets the S flag.</t> subsequent queries, the Querier sets the S flag.</t>
</section> </section>
<section anchor="mr-state" numbered="true" toc="default">
<section anchor="mr-state" title="Building Multicast Address Listener State o <name>Building Multicast Address Listener State on Multicast Routers</na
n Multicast Routers"> me>
<t>Multicast routers that implement MLDv2 (whether they are in Querier
<t>Multicast routers that implement MLDv2 (whether they are in Querier
state or not) keep state per multicast address per attached link. state or not) keep state per multicast address per attached link.
This multicast address listener state consists of a Filter Mode, a This multicast address listener state consists of a Filter Mode, a
Filter Timer, and a Source List, with a timer associated to each Filter Timer, and a Source List, with a timer associated to each
source from the list. The Filter Mode is used to summarize the total source from the list. The Filter Mode is used to summarize the total
listening state of a multicast address to a minimum set, such that listening state of a multicast address to a minimum set, such that
all nodes' listening states are respected. The Filter Mode may all nodes' listening states are respected. The Filter Mode may
change in response to the reception of particular types of report change in response to the reception of particular types of report
messages, or when certain timer conditions occur.</t> messages or when certain timer conditions occur.</t>
<t>A router is in INCLUDE mode for a specific multicast address on a
<t>A router is in INCLUDE mode for a specific multicast address on a
given interface if all the listeners on the link interested in that given interface if all the listeners on the link interested in that
address are in INCLUDE mode. The router state is represented through address are in INCLUDE mode. The router state is represented through
the notation INCLUDE (A), where A is a list of sources, called the the notation INCLUDE (A), where A is a list of sources, called the
"Include List". The Include List is the set of sources that one or "Include List". The Include List is the set of sources that one or
more listeners on the link have requested to receive. All the more listeners on the link have requested to receive. All the
sources from the Include List will be forwarded by the router. Any sources from the Include List will be forwarded by the router. Any
other source that is not in the Include List will be blocked by the other source that is not in the Include List will be blocked by the
router.</t> router.</t>
<t>A source can be added to the current Include List if a listener in
<t>A source can be added to the current Include List if a listener in
INCLUDE mode sends a Current State or a State Change Report that INCLUDE mode sends a Current State or a State Change Report that
includes that source. Each source from the Include List is includes that source. Each source from the Include List is
associated with a source timer that is updated whenever a listener in associated with a source timer that is updated whenever a listener in
INCLUDE mode sends a report that confirms its interest in that INCLUDE mode sends a report that confirms its interest in that
specific source. If the timer of a source from the Include List specific source. If the timer of a source from the Include List
expires, the source is deleted from the Include List.</t> expires, the source is deleted from the Include List.</t>
<t>Besides this "soft leave" mechanism, there is also a "fast leave"
<t>Besides this "soft leave" mechanism, there is also a "fast leave"
scheme in MLDv2; it is also based on the use of source timers. When scheme in MLDv2; it is also based on the use of source timers. When
a node in INCLUDE mode expresses its desire to stop listening to a a node in INCLUDE mode expresses its desire to stop listening to a
specific source, all the multicast routers on the link lower their specific source, all the multicast routers on the link lower their
timers for that source to a given value. The Querier then sends a timers for that source to a given value. The Querier then sends a
Multicast Address and Source Specific Query, to verify whether there Multicast Address and Source Specific Query, to verify whether there
are other listeners for that source on the link, or not. If a report are other listeners for that source on the link, or not. If a report
that includes this source is received before the timer expiration, that includes this source is received before the timer expiration,
all the multicast routers on the link update the source timer. If all the multicast routers on the link update the source timer. If
not, the source is deleted from the Include List. The handling of not, the source is deleted from the Include List. The handling of
the Include List, according to the received reports, is detailed in the Include List, according to the received reports, is detailed in Sections
<xref target="curr_state_recs" /> and <xref target="fm_chg" />.</t> <xref target="curr_state_recs" format="counter"/> and <xref target="fm_chg" f
ormat="counter"/>.</t>
<t>A router is in EXCLUDE mode for a specific multicast address on a <t>A router is in EXCLUDE mode for a specific multicast address on a
given interface if there is at least one listener in EXCLUDE mode for given interface if there is at least one listener in EXCLUDE mode for
that address on the link. When the first report is received from that address on the link. When the first report is received from
such a listener, the router sets the Filter Timer that corresponds to such a listener, the router sets the Filter Timer that corresponds to
that address. This timer is reset each time an EXCLUDE mode listener that address. This timer is reset each time an EXCLUDE mode listener
confirms its listening state through a Current State Report. The confirms its listening state through a Current State Report. The
timer is also updated when a listener, formerly in INCLUDE mode, timer is also updated when a listener, formerly in INCLUDE mode,
announces its filter mode change through a State Change Report announces its filter mode change through a State Change Report
message. If the Filter Timer expires, it means that there are no message. If the Filter Timer expires, it means that there are no
more listeners in EXCLUDE mode on the link. In this case, the router more listeners in EXCLUDE mode on the link. In this case, the router
switches back to INCLUDE mode for that multicast address.</t> switches back to INCLUDE mode for that multicast address.</t>
<t>When the router is in EXCLUDE mode, the router state is represented
<t>When the router is in EXCLUDE mode, the router state is represented
by the notation EXCLUDE (X,Y), where X is called the "Requested List" by the notation EXCLUDE (X,Y), where X is called the "Requested List"
and Y is called the "Exclude List". All sources, except those from and Y is called the "Exclude List". All sources, except those from
the Exclude List, will be forwarded by the router. The Requested the Exclude List, will be forwarded by the router. The Requested
List has no effect on forwarding. Nevertheless, the router has to List has no effect on forwarding. Nevertheless, the router has to
maintain the Requested List for two reasons: maintain the Requested List for two reasons:
<list style="bullets"> </t>
<ol spacing="normal" type="1">
<t>To keep track of sources that listeners in INCLUDE mode listen to. <li>
This is necessary to assure a seamless transition of the router to <t>To keep track of sources that listeners in INCLUDE mode listen
INCLUDE mode, when there is no listener in EXCLUDE mode left. to. This is necessary to assure a seamless transition of the
This transition should not interrupt the flow of traffic to router to INCLUDE mode, when there is no listener in EXCLUDE mode
listeners in INCLUDE mode for that multicast address. Therefore, left. This transition should not interrupt the flow of traffic to
at the time of the transition, the Requested List should contain listeners in INCLUDE mode for that multicast address. Therefore,
the set of sources that nodes in INCLUDE mode have explicitly at the time of the transition, the Requested List should contain
requested. the set of sources that nodes in INCLUDE mode have explicitly
<vspace blankLines="1" /> requested.
When the router switches to INCLUDE mode, the sources in the </t>
Requested List are moved to the Include List, and the Exclude List <t>
is deleted. Before switching, the Requested List can contain an When the router switches to INCLUDE mode, the sources in the Requested
inexact guess of the sources listeners in INCLUDE mode listen to - List are moved to the Include List, and the Exclude List is deleted.
might be too large or too small. These inexactitudes are due to Before switching, the Requested List can contain an inexact guess of the
the fact that the Requested List is also used for fast blocking sources listeners in INCLUDE mode listen to, which might be too large or t
purposes, as described below. If such a fast blocking is oo
required, some sources may be deleted from the Requested List (as small. These inexactitudes are due to the fact that the Requested List
shown in <xref target="curr_state_recs" /> and <xref target="fm_chg" />) i is also used for fast blocking purposes, as described below. If such a
n order to reduce router state. fast blocking is required, some sources may be deleted from the
Nevertheless, in each such case the Filter Timer is updated as Requested List (as shown in Sections <xref target="curr_state_recs"
well. Therefore, listeners in INCLUDE mode will have enough time, format="counter"/> and <xref target="fm_chg" format="counter"/>) in
before an eventual switching, to reconfirm their interest in the order to reduce router state. Nevertheless, in each such case, the
eliminated source(s), and rebuild the Requested List accordingly. Filter Timer is updated as well. Therefore, listeners in INCLUDE mode
The protocol ensures that when a switch to INCLUDE mode occurs, will have enough time, before an eventual switching, to reconfirm their
the Requested List will be accurate. Details about the transition interest in the eliminated source(s) and rebuild the Requested List
of the router to INCLUDE mode are presented in <xref target="mode_s accordingly. The protocol ensures that when a switch to INCLUDE mode
witch" />.</t> occurs, the Requested List will be accurate. Details about the
transition of the router to INCLUDE mode are presented in <xref
<t>To allow the fast blocking of previously unblocked sources. If target="mode_switch" format="default"/>.</t>
</li>
<li>
<t>To allow the fast blocking of previously unblocked sources. If
the router receives a report that contains such a request, the the router receives a report that contains such a request, the
concerned sources are added to the Requested List. Their timers concerned sources are added to the Requested List. Their timers
are set to a given small value, and a Multicast Address and Source are set to a given small value, and a Multicast Address and Source
Specific Query is sent by the Querier, to check whether there are Specific Query is sent by the Querier, to check whether there are
nodes on the link still interested in those sources, or not. If nodes on the link still interested in those sources, or not. If
no node announces its interest in receiving those specific source, no node announces its interest in receiving those specific sources,
the timers of those sources expire. Then, the sources are moved the timers of those sources expire. Then, the sources are moved
from the Requested List to the Exclude List. From then on, the from the Requested List to the Exclude List. From then on, the
sources will be blocked by the router.</t> sources will be blocked by the router.</t>
</list></t> </li>
</ol>
<t>The handling of the EXCLUDE mode router state, according to the <t>The handling of the EXCLUDE mode router state, according to the
received reports, is detailed in <xref target="curr_state_recs" /> and received reports, is detailed in Sections <xref
<xref target="fm_chg" />.</t> target="curr_state_recs" format="counter"/> and <xref target="fm_chg"
format="counter"/>.</t>
<t>Both the MLDv2 router and listener behaviors described in this <t>Both the MLDv2 router and listener behaviors described in this
document were defined to ensure backward interoperability with MLDv1 document were defined to ensure backward interoperability with MLDv1
hosts and routers. Interoperability issues are detailed in <xref targ hosts and routers. Interoperability issues are detailed in <xref targ
et="interop" />.</t> et="interop" format="default"/>.</t>
</section> </section>
</section> </section>
<section anchor="srvc_if" numbered="true" toc="default">
<section title="The Service Interface for Requesting IP Multicast Reception" <name>The Service Interface for Requesting IP Multicast Reception</name>
anchor="srvc_if"> <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 or disable reception of packets sent to ask the IP layer to enable or 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 MLDv2, a node's IP service interface must support the capabilities of MLDv2, a node's IP service interface must support
the following operation:</t> the following operation:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[
IPv6MulticastListen ( socket, interface, IPv6 multicast-address, IPv6MulticastListen ( socket, interface, IPv6 multicast-address,
filter-mode, source-list ) filter-mode, source-list )]]></sourcecode>
]]></artwork>
</figure>
<t>where:
<list style="symbols">
<t>"socket" is an implementation-specific parameter used to <t>where:
distinguish among different requesting entities (e.g., programs, </t>
<ul spacing="normal">
<li>
<t>"socket" is an implementation-specific parameter used to
distinguish among different requesting entities (e.g., programs and
processes) within the node; the socket parameter of BSD Unix processes) within the node; 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 <li>
<t>"interface" is a local identifier of the network interface on
which reception of the specified multicast address is to be which reception of the specified multicast address is to be
enabled or disabled. Interfaces may be physical (e.g., an enabled or disabled. Interfaces may be physical (e.g., an
Ethernet interface) or virtual (e.g., the endpoint of a Frame Ethernet interface) or virtual (e.g., the endpoint of a Frame
Relay virtual circuit or an IP-in-IP "tunnel"). An implementation Relay virtual circuit or an IP-in-IP "tunnel"). An implementation
may allow a special "unspecified" value to be passed as the may allow a special "unspecified" value to be passed as the
interface parameter, in which case the request would apply to the interface parameter, in which case the request would apply to the
"primary" or "default" interface of the node (perhaps established "primary" or "default" interface of the node (perhaps established
by system configuration). If reception of the same multicast by system configuration). If reception of the same multicast
address is desired on more than one interface, IPv6MulticastListen address is desired on more than one interface, IPv6MulticastListen
is invoked separately for each desired interface.</t> is invoked separately for each desired interface.</t>
</li>
<t>"IPv6 multicast address" is the multicast address to which the <li>
<t>"IPv6 multicast address" is the multicast address to which the
request pertains. If reception of more than one multicast address request pertains. If reception of more than one multicast address
on a given interface is desired, IPv6MulticastListen is invoked on a given interface is desired, IPv6MulticastListen is invoked
separately for each desired address.</t> separately for each desired 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 the source addresses listed in the source requested only from the source addresses listed in the source
list parameter. In EXCLUDE mode, reception of packets sent to the list parameter. In EXCLUDE mode, reception of packets sent to the
given multicast address is requested from all source addresses given multicast address is requested from all source addresses
except those listed in the source list parameter.</t> except those listed in the source list parameter.</t>
</li>
<t>"source list" is an unordered list of zero or more unicast <li>
<t>"source list" is an unordered list of zero or more unicast
addresses from which multicast reception is desired or not addresses from which multicast reception is desired or not
desired, depending on the filter mode. An implementation MAY desired, depending on the filter mode. An implementation <bcp14>MAY</bcp1 4>
impose a limit on the size of source lists. When an operation impose a limit on the size of source lists. When an operation
causes the source list size limit to be exceeded, the service causes the source list size limit to be exceeded, the service
interface SHOULD return an error.</t> interface <bcp14>SHOULD</bcp14> return an error.</t>
</list></t> </li>
</ul>
<t>For a given combination of socket, interface, and IPv6 multicast <t>For a given combination of socket, interface, and IPv6 multicast
address, only a single filter mode and source list can be in effect address, only a single filter mode and source list can be in effect
at any one time. Nevertheless, either the filter mode or the source at any one time. Nevertheless, either the filter mode or the source
list, or both, may be changed by subsequent IPv6MulticastListen list, or both, may be changed by subsequent IPv6MulticastListen
requests that specify the same socket, interface, and IPv6 multicast requests that specify the same socket, interface, and IPv6 multicast
address. Each subsequent request completely replaces any earlier address. Each subsequent request completely replaces any earlier
request for the given socket, interface, and multicast address.</t> request for the given socket, interface, and multicast address.</t>
<t>The MLDv1 protocol did not support source filters and had a simpler
<t>The MLDv1 protocol did not support source filters, and had a simpler
service interface; it consisted of Start Listening and Stop Listening service interface; it consisted of Start Listening and Stop Listening
operations to enable and disable listening to a given multicast operations to enable and disable listening to a given multicast
address (from all sources) on a given interface. The equivalent address (from all sources) on a given interface. The equivalent
operations in the new service interface are as follows:</t> operations in the new service interface are as follows.</t>
<t>The Start Listening operation is equivalent to:</t>
<t>The Start Listening operation is equivalent to:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[
IPv6MulticastListen ( socket, interface, IPv6 multicast address, IPv6MulticastListen ( socket, interface, IPv6 multicast address,
EXCLUDE, {} ) EXCLUDE, {} )]]></sourcecode>
]]></artwork>
</figure>
<t>and the Stop Listening operation is equivalent to:</t> <t>and the Stop Listening operation is equivalent to:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[
IPv6MulticastListen ( socket, interface, IPv6 multicast address, IPv6MulticastListen ( socket, interface, IPv6 multicast address,
INCLUDE, {} ) INCLUDE, {} )]]></sourcecode>
]]></artwork>
</figure>
<t>where {} is an empty source list.</t>
<t>An example of an API that provides the capabilities outlined in this
service interface is given in <xref target="RFC3678" />.</t>
</section>
<section title="Multicast Listening State Maintained by Nodes" anchor="node_s
tate">
<section title="Per-Socket State" anchor="sock_state">
<t>For each socket on which IPv6MulticastListen has been invoked, the <t>where {} is an empty source list.</t>
<t>An example of an API that provides the capabilities outlined in this
service interface is given in <xref target="RFC3678" format="default"/
>.</t>
</section>
<section anchor="node_state" numbered="true" toc="default">
<name>Multicast Listening State Maintained by Nodes</name>
<section anchor="sock_state" numbered="true" toc="default">
<name>Per-Socket State</name>
<t>For each socket on which IPv6MulticastListen has been invoked, the
node records the desired multicast listening state for that socket. node records the desired multicast listening 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> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[ (interface, IPv6 multicast address, filter mode, source list)]]></sourcecode>
(interface, IPv6 multicast address, filter mode, source list)
]]></artwork>
</figure>
<t>The per-socket state evolves in response to each invocation of <t>The per-socket state evolves in response to each invocation of
IPv6MulticastListen on the socket, as follows: IPv6MulticastListen on the socket, as follows:
<list style="bullets"> </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 that corresponds to the requested list is empty, then the entry that corresponds to the requested
interface and multicast address is deleted, if present. If no interface and multicast address is deleted, if present. If no
such entry is present, the request has no effect.</t> such entry is present, the request has no effect.</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 that corresponds to the list is non-empty, then the entry that corresponds to the
requested interface and multicast address, if present, is changed requested interface and multicast address, if present, is changed
to contain the requested filter mode and source list. If no such to contain the requested filter mode and source list. If no such
entry is present, a new entry is created, using the parameters entry is present, a new entry is created, using the parameters
specified in the request.</t> specified in the request.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="Per-Interface State" anchor="if_state"> <section anchor="if_state" numbered="true" toc="default">
<name>Per-Interface State</name>
<t>In addition to the per-socket multicast listening state, a node must <t>In addition to the per-socket multicast listening state, a node must
also maintain or compute multicast listening state for each of its also maintain or compute multicast listening state for each of its
interfaces. That state conceptually consists of a set of records of interfaces. That state conceptually consists of a set of records of
the form:</t> the form:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[ (IPv6 multicast address, filter mode, source list)]]></sourcecode>
(IPv6 multicast address, filter mode, source list)
]]></artwork>
</figure>
<t>At most one record per multicast address exists for a given <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 it when different sockets have differing state, but it may differ from the per-socket state when different sockets hav e differing
filter modes and/or source lists for the same multicast address and filter modes and/or source lists for the same multicast address and
interface. For example, suppose one application or process invokes interface. For example, suppose one application or process invokes
the following operation on socket s1:</t> the following operation on socket s1:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[ IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c} )]]></sourcecode>
IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c} )
]]></artwork>
</figure>
<t>requesting reception on interface i of packets sent to multicast <t>requesting reception on interface i of packets sent to multicast
address m, only if they come from the sources a, b, or c. Suppose address m, only if they come from the sources 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>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[ IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d} )]]></sourcecode>
IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d} )
]]></artwork>
</figure>
<t>requesting reception on the same interface i of packets sent to the <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 any 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 one of the sources a, b, c, or d. Thus, in this example, the
listening state of interface i for multicast address m has filter listening 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 that IP layer, its subsequent delivery to the application or process that
listens on a particular socket depends on the multicast listening listens on a particular socket depends on the multicast listening
state of that socket (and possibly also on other conditions, such as state of that socket (and possibly also on other conditions, such as
what transport-layer port the socket is bound to). So, in the above what transport-layer port the socket is bound to). So, in the above
example, if a packet arrives on interface i, destined to multicast example, if a packet arrives on interface i, destined to multicast
address m, with source address a, it may be delivered on socket s1 address m, with source address a, it may be delivered on socket s1
but not on socket s2. Note that MLDv2 messages are not subject to but not on socket s2. Note that MLDv2 messages are not subject to
source filtering and must always be processed by hosts and routers.</t> source filtering and must always be processed by hosts and routers.</t>
<t>Requiring the filtering of packets based upon a socket's multicast
<t>Requiring the filtering of packets based upon a socket's multicast
reception state is a new feature of this service interface. The reception state is a new feature of this service interface. The
previous service interface described no filtering based upon previous service interface described no filtering based upon
multicast listening state; rather, a Start Listening operation on a multicast listening state; rather, a Start Listening operation on a
socket simply caused the node to start to listen to a multicast socket simply caused the node to start to listen to a multicast
address on the given interface; packets sent to that multicast address on the given interface; packets sent to that multicast
address could be delivered to all sockets, whether they had started address could be delivered to all sockets, whether they had started
to listen or not.</t> to listen or not.</t>
<t>The general rules for deriving the per-interface state from the per-
<t>The general rules for deriving the per-interface state from the per-
socket state are as follows: for each distinct (interface, IPv6 socket state are as follows: for each distinct (interface, IPv6
multicast address) pair that appears in any per-socket state, a per- multicast address) pair that appears in any per-socket state, a per-
interface record is created for that multicast address on that interface record is created for that multicast address on that
interface. Considering all socket records that contain the same interface. Considering all socket records that contain the same
(interface, IPv6 multicast address) pair, (interface, IPv6 multicast address) pair,
<list style="bullets"> </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 <t>if any such record has a filter mode of EXCLUDE, then the
the interface record is the intersection of the source lists of filter mode of the interface record is EXCLUDE, and the source
all socket records in EXCLUDE mode, minus those source addresses list of the interface record is the intersection of the source
that appear in any socket record in INCLUDE mode. For example, if lists of all socket records in EXCLUDE mode, minus those source
the 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 <ul spacing="normal">
list of the interface record is the union of the source lists of <li>from socket s1: ( i, m, INCLUDE, {a, b, c} )</li>
all the socket records. For example, if the socket records for <li>from socket s2: ( i, m, INCLUDE, {b, c, d} )</li>
multicast 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>
<t>from socket s1: ( i, m, INCLUDE, {a, b, c} )</t> <ul spacing="normal">
<t>from socket s2: ( i, m, INCLUDE, {b, c, d} )</t> <li>( m, INCLUDE, {a, b, c, d, e, f} )</li>
<t>from socket s3: ( i, m, INCLUDE, {e, f} )</t> </ul>
</list> <t>An implementation <bcp14>MUST NOT</bcp14> use an EXCLUDE
interface record for a multicast address if all sockets for this
then the corresponding interface record on interface i is: multicast address are in INCLUDE state. If system resource limits
are reached when a per- interface state source list is calculated,
<list style="hanging"> an error <bcp14>MUST</bcp14> be returned to the application which
<t>( m, INCLUDE, {a, b, c, d, e, f} )</t> requested the operation.</t>
</list> </li>
</ul>
An implementation MUST NOT use an EXCLUDE interface record for a
multicast address if all sockets for this multicast address are in
INCLUDE state. If system resource limits are reached when a per-
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 per-interface state are <t>The above rules for deriving the per-interface state are
(re)evaluated whenever an IPv6MulticastListen invocation modifies the (re)evaluated whenever an IPv6MulticastListen invocation modifies the
per-socket state by adding, deleting, or modifying a per-socket state per-socket state by adding, deleting, or modifying a per-socket state
record. Note that a change of the per-socket state does not record. Note that a change of the per-socket state does not
necessarily result in a change of the per-interface state.</t> necessarily result in a change of the per-interface state.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Message Formats"> <name>Message Formats</name>
<t>MLDv2 is a sub-protocol of ICMPv6, that is, MLDv2 message types are a
<t>MLDv2 is a sub-protocol of ICMPv6, that is, MLDv2 message types are a
subset of ICMPv6 messages, and MLDv2 messages are identified in IPv6 subset of ICMPv6 messages, and MLDv2 messages are identified in IPv6
packets by a preceding Next Header value of 58. All MLDv2 messages packets by a preceding Next Header value of 58. All MLDv2 messages
described in this document MUST be sent with a link-local IPv6 Source described in this document <bcp14>MUST</bcp14> be sent with a link-local IPv6 Source
Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option
<xref target="RFC2711" /> in a Hop-by-Hop Options header. (The Router Alert option <xref target="RFC2711" format="default"/> in a Hop-by-Hop Options header. (T he Router Alert option
is necessary to cause routers to examine MLDv2 messages sent to IPv6 is necessary to cause routers to examine MLDv2 messages sent to IPv6
multicast addresses in which the routers themselves have no multicast addresses in which the routers themselves have no
interest.) MLDv2 Reports can be sent with the source address set to interest.) MLDv2 Reports can be sent with the source address set to
the unspecified address <xref target="RFC4291" />, if a valid link-loc al IPv6 source the unspecified address <xref target="RFC4291" format="default"/>, if a valid link-local IPv6 source
address has not been acquired yet for the sending interface. (See address has not been acquired yet for the sending interface. (See
<xref target="src_addrs" />. for details.)</t> <xref target="src_addrs" format="default"/> for details.)</t>
<t>There are two MLD message types of concern to the MLDv2 protocol
<t>There are two MLD message types of concern to the MLDv2 protocol
described in this document: described in this document:
<list style="bullets"> </t>
<ul spacing="normal">
<t>Multicast Listener Query (Type = decimal 130)</t> <li>
<t>Multicast Listener Query (Type = decimal 130)</t>
<t>Version 2 Multicast Listener Report (Type = decimal 143). See </li>
<xref target="iana" /> for IANA considerations.</t> <li>
</list></t> <t>Version 2 Multicast Listener Report (Type = decimal 143). See
<xref target="iana" format="default"/> for IANA considerations.</t>
<t>To assure the interoperability with nodes that implement MLDv1 (see </li>
<xref target="interop" />), an implementation of MLDv2 must also support the </ul>
<t>To assure the interoperability with nodes that implement MLDv1 (see
<xref target="interop" format="default"/>), an implementation of MLDv2 must a
lso support the
following two message types: following two message types:
<list style="bullets"> </t>
<!-- [rfced] We believe these values correspond to the values assigned in <https
://www.iana.org/assignments/icmpv6-parameters>. Some of the names are slightly
different (e.g., no version number). Should these be made consistent, or is thi
s as expected?
<t>Version 1 Multicast Listener Report (Type = decimal 131) <xref targ Original:
et="RFC2710" /></t> * Version 1 Multicast Listener Report (Type = decimal 131) [RFC2710]
<t>Version 1 Multicast Listener Done (Type = decimal 132) <xref target * Version 1 Multicast Listener Done (Type = decimal 132) [RFC2710]
="RFC2710" /></t>
</list></t>
<t>Unrecognized message types MUST be silently ignored. Other message In the IANA registry:
131 Multicast Listener Report
132 Multicast Listener Done
-->
<ul spacing="normal">
<li>
<t>Version 1 Multicast Listener Report (Type = decimal 131) <xref targ
et="RFC2710" format="default"/></t>
</li>
<li>
<t>Version 1 Multicast Listener Done (Type = decimal 132) <xref target
="RFC2710" format="default"/></t>
</li>
</ul>
<t>Unrecognized message types <bcp14>MUST</bcp14> be silently ignored. Ot
her message
types may be used by newer versions or extensions of MLD, by types may be used by newer versions or extensions of MLD, 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 MLD Multicast Listener Queries and MLD "Query" and "Report" refer to MLD Multicast Listener Queries and MLD
Version 2 Multicast Listener Reports, respectively.</t> Version 2 Multicast Listener Reports, respectively.</t>
<section anchor="qry_msg" numbered="true" toc="default">
<section title="Multicast Listener Query Message" anchor="qry_msg"> <name>Multicast Listener Query Message</name>
<t>Multicast Listener Queries are sent by multicast routers in Querier
<t>Multicast Listener Queries are sent by multicast routers in Querier state to query the multicast listening state of neighboring
State to query the multicast listening state of neighboring
interfaces. Queries have the following format:</t> interfaces. Queries have the following format:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure>
<artwork><![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 = 130 | Code | Checksum | | Type = 130 | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Maximum Response Code | Reserved | | Maximum Response Code | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
* * * *
| | | |
skipping to change at line 730 skipping to change at line 778
. . . . . .
. . . . . .
+- -+ +- -+
| | | |
* * * *
| | | |
* Source Address [N] * * Source Address [N] *
| | | |
* * * *
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
]]></artwork>
</figure>
<section title="Code">
<t>Initialized to zero by the sender; ignored by receivers.</t> <section numbered="true" toc="default">
</section> <!--[rfced] For consistency with the other subsections, we added
<section title="Checksum"> introductory text to Sections 5.1.1, 5.1.2, 5.2.2, 5.2.6, and
9.3. Please let us know if any further updates are needed.
<t>The standard ICMPv6 checksum; it covers the entire MLDv2 message, Note that Sections 5.1.2 and 5.2.2 contain the same text; however,
plus a "pseudo-header" of IPv6 header fields <xref target="RFC4443" /> Section 5.1.2 does not include a reference to RFC 8200. Should
. For Section 5.1.2 be updated to match, or is this variance intentional?
computing the checksum, the Checksum field is set to zero. When a And may we list RFC 4443 before RFC 8200?
packet is received, the checksum MUST be verified before processing
it.</t>
</section>
<section title="Maximum Response Code" anchor="mrcode"> Some examples:
<t>The Maximum Response Code field specifies the maximum time allowed Original:
before sending a responding Report. The actual time allowed, called 5.1.1. Code
the Maximum Response Delay, is represented in units of milliseconds,
and is derived from the Maximum Response Code as follows:</t>
<t>If Maximum Response Code &lt; 32768, Maximum Response Delay = Maximum Resp onse Code</t> Initialized to zero by the sender; ignored by receivers.
<t>If Maximum Response Code >=32768, Maximum Response Code represents a 5.1.2. Checksum
floating-point value as follows:</t>
<figure> The standard ICMPv6 checksum; it covers the entire MLDv2 message,
<artwork><![CDATA[ plus a "pseudo-header" of IPv6 header fields [RFC4443].
0 1 2 3 4 5 6 7 8 9 A B C D E F
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Maximum Response Delay = (mant | 0x1000) << (exp+3) 5.2.2. Checksum
]]></artwork>
</figure>
<t>Small values of Maximum Response Delay allow MLDv2 routers to tune The standard ICMPv6 checksum; it covers the entire MLDv2 message,
the "leave latency" (the time between the moment the last node on a plus a "pseudo-header" of IPv6 header fields [RFC8200] [RFC4443].
link ceases to listen to a specific multicast address and the moment
the routing protocol is notified that there are no more listeners for
that address). Larger values, especially in the exponential range,
allow the tuning of the burstiness of MLD traffic on a link.</t>
</section>
<section title="Reserved"> Perhaps:
5.1.1. Code
<t>The Reserved field is set to zero on transmission, and ignored on receptio The Code field is initialized to zero by the sender and ignored
n.</t> by receivers.
</section> 5.1.2. Checksum
<section title="Multicast Address"> The Checksum field is the standard ICMPv6 checksum; it covers
the entire MLDv2 message, plus a "pseudo-header" of IPv6
header fields [RFC4443] [RFC8200].
<t>For a General Query, the Multicast Address field is set to zero. For 5.2.2. Checksum
a Multicast Address Specific Query or Multicast Address and Source
Specific Query, it is set to the multicast address being queried (see
<xref target="num_srcs" />, below).</t>
</section>
<section title="Flags"> The Checksum field is the standard ICMPv6 checksum; it covers
the entire MLDv2 message, plus a "pseudo-header" of IPv6 header
fields [RFC4443] [RFC8200].
-->
<name>Code</name>
<t>The Code field is initialized to zero by the sender and ignored by
receivers.</t>
</section>
<section numbered="true" toc="default">
<name>Checksum</name>
<t>The Checksum field is the standard ICMPv6 checksum; it covers the e
ntire MLDv2 message,
plus a "pseudo-header" of IPv6 header fields <xref target="RFC4443" fo
rmat="default"/>. For
computing the checksum, the Checksum field is set to zero. When a
packet is received, the checksum <bcp14>MUST</bcp14> be verified before proce
ssing
it.</t>
</section>
<section anchor="mrcode" numbered="true" toc="default">
<name>Maximum Response Code</name>
<t>The Maximum Response Code field specifies the maximum time
allowed before sending a responding Report. The actual time
allowed, called the "Maximum Response Delay", is represented in units
of milliseconds and is derived from the Maximum Response Code as
follows:</t>
<ul spacing="normal">
<li>If Maximum Response Code &lt; 32768, Maximum Response Delay =
Maximum Response Code.</li>
<li><t>If Maximum Response Code
&gt;=32768, Maximum Response Code represents a floating-point
value as follows:</t>
<t>Allocation of individual bits within the Flags field is described in <artwork name="" type="" align="left" alt=""><![CDATA[
Section 2.2 of <xref target="I-D.ietf-pim-3228bis" />. Future specifications 0 1 2 3 4 5 6 7 8 9 A B C D E F
will define the associated meaning tied to any such allocation.</t> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</section> |1| exp | mant |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
<section title="S Flag (Suppress Router-Side Processing)"> Maximum Response Delay = (mant | 0x1000) << (exp+3)]]></artwork>
</li>
</ul>
<t>When set to one, the S Flag indicates to any receiving multicast <t>Small values of Maximum Response Delay allow MLDv2 routers to tune
the "leave latency" (the time between the moment the last node on a
link ceases to listen to a specific multicast address and the moment
the routing protocol is notified that there are no more listeners for
that address). Larger values, especially in the exponential range,
allow the tuning of the burstiness of MLD traffic on a link.</t>
</section>
<section numbered="true" toc="default">
<name>Reserved</name>
<t>The Reserved field is set to zero on transmission and ignored on re
ception.</t>
</section>
<section numbered="true" toc="default">
<name>Multicast Address</name>
<t>For a General Query, the Multicast Address field is set to zero. F
or
a Multicast Address Specific Query or Multicast Address and Source
Specific Query, it is set to the multicast address being queried (see
<xref target="num_srcs" format="default"/>, below).</t>
</section>
<section numbered="true" toc="default">
<name>Flags</name>
<t>Allocation of individual bits within the Flags field is described i
n
<xref target="RFC9778" sectionFormat="of" section="2.2"/>. Future specificati
ons
will define the associated meaning tied to any such allocation.</t>
</section>
<section numbered="true" toc="default">
<name>S Flag (Suppress Router-Side Processing)</name>
<t>When set to one, the S flag indicates to any receiving multicast
routers that they have to suppress the normal timer updates they routers that they have to suppress the normal timer updates they
perform upon hearing a Query. Nevertheless, it does not suppress the perform upon hearing a Query. Nevertheless, it does not 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 multicast listener.</t> a multicast listener.</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. If the Querier's [Robustness Variable] exceeds used by the Querier. If the Querier's [Robustness Variable] exceeds
7 (the maximum value of the QRV field), the QRV field is set to zero.< /t> 7 (the maximum value of the QRV field), the QRV field is set to zero.< /t>
<t>Routers adopt the QRV value from the most recently received Query a
<t>Routers adopt the QRV value from the most recently received Query as s
their own [Robustness Variable] value, unless that most recently their own [Robustness Variable] value, unless that most recently
received QRV was zero, in which case they use the default [Robustness received QRV was zero, in which case they use the default [Robustness
Variable] value specified in <xref target="robust" />, or a statically configured Variable] value specified in <xref target="robust" format="default"/> or a statically configured
value.</t> value.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="QQIC (Querier's Query Interval Code)"> <name>QQIC (Querier's Query Interval Code)</name>
<t>The QQIC field specifies the [Query
<t>The Querier's Query Interval Code 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> <artwork name="" type="" align="left" alt=""><![CDATA[
<artwork><![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> </li>
</figure> </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 anchor="num_srcs" numbered="true" toc="default">
<section title="Number of Sources (N)" anchor="num_srcs"> <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 Multicast Address Specific Query, and non-zero in a Multicast a Multicast Address Specific Query and non-zero in a Multicast
Address and Source Specific Query. This number is limited by the MTU Address and Source Specific Query. This number is limited by the MTU
of the link over which the Query is transmitted. For example, on an of the link over which the Query is transmitted. For example, on an
Ethernet link with an MTU of 1500 octets, the IPv6 header (40 octets) Ethernet link with an MTU of 1500 octets, the IPv6 header (40 octets)
together with the Hop-By-Hop Extension Header (8 octets) that together with the Hop-by-Hop Extension Header (8 octets) that
includes the Router Alert option consume 48 octets; the MLD fields up includes the Router Alert option consume 48 octets; the MLD fields up
to the Number of Sources (N) field consume 28 octets; thus, there are to the Number of Sources (N) field consume 28 octets; thus, there are
1424 octets left for source addresses, which limits the number of 1424 octets left for source addresses, which limits the number of
source addresses to 89 (1424/16).</t> source addresses to 89 (1424/16).</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 unicast addresses,
<t>The Source Address [i] fields are a vector of n 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 Payload Length field in the IPv6 header of a received Query
<t>If the Payload Length field in the IPv6 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, MLDv2 implementations MUST include those the fields described here, MLDv2 implementations <bcp14>MUST</bcp14> include those
octets in the computation to verify the received MLD Checksum, but octets in the computation to verify the received MLD Checksum, but
MUST otherwise ignore those additional octets. When sending a Query, <bcp14>MUST</bcp14> otherwise ignore those additional octets. When sending a
an MLDv2 implementation MUST NOT include additional octets beyond the Query,
an MLDv2 implementation <bcp14>MUST NOT</bcp14> include additional octets bey
ond the
fields described above.</t> fields described above.</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: </t>
<list style="bullets"> <ul spacing="normal">
<li>
<t>A "General Query" is sent by the Querier to learn which multicast <t>A "General Query" is sent by the Querier to learn which
addresses have listeners on an attached link. In a General Query, multicast addresses have listeners on an attached link. In a
both the Multicast Address field and the Number of Sources (N) General Query, both the Multicast Address field and the Number
field are zero.</t> of Sources (N) field are zero.</t>
</li>
<t>A "Multicast Address Specific Query" is sent by the Querier to <li>
learn if a particular multicast address has any listeners on an <t>A "Multicast Address Specific Query" is sent by the Querier
attached link. In a Multicast Address Specific Query, the to learn if a particular multicast address has any listeners on
Multicast Address field contains the multicast address of an attached link. In a Multicast Address Specific Query, the
interest, while the Number of Sources (N) field is set to zero.</t> Multicast Address field contains the multicast address of
interest, while the Number of Sources (N) field is set to
<t>A "Multicast Address and Source Specific Query" is sent by the zero.</t>
Querier to learn if any of the sources from the specified list for </li>
the particular multicast address has any listeners on an attached <li>
link or not. In a Multicast Address and Source Specific Query the <t>A "Multicast Address and Source Specific Query" is sent by
Multicast Address field contains the multicast address of the Querier to learn if any of the sources from the specified
interest, while the Source Address [i] field(s) contain(s) the list for the particular multicast address has any listeners on
source address(es) of interest.</t> an attached link or not. In a Multicast Address and Source
</list></t> Specific Query the Multicast Address field contains the
</section> multicast address of interest, while the Source Address [i]
field(s) contain(s) the source address(es) of interest.</t>
<section title="Source Addresses for Queries"> </li>
</ul>
<t>All MLDv2 Queries MUST be sent with a valid IPv6 link-local source </section>
<section numbered="true" toc="default">
<name>Source Addresses for Queries</name>
<t>All MLDv2 Queries <bcp14>MUST</bcp14> be sent with a valid IPv6 lin
k-local source
address. If a node (router or host) receives a Query message with address. If a node (router or host) receives a Query message with
the IPv6 Source Address set to the unspecified address (::), or any the IPv6 Source Address set to the unspecified address (::), or any
other address that is not a valid IPv6 link-local address, it MUST other address that is not a valid IPv6 link-local address, it <bcp14>MUST</bc
silently discard the message and SHOULD log a warning.</t> p14>
</section> silently discard the message and <bcp14>SHOULD</bcp14> log a warning.<
/t>
<section title="Destination Addresses for Queries"> </section>
<section numbered="true" toc="default">
<t>In MLDv2, General Queries are sent to the link-scope all-nodes <name>Destination Addresses for Queries</name>
<t>In MLDv2, General Queries are sent to the link-scope all-nodes
multicast address (ff02::1). Multicast Address Specific and multicast address (ff02::1). Multicast Address Specific and
Multicast Address and Source Specific Queries are sent with an IP Multicast Address and Source Specific Queries are sent with an IP
destination address equal to the multicast address of interest. destination address equal to the multicast address of interest.
However, a node MUST accept and process any Query whose IP However, a node <bcp14>MUST</bcp14> accept and process any Query whose IP
Destination Address field contains any of the addresses (unicast or Destination Address field contains any of the addresses (unicast or
multicast) assigned to the interface on which the Query arrives. This multicast) assigned to the interface on which the Query arrives. This
might be useful, e.g., for debugging purposes.</t> might be useful, e.g., for debugging purposes.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Version 2 Multicast Listener Report Message"> <name>Version 2 Multicast Listener Report Message</name>
<t>Version 2 Multicast Listener Reports are sent by IP nodes to report
<t>Version 2 Multicast Listener Reports are sent by IP nodes to report
(to neighboring routers) the current multicast listening state, or (to neighboring routers) the current multicast listening state, or
changes in the multicast listening state, of their interfaces. changes in the multicast listening state, of their interfaces.
Reports have the following format:</t> Reports have the following format:</t>
<artwork name="" type="" align="left" alt=""><![CDATA[
<figure>
<artwork><![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 = 143 | Reserved | Checksum | | Type = 143 | Reserved | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Flags |Nr of Mcast Address Records (M)| | Flags |Nr of Mcast Address Records (M)|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Multicast Address Record [1] . . Multicast Address Record [1] .
skipping to change at line 969 skipping to change at line 1045
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| . | | . |
. . . . . .
| . | | . |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Multicast Address Record [M] . . Multicast Address Record [M] .
. . . .
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
]]></artwork>
</figure>
<t>Each Multicast Address Record has the following internal format:</t> <t>Each Multicast Address Record has the following internal format:</t>
<figure> <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 *
| | | |
* * * *
| | | |
skipping to change at line 1021 skipping to change at line 1094
* Source Address [N] * * Source Address [N] *
| | | |
* * * *
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | | |
. . . .
. Auxiliary Data . . Auxiliary Data .
. . . .
| | | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork>
]]></artwork>
</figure>
<section title="Reserved">
<t>The Reserved field is set to zero on transmission, and ignored on receptio
n.</t>
</section>
<section title="Checksum">
<t>The standard ICMPv6 checksum; it covers the entire MLDv2 message, <section numbered="true" toc="default">
plus a "pseudo-header" of IPv6 header fields <xref target="RFC8200" /><xref t <name>Reserved</name>
arget="RFC4443" />. In <t>The Reserved field is set to zero on transmission and ignored on re
ception.</t>
</section>
<section numbered="true" toc="default">
<name>Checksum</name>
<t>The Checksum Field is the standard ICMPv6 checksum; it covers the e
ntire MLDv2 message, plus a "pseudo-header" of IPv6 header fields <xref target="
RFC8200" format="default"/> <xref target="RFC4443" format="default"/>. In
order to compute the checksum, the Checksum field is set to zero. order to compute the checksum, the Checksum field is set to zero.
When a packet is received, the checksum MUST be verified before When a packet is received, the checksum <bcp14>MUST</bcp14> be verified befor e
processing it.</t> processing it.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Flags"> <name>Flags</name>
<t>Allocation of individual bits within the Flags field is described i
<t>Allocation of individual bits within the Flags field is described in n
Section 2.3 of <xref target="I-D.ietf-pim-3228bis" />. Future specifications <xref target="RFC9778" sectionFormat="of" section="2.3"/>. Future specificati
ons
will define the associated meaning tied to any such allocation.</t> will define the associated meaning tied to any such allocation.</t>
</section>
</section> <section numbered="true" toc="default">
<name>Nr of Mcast Address Records (M)</name>
<section title="Nr of Mcast Address Records (M)"> <t>The Nr of the Mcast Address Records (M) field specifies how many
<t>The Nr of Mcast Address Records (M) field specifies how many
Multicast Address Records are present in this Report.</t> Multicast Address Records are present in this Report.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Address Record"> <name>Multicast Address Record</name>
<t>Each Multicast Address Record is a block of fields that contain
<t>Each Multicast Address Record is a block of fields that contain
information on the sender listening to a single multicast address on information on the sender listening to a single multicast address 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>The Record Type field specifies the type of the Multicast Address R
<t>It specifies the type of the Multicast Address Record. See ecord. See
<xref target="mar_types" /> for a detailed description of the different possi <xref target="mar_types" format="default"/> for a detailed description of the
ble Record different possible Record
Types.</t> Types.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Aux Data Len"> <name>Aux Data Len</name>
<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 Multicast Address Record, in units of 32-bit words. It
Field in this Multicast Address Record, in units of 32-bit words. It
may contain zero, to indicate the absence of any auxiliary data.</t> may contain 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 Multicast Address Record.</t> are present in this Multicast Address Record.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Address"> <name>Multicast Address</name>
<t>The Multicast Address field contains the multicast address to which
<t>The Multicast Address field contains the multicast address to which
this Multicast Address Record pertains.</t> this Multicast Address 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 unicast addresses,
<t>The Source Address [i] fields are a vector of n unicast addresses,
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
that pertain to this Multicast Address Record. The protocol that pertains to this Multicast Address Record. The protocol
specified in this document, MLDv2, does not define any auxiliary specified in this document, MLDv2, does not define any auxiliary
data. Therefore, implementations of MLDv2 MUST NOT include any data. Therefore, implementations of MLDv2 <bcp14>MUST NOT</bcp14> include an
auxiliary data (i.e., MUST set the Aux Data Len field to zero) in any y
transmitted Multicast Address Record, and MUST ignore any such data auxiliary data (i.e., <bcp14>MUST</bcp14> set the Aux Data Len field to zero)
in any
transmitted Multicast Address Record and <bcp14>MUST</bcp14> ignore any such
data
present in any received Multicast Address Record. The semantics and present in any received Multicast Address Record. The semantics and
the internal encoding of the Auxiliary Data field are to be defined the internal encoding of the Auxiliary Data field are to be defined
by any future version or extension of MLD that uses this field.</t> by any future version or extension of MLD that uses this field.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Additional Data"> <name>Additional Data</name>
<t>If the Payload Length field in the IPv6 header of a received Report
<t>If the Payload Length field in the IPv6 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 Multicast Address Record, MLDv2 implementations MUST include the last Multicast Address Record, MLDv2 implementations <bcp14>MUST</bcp14> include
those octets in the computation to verify the received MLD Checksum, those octets in the computation to verify the received MLD Checksum,
but MUST otherwise ignore those additional octets. When sending a but <bcp14>MUST</bcp14> otherwise ignore those additional octets. When sendi
Report, an MLDv2 implementation MUST NOT include additional octets ng a
Report, an MLDv2 implementation <bcp14>MUST NOT</bcp14> include additional oc
tets
beyond the last Multicast Address Record.</t> beyond the last Multicast Address Record.</t>
</section> </section>
<section anchor="mar_types" numbered="true" toc="default">
<section title="Multicast Address Record Types" anchor="mar_types"> <name>Multicast Address Record Types</name>
<t>There are a number of different types of Multicast Address
<t>There are a number of different types of Multicast Address Records Records that may be included in a Report message:</t>
that may be included in a Report message:
<list style="bullets">
<t>A "Current State Record" is sent by a node in response to a Query
received on an interface. It reports the current listening state
of that interface, with respect to a single multicast address.
The Record Type of a Current State Record may be one of the
following two values:
<list style="format %d - " counter="my_cnt">
<t>MODE_IS_INCLUDE - indicates that the interface has a filter
mode of INCLUDE for the specified multicast address. The
Source Address [i] fields in this Multicast Address Record
contain the interface's source list for the specified
multicast address. A MODE_IS_INCLUDE Record is never sent
with an empty source list.</t>
<t>MODE_IS_EXCLUDE - indicates that the interface has a filter
mode of EXCLUDE for the specified multicast address. The
Source Address [i] fields in this Multicast Address Record
contain the interface's source list for the specified
multicast address, if it is non-empty. An
SSM-aware host SHOULD NOT send a MODE_IS_EXCLUDE record type for
multicast addresses that fall within the SSM address range as
they will be ignored by SSM-aware routers <xref target="RFC4604"/>.</t
>
</list></t>
<t>A "Filter Mode Change Record" is sent by a node whenever a local
invocation of IPv6MulticastListen causes a change of the filter
mode (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to
INCLUDE) of the interface-level state entry for a particular
multicast address, whether the source list changes at the same
time or not. The Record is included in a Report sent from the
interface on which the change occurred. The Record Type of a
Filter Mode Change Record may be one of the following two values:
<list style="format %d - " counter="my_cnt">
<t>CHANGE_TO_INCLUDE_MODE - indicates that the interface has
changed to INCLUDE filter mode for the specified multicast
address. The Source Address [i] fields in this Multicast
Address Record contain the interface's new source list for
the specified multicast address, if it is non-empty.</t>
<t>CHANGE_TO_EXCLUDE_MODE - indicates that the interface has
changed to EXCLUDE filter mode for the specified multicast
address. The Source Address [i] fields in this Multicast
Address Record contain the interface's new source list for
the specified multicast address, if it is non-empty. An
SSM-aware host SHOULD NOT send a CHANGE_TO_EXCLUDE_MODE record type fo
r
multicast addresses that fall within the SSM address range.</t>
</list></t>
<t>A "Source List Change Record" is sent by a node whenever a local
invocation of IPv6MulticastListen causes a change of source list
that is not coincident with a change of filter mode, of the
interface-level state entry for a particular multicast address.
The Record is included in a Report sent from the interface on
which the change occurred. The Record Type of a Source List
Change Record may be one of the following two values:
<list style="format %d - " counter="my_cnt">
<t>ALLOW_NEW_SOURCES - indicates that the Source Address [i]
fields in this Multicast Address Record contain a list of
the additional sources that the node wishes to listen to,
for packets sent to the specified multicast address. If
the change was to an INCLUDE source list, these are the
addresses that were added to the list; if the change was to
an EXCLUDE source list, these are the addresses that were
deleted from the list.</t>
<t>BLOCK_OLD_SOURCES - indicates that the Source Address [i]
fields in this Multicast Address Record contain a list of
the sources that the node no longer wishes to listen to,
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>
</list></t>
</list></t>
<t>If a change of source list results in both allowing new sources and <ul spacing="normal">
<li><t>A "Current State Record" is sent by a node in response to
a Query received on an interface. It reports the current
listening state of that interface, with respect to a single
multicast address. The Record Type of a Current State Record may
be one of the following two values:</t>
<ol group="my_cnt" spacing="normal" type="1"><li>
<t>MODE_IS_INCLUDE - indicates that the interface has a
filter mode of INCLUDE for the specified multicast address.
The Source Address [i] fields in this Multicast Address
Record contain the interface's source list for the specified
multicast address. A MODE_IS_INCLUDE Record is never sent
with an empty source list.</t>
</li>
<li>
<t>MODE_IS_EXCLUDE - indicates that the interface has a
filter mode of EXCLUDE for the specified multicast address.
The Source Address [i] fields in this Multicast Address
Record contain the interface's source list for the specified
multicast address, if it is non-empty. An SSM-aware host
<bcp14>SHOULD NOT</bcp14> send a MODE_IS_EXCLUDE record type
for multicast addresses that fall within the SSM address
range as they will be ignored by SSM-aware routers <xref
target="RFC4604" format="default"/>.</t>
</li>
</ol>
</li>
<li>
<t>A "Filter Mode Change Record" is sent by a node whenever a
local invocation of IPv6MulticastListen causes a change of the
filter mode (i.e., a change from INCLUDE to EXCLUDE, or from
EXCLUDE to INCLUDE) of the interface-level state entry for a
particular multicast address, whether the source list changes at
the same time or not. The Record is included in a Report sent
from the interface on which the change occurred. The Record
Type of a Filter Mode Change Record may be one of the following
two values:
</t>
<ol group="my_cnt" spacing="normal" type="1"><li>
<t>CHANGE_TO_INCLUDE_MODE - indicates that the interface has
changed to INCLUDE filter mode for the specified multicast
address. The Source Address [i] fields in this Multicast
Address Record contain the interface's new source list for
the specified multicast address, if it is non-empty.</t>
</li>
<li>
<t>CHANGE_TO_EXCLUDE_MODE - indicates that the interface has
changed to EXCLUDE filter mode for the specified multicast
address. The Source Address [i] fields in this Multicast
Address Record contain the interface's new source list for
the specified multicast address, if it is non-empty. An
SSM-aware host <bcp14>SHOULD NOT</bcp14> send a
CHANGE_TO_EXCLUDE_MODE record type for multicast addresses
that fall within the SSM address range.</t>
</li>
</ol>
</li>
<li>
<t>A "Source List Change Record" is sent by a node whenever a
local invocation of IPv6MulticastListen causes a change of
source list that is not coincident with a change of filter mode,
of the interface-level state entry for a particular multicast
address. The Record is included in a Report sent from the
interface on which the change occurred. The Record Type of a
Source List Change Record may be one of the following two
values:</t>
<ol group="my_cnt" spacing="normal" type="1"><li>
<t>ALLOW_NEW_SOURCES - indicates that the Source Address [i]
fields in this Multicast Address Record contain a list of
the additional sources that the node wishes to listen to,
for packets sent to the specified multicast address. If the
change was to an INCLUDE source list, these are the
addresses that were added to the list; if the change was to
an EXCLUDE source list, these are the addresses that were
deleted from the list.</t>
</li>
<li>
<t>BLOCK_OLD_SOURCES - indicates that the Source Address [i]
fields in this Multicast Address Record contain a list of
the sources that the node no longer wishes to listen to, 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 Multicast Address Records are sent for blocking old sources, then two Multicast Address Records are sent for
the same multicast address, one of type ALLOW_NEW_SOURCES and one of the same multicast address, one of type ALLOW_NEW_SOURCES and one of
type BLOCK_OLD_SOURCES.</t> type BLOCK_OLD_SOURCES.</t>
<t>We use the term "State Change Record" to refer to either a Filter
<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>Multicast Address Records with an unrecognized Record Type value <b
<t>Multicast Address Records with an unrecognized Record Type value MUST cp14>MUST</bcp14>
be silently ignored, with the rest of the report being processed.</t> be silently ignored, with the rest of the report being processed.</t>
<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 Multicast Address Record that pertains to describe the contents of a Multicast Address Record that pertains to
a particular multicast address:</t> a particular multicast address:</t>
<figure> <artwork name="" type="" align="left" alt=""><![CDATA[
<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]]></artwork>
BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x
]]></artwork>
</figure>
<t>where x is either: <t>where x is either:
<list style="bullets"> </t>
<t>a capital letter (e.g., "A") to represent the set of source <ul spacing="normal">
addresses, or</t> <li>
<t>a set expression (e.g., "A+B"), where "A+B" means the union of <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 sets 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> "A-B" means the removal of all elements of set B from set A.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="Source Addresses for Reports" anchor="src_addrs"> <section anchor="src_addrs" numbered="true" toc="default">
<name>Source Addresses for Reports</name>
<t>An MLDv2 Report MUST be sent with a valid IPv6 link-local source <t>An MLDv2 Report <bcp14>MUST</bcp14> be sent with a valid IPv6 link-
local source
address, or the unspecified address (::), if the sending interface address, or the unspecified address (::), if the sending interface
has not acquired a valid link-local address yet. Sending reports has not acquired a valid link-local address yet. Sending reports
with the unspecified address is allowed to support the use of IP with the unspecified address is allowed to support the use of IP
multicast in the Neighbor Discovery Protocol <xref target="RFC4861" />. For multicast in the Neighbor Discovery Protocol <xref target="RFC4861" format="d
stateless autoconfiguration, as defined in <xref target="RFC4862" />, a node efault"/>. For
is stateless autoconfiguration, as defined in <xref target="RFC4862" format="def
ault"/>, a node is
required to join several IPv6 multicast groups, in order to perform required to join several IPv6 multicast groups, in order to perform
Duplicate Address Detection (DAD). Prior to DAD, the only address Duplicate Address Detection (DAD). Prior to DAD, the only address
the reporting node has for the sending interface is a tentative one, the reporting node has for the sending interface is a tentative one,
which cannot be used for communication. Thus, the unspecified which cannot be used for communication. Thus, the unspecified
address must be used.</t> address must be used.</t>
<t>On the other hand, routers <bcp14>MUST</bcp14> silently discard a m
<t>On the other hand, routers MUST silently discard a message that is essage that is
not sent with a valid link-local address, without taking any action not sent with a valid link-local address, without taking any action
on the contents of the packet. Thus, a Report is discarded if the on the contents of the packet. Thus, a Report is discarded if the
router cannot identify the source address of the packet as belonging router cannot identify the source address of the packet as belonging
to a link connected to the interface on which the packet was to a link connected to the interface on which the packet was
received. A Report sent with the unspecified address is also received. A Report sent with the unspecified address is also
discarded by the router. This enhances security, as unidentified discarded by the router. This enhances security, as unidentified
reporting nodes cannot influence the state of the MLDv2 router(s). reporting nodes cannot influence the state of the MLDv2 router(s).
Nevertheless, the reporting node has modified its listening state for Nevertheless, the reporting node has modified its listening state for
multicast addresses that are contained in the Multicast Address multicast addresses that are contained in the Multicast Address
Records of the Report message. From now on, it will treat packets Records of the Report message. From now on, it will treat packets
sent to those multicast addresses according to this new listening sent to those multicast addresses according to this new listening
state. Once a valid link-local address is available, a node SHOULD state. Once a valid link-local address is available, a node <bcp14>SHOULD</b cp14>
generate new MLDv2 Report messages for all multicast addresses joined generate new MLDv2 Report messages for all multicast addresses joined
on the interface.</t> on the interface.</t>
</section> </section>
<section anchor="dest_addr" numbered="true" toc="default">
<section title="Destination Addresses for Reports" anchor="dest_addr"> <name>Destination Addresses for Reports</name>
<t>Version 2 Multicast Listener Reports are sent with an IP destinatio
<t>Version 2 Multicast Listener Reports are sent with an IP destination n
address of ff02::16, to which all MLDv2-capable multicast address of ff02::16, to which all MLDv2-capable multicast
routers listen (see <xref target="iana" /> for IANA considerations related to routers listen (see <xref target="iana" format="default"/> for IANA considera tions related to
this special destination address). A node that operates in version 1 this special destination address). A node that operates in version 1
compatibility mode (see details in <xref target="interop" />) sends version 1 Reports compatibility mode (see details in <xref target="interop" format="default"/>) sends version 1 Reports
to the multicast address specified in the Multicast Address field of to the multicast address specified in the Multicast Address field of
the Report. In addition, a node MUST accept and process any version the Report. In addition, a node <bcp14>MUST</bcp14> accept and process any v ersion
1 Report whose IP Destination Address field contains any of the 1 Report whose IP Destination Address field contains any of the
IPv6 addresses (unicast or multicast) assigned to the interface on IPv6 addresses (unicast or multicast) assigned to the interface on
which the Report arrives. This might be useful, e.g., for debugging which the Report arrives. This might be useful, e.g., for debugging
purposes.</t> purposes.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Listener Report Size"> <name>Multicast Listener Report Size</name>
<t>If the set of Multicast Address Records required in a Report does n
<t>If the set of Multicast Address Records required in a Report does not ot
fit within the size limit of a single Report message (as determined fit within the size limit of a single Report message (as determined
by the MTU of the link on which it will be sent), the Multicast by the MTU of the link on which it will be sent), the Multicast
Address Records are sent in as many Report messages as needed to Address Records are sent in as many Report messages as needed to
report the entire set.</t> report the entire set.</t>
<t>If a single Multicast Address Record contains so many source
<t>If a single Multicast Address Record contains so many source
addresses that it does not fit within the size limit of a single addresses that it does not fit within the size limit of a single
Report message, then: Report message, then:
<list style="bullets"> </t>
<ul spacing="normal">
<t>if its Type is not IS_EX or TO_EX, it is split into multiple <li>
<t>if its Type is not IS_EX or TO_EX, it is split into multiple
Multicast Address Records; each such record contains a different Multicast Address Records; each such record contains a different
subset of the source addresses, and is sent in a separate Report.</t> subset of the source addresses and is sent in a separate Report.</t>
</li>
<t>if its Type is IS_EX or TO_EX, a single Multicast Address Record <li>
<t>if its Type is IS_EX or TO_EX, a single Multicast Address Recor
d
is sent, with as many source addresses as can fit; the remaining is sent, with as many source addresses as can fit; the remaining
source addresses are not reported. Although the choice of which source addresses are not reported. Although the choice of which
sources to report is arbitrary, it is preferable to report the sources to report is arbitrary, it is preferable to report the
same set of sources in each subsequent report, rather than same set of sources in each subsequent report, rather than
reporting different sources each time.</t> reporting different sources each time.</t>
</list></t> </li>
</section> </ul>
</section> </section>
</section> </section>
</section>
<section title="Protocol Description for Multicast Address Listeners" anchor= <section anchor="proto" numbered="true" toc="default">
"proto"> <name>Protocol Description for Multicast Address Listeners</name>
<t>MLD is an asymmetric protocol, as it specifies separate behaviors for
<t>MLD is an asymmetric protocol, as it specifies separate behaviors for
multicast address listeners -- that is, hosts or routers that listen multicast address listeners -- that is, hosts or routers that listen
to multicast packets -- and multicast routers. This section to multicast packets -- and multicast routers. This section
describes the part of MLDv2 that applies to all multicast address describes the part of MLDv2 that applies to all multicast address
listeners. (Note that a multicast router that is also a multicast listeners. (Note that a multicast router that is also a multicast
address listener performs both parts of MLDv2; it receives and it address listener performs both parts of MLDv2; it receives and it
responds to its own MLD messages, as well as to those of its responds to its own MLD messages as well as to those of its
neighbors.) The multicast router part of MLDv2 is described in neighbors.) The multicast router part of MLDv2 is described in
<xref target="mr_proto" />.</t> <xref target="mr_proto" format="default"/>.</t>
<t>A node performs the protocol described in this section over all
<t>A node 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 are connected to the same link.</t> than one of those interfaces are connected to the same link.</t>
<t>For interoperability with multicast routers that run the MLDv1
<t>For interoperability with multicast routers that run the MLDv1
protocol, nodes maintain a Host Compatibility Mode variable for each protocol, nodes maintain a Host Compatibility Mode 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 multicast address listener nodes on describes the behavior of multicast address listener nodes on
interfaces for which Host Compatibility Mode = MLDv2. The algorithm interfaces for which Host Compatibility Mode = MLDv2. The algorithm
for determining Host Compatibility Mode, and the behavior if its for determining Host Compatibility Mode and the behavior if its
value is set to MLDv1, are described in <xref target="interop" />.</t> value is set to MLDv1 are described in <xref target="interop" format="default
"/>.</t>
<t>The link-scope all-nodes multicast address, (ff02::1), is handled as <t>The link-scope all-nodes multicast address, (ff02::1), is handled as
a special case. On all nodes -- that is all hosts and routers, a special case. On all nodes -- that is, all hosts and routers
including multicast routers -- listening to packets destined to the including multicast routers -- listening to packets destined to the
all-nodes multicast address, from all sources, is permanently enabled all-nodes multicast address, from all sources, is permanently enabled
on all interfaces on which multicast listening is supported. on all interfaces on which multicast listening is supported.
No MLD messages are ever sent regarding neither the link-scope all-nodes No MLD messages are ever sent regarding neither the link-scope all-nodes
multicast address, nor any multicast address of scope 0 (reserved) or multicast address, nor any multicast address of scope 0 (reserved) or
1 (node-local). Multicast listeners MUST send MLD messages for all multicast 1 (node-local). Multicast listeners <bcp14>MUST</bcp14> send MLD messages for all multicast
addresses except for the link-scope all-nodes multicast address and any multi cast addresses except for the link-scope all-nodes multicast address and any multi cast
addresses of scope less than 2.</t> addresses of scope less than 2.</t>
<t>There are three types of events that trigger MLDv2 protocol actions
<t>There are three types of events that trigger MLDv2 protocol actions
on an interface: on an interface:
<list style="bullets"> </t>
<ul spacing="normal">
<t>a change of the per-interface listening state, caused by a local <li>
<t>a change of the per-interface listening state, caused by a local
invocation of IPv6MulticastListen;</t> invocation of IPv6MulticastListen;</t>
<t>the firing of a specific timer;</t> </li>
<t>the reception of a Query.</t> <li>
</list></t> <t>the firing of a specific timer; and</t>
</li>
<t>(Received MLD messages of types other than Query are silently <li>
<t>the reception of a Query.</t>
</li>
</ul>
<t>(Received MLD messages of types other than Query are silently
ignored, except as required for interoperation with nodes that ignored, except as required for interoperation with nodes that
implement MLDv1.)</t> implement MLDv1.)</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
case. Timer and counter names appear in square brackets. Default case. Timer and counter names appear in square brackets. Default
values for those timers and counters are specified in <xref target="ti values for those timers and counters are specified in <xref target="ti
mers" />.</t> mers" format="default"/>.</t>
<section anchor="chg_if_state" numbered="true" toc="default">
<section title="Action on Change of Per-Interface State" anchor="chg_if_state <name>Action on Change of Per-Interface State</name>
"> <t>An invocation of IPv6MulticastListen may cause the multicast
<t>An invocation of IPv6MulticastListen may cause the multicast
listening state of an interface to change, according to the rules in listening 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 <xref target="if_state" format="default"/>. Each such change affects the per -interface entry for a
single multicast address.</t> single multicast address.</t>
<t>A change of per-interface state causes the node to immediately
<t>A change of per-interface state causes the node to immediately
transmit a State Change Report from that interface. The type and transmit a State Change Report from that interface. The type and
contents of the Multicast Address Record(s) in that Report are contents of the Multicast Address Record(s) in that Report are
determined by comparing the filter mode and source list for the determined by comparing the filter mode and source list for the
affected multicast address before and after the change, according to affected multicast address before and after the change, according to
<xref target="rec-xmit-logic"/>. If no per-interface state existed for that <xref target="rec-xmit-logic" format="default"/>. If no per-interface state existed for that
multicast address before the change (i.e., the change consisted of multicast address before the change (i.e., the change consisted of
creating a new per-interface record), or if no state exists after the creating a new per-interface record), or if no state exists after the
change (i.e., the change consisted of deleting a per-interface change (i.e., the change consisted of deleting a per-interface
record), then the "non-existent" state is considered to have an record), then the "non-existent" state is considered to have an
INCLUDE filter mode and an empty source list.</t> INCLUDE filter mode and an empty source list.</t>
<table align="left" anchor="rec-xmit-logic">
<table title="State Change Record Transmission Logic" anchor="rec-xmit-logic" <name>State Change Record Transmission Logic</name>
> <tbody>
<tbody> <tr>
<tr><th align="center">Old State</th> <th>Old State</th>
<th align="center">New State</th> <th>New State</th>
<th align="center">State Change Record Sent</th></tr> <th>State Change Record Sent</th>
<tr><td>INCLUDE (A)</td><td>INCLUDE (B)</td><td>ALLOW (B-A), BLOCK (A-B </tr>
)</td></tr> <tr>
<tr><td>EXCLUDE (A)</td><td>EXCLUDE (B)</td><td>ALLOW (A-B), BLOCK (B-A <td>INCLUDE (A)</td>
)</td></tr> <td>INCLUDE (B)</td>
<tr><td>INCLUDE (A)</td><td>EXCLUDE (B)</td><td>TO_EX (B)</td></tr> <td>ALLOW (B-A), BLOCK (A-B)</td>
<tr><td>EXCLUDE (A)</td><td>INCLUDE (B)</td><td>TO_IN (B)</td></tr> </tr>
</tbody> <tr>
</table> <td>EXCLUDE (A)</td>
<td>EXCLUDE (B)</td>
<t>If the computed source list for either an ALLOW or a BLOCK State <td>ALLOW (A-B), BLOCK (B-A)</td>
</tr>
<tr>
<td>INCLUDE (A)</td>
<td>EXCLUDE (B)</td>
<td>TO_EX (B)</td>
</tr>
<tr>
<td>EXCLUDE (A)</td>
<td>INCLUDE (B)</td>
<td>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.</t> Change Record is empty, that record is omitted from the Report.</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, [Robustness Variable] - 1 one or more multicast routers, [Robustness Variable] - 1
retransmissions are scheduled, through a Retransmission Timer, at retransmissions are scheduled, through a Retransmission Timer, at
intervals chosen at random from the range (0, [Unsolicited Report intervals chosen at random from the range (0, [Unsolicited Report
Interval]).</t> Interval]).</t>
<t>If more changes to the same per-interface state entry occur before
<t>If more changes to the same per-interface state entry occur before
all the retransmissions of the State Change Report for the first all the retransmissions of the State Change Report for the first
change have been completed, each such additional change triggers the change 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 Report are calculated as follows:
<t>The contents of the new Report are calculated as follows: </t>
<list style="bullets"> <ul spacing="normal">
<li>
<t>As for the first Report, the per-interface state for the affected <t>As for the first Report, the per-interface state for the affected
multicast address before and after the latest change is compared.</t> multicast address before and after the latest change is compared.</t>
</li>
<t>The records that express the difference are built according to the <li>
<t>The records that express the difference are built according to th
e
table above. Nevertheless, these records are not transmitted in a table above. Nevertheless, these records are not transmitted in a
separate message, but they are instead merged with the contents of separate message, but they are instead merged with the contents of
the pending report, to create the new State Change Report. The the pending report, to create the new State Change Report. The
rules for calculating this merged report are described below.</t> rules for calculating this merged report are described below.</t>
</list></t> </li>
</ul>
<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 the new State Change Reports. These transmissions transmissions of the new State Change Reports. These transmissions
are necessary in order to ensure that each instance of state change are necessary in order to ensure that each instance of state change
is transmitted at least [Robustness Variable] times.</t> is transmitted at least [Robustness Variable] times.</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 node. This is done in order to ensure that a series of the node. This is done in order to ensure that a series of
successive state changes do not break the protocol robustness. successive state changes do not break the protocol robustness.
Sources in retransmission state can be kept in a per multicast Sources in retransmission state can be kept in a per-multicast-address
address Retransmission List, with a Source Retransmission Counter Retransmission List, with a Source Retransmission Counter
associated to each source in the list. When a source is included in associated to each source in the list. When a source is included in
the list, its counter is set to [Robustness Variable]. Each time a the list, its counter is set to [Robustness Variable]. Each time a
State Change Report is sent the counter is decreased by one unit. State Change Report is sent, the counter is decreased by one unit.
When the counter reaches zero, the source is deleted from the When the counter reaches zero, the source is deleted from the
Retransmission List for that multicast address.</t> Retransmission List for that multicast address.</t>
<t>If the per-interface listening change that triggers the new report is
<t>If the per-interface listening change that triggers the new report is
a filter mode change, then the next [Robustness Variable] State a filter mode change, then the next [Robustness Variable] State
Change 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 node has to maintain retransmission state for the period. The node has to maintain retransmission state for the
multicast address until the [Robustness Variable] State Change multicast address until the [Robustness Variable] State Change
Reports have been sent. This can be done through a per multicast Reports have been sent. This can be done through a per-multicast-address
address Filter Mode Retransmission Counter. When the filter mode Filter Mode Retransmission Counter. When the filter mode
changes, the counter is set to [Robustness Variable]. Each time a changes, the counter is set to [Robustness Variable]. Each time a
State Change Report is sent the counter is decreased by one unit. State Change Report is sent the counter is decreased by one unit.
When the counter reaches zero, i.e., [Robustness Variable] State When the counter reaches zero, i.e., [Robustness Variable] State
Change Reports with Filter Mode Change Records have been transmitted Change Reports with Filter Mode Change Records have been transmitted
after the last filter mode change, and if source list changes have after the last filter mode change, and if source list changes have
resulted in additional reports being scheduled, then the next State resulted in additional reports being scheduled, then the next State
Change Report will include Source List Change Records.</t> Change Report will include Source List Change Records.</t>
<t>Each time a per-interface listening state change triggers the
<t>Each time a per-interface listening state change triggers the immediate transmission of a new State Change Report, its contents are
Immediate transmission of a new State Change Report, its contents are
determined as follows. If the report should contain a Filter Mode determined as follows. If the report should contain a Filter Mode
Change Record, i.e., the Filter Mode Retransmission Counter for that Change Record, i.e., the Filter Mode Retransmission Counter for that
multicast address has a value higher than zero, then, if the current multicast address has a value higher than zero, then, if the current
filter mode of the interface is INCLUDE, a TO_IN record is included 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 in the report; otherwise, a TO_EX record is included. If instead the
report should contain Source List Change Records, i.e., the Filter report should contain Source List Change Records, i.e., the Filter
Mode Retransmission Counter for that multicast address is zero, an Mode Retransmission Counter for that multicast address is zero, an
ALLOW and a BLOCK record is included. The contents of these records ALLOW and a BLOCK record is included. The contents of these records
are built according <xref target="if-rep-info"/>.</t> are built according <xref target="if-rep-info" format="default"/>.</t>
<table align="left" anchor="if-rep-info">
<table title="Per-Interface State Change Report Contents" anchor="if-rep-info <name>Per-Interface State Change Report Contents</name>
"> <tbody>
<tbody> <tr>
<tr><th align="center">Record</th> <th>Record</th>
<th align="center">Sources Included</th></tr> <th>Sources Included</th>
<tr><td>TO_IN</td><td>All in the current per-interface state that must </tr>
be forwarded</td></tr> <tr>
<tr><td>TO_EX</td><td>All in the current per-interface state that must <td>TO_IN</td>
be blocked</td></tr> <td>All in the current per-interface state that must be forwarded.
<tr><td>ALLOW</td><td>All with retransmission state (i.e., all sources </td>
from the Retransmission List) that must be forwarded</td></tr> </tr>
<tr><td>BLOCK</td><td>All with retransmission state that must be block <tr>
ed</td></tr> <td>TO_EX</td>
</tbody> <td>All in the current per-interface state that must be blocked.</
</table> td>
</tr>
<tr>
<td>ALLOW</td>
<td>All with retransmission state (i.e., all sources from the Retr
ansmission List) that must be forwarded.</td>
</tr>
<tr>
<td>BLOCK</td>
<td>All with retransmission state that must be blocked.</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>
<t>If the computed source list for either an ALLOW or a BLOCK record is <!-- [rfced] Please review whether any of the notes in this document
empty, that record is omitted from the State Change Report.</t> 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 <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 pending report to merge with can be treated as a Source Change Report
with empty ALLOW and BLOCK records (no sources have retransmission with empty ALLOW and BLOCK records (no sources have retransmission
state).</t> state).</t>
<t>The building of a scheduled State Change Report, triggered by the
<t>The building of a scheduled State Change Report, triggered by the
firing of a Retransmission Timer, instead of a per-interface firing of a Retransmission Timer, instead of a per-interface
listening state change, is described in <xref target="timer_act" />.</ listening state change, is described in <xref target="timer_act" forma
t> t="default"/>.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Action on Reception of a Query"> <name>Action on Reception of a Query</name>
<t>Upon reception of an MLD message that contains a Query, the node
<t>Upon reception of an MLD message that contains a Query, the node
checks if the source address of the message is a valid link-local checks if the source address of the message is a valid link-local
address, if the Hop Limit is set to 1, and if the Router Alert option address, if the Hop Limit is set to 1, and if the Router Alert option
is present in the Hop-By-Hop Options header of the IPv6 packet. If is present in the Hop-by-Hop Options header of the IPv6 packet. If
any of these checks fails, the packet is dropped.</t> any of these checks fail, the packet is dropped.</t>
<t>If the validity of the MLD message is verified, the node starts to
<t>If the validity of the MLD message is verified, the node starts to
process the Query. Instead of responding immediately, the node process the Query. Instead of responding immediately, the node
delays its response by a random amount of time, bounded by the delays its response by a random amount of time, bounded by the
Maximum Response Delay value derived from the Maximum Response Code Maximum Response Delay value derived from the Maximum Response Code
in the received Query message. A node may receive a variety of in the received Query message. A node may receive a variety of
Queries on different interfaces and of different kinds (e.g., General Queries on different interfaces and of different kinds (e.g., General
Queries, Multicast Address Specific Queries, and Multicast Address Queries, Multicast Address Specific Queries, and Multicast Address
and Source Specific Queries), each of which may require its own and Source Specific Queries), each of which may require its own
delayed response.</t> delayed response.</t>
<t>Before scheduling a response to a Query, the node must first consider
<t>Before scheduling a response to a Query, the node must first consider
previously scheduled pending responses and, in many cases, schedule a previously scheduled pending responses and, in many cases, schedule a
combined response. Therefore, for each of its interfaces on which it combined response. Therefore, for each of its interfaces on which it
operates the listener part of the MLDv2 protocol, the node must be operates the listener part of the MLDv2 protocol, the node must be
able to maintain the following state: able to maintain the following state:
<list style="bullets"> </t>
<t>an Interface Timer for scheduling responses to General Queries;</t> <ul spacing="normal">
<t>a Multicast Address Timer for scheduling responses to Multicast <li>
<t>an Interface Timer for scheduling responses to General Queries;</
t>
</li>
<li>
<t>a Multicast Address Timer for scheduling responses to Multicast
Address (and Source) Specific Queries, for each multicast address Address (and Source) Specific Queries, for each multicast address
the node has to report on;</t> the node has to report on; and</t>
<t>a per-multicast-address list of sources to be reported in response </li>
<li>
<t>a per-multicast-address list of sources to be reported in respons
e
to a Multicast Address and Source Specific Query.</t> to a Multicast Address and Source Specific Query.</t>
</list></t> </li>
</ul>
<t>When a new valid General Query arrives on an interface, the node <t>When a new valid General Query arrives on an interface, the node
checks whether it has any per-interface listening state record to checks whether it has any per-interface listening state record to
report on, or not. Similarly, when a new valid Multicast Address report on, or not. Similarly, when a new valid Multicast Address
(and Source) Specific Query arrives on an interface, the node checks (and Source) Specific Query arrives on an interface, the node checks
whether it has a per-interface listening state record that whether it has a per-interface listening state record that
corresponds to the queried multicast address (and source), or not. If corresponds to the queried multicast address (and source), or not. If
it does, a delay for a response is randomly selected in the range (0, it does, a delay for a response is randomly selected in the range (0,
[Maximum Response Delay]), where Maximum Response Delay is derived [Maximum Response Delay]), where Maximum Response Delay is derived
from the Maximum Response Code inserted in the received Query from the Maximum Response Code inserted 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 or not, and the type of Report to schedule. needs to be scheduled or not and the type of Report to schedule.
(The rules are considered in order and only the first matching rule (The rules are considered in order and only the first matching rule
is applied.) 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>
<t>If the received Query is a General Query, the Interface Timer is </li>
<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>
<t>If the received Query is a Multicast Address Specific Query or a </li>
<li>
<t>If the received Query is a Multicast Address Specific Query or a
Multicast Address and Source Specific Query and there is no Multicast Address and Source Specific Query and there is no
pending response to a previous Query for this multicast address, pending response to a previous Query for this multicast address,
then the Multicast Address Timer is used to schedule a report. If then the Multicast Address Timer is used to schedule a report. If
the received Query is a Multicast Address and Source Specific the received Query is a Multicast Address and Source Specific
Query, the list of queried sources is recorded to be used when Query, the list of queried sources is recorded for use when
generating a response.</t> generating a response.</t>
<t>If there is already a pending response to a previous Query </li>
<li>
<t>If there is already a pending response to a previous Query
scheduled for this multicast address, and either the new Query is scheduled for this multicast address, and either the new Query is
a Multicast Address Specific Query or the recorded source list a Multicast Address Specific Query or the recorded source list
associated with the multicast address is empty, then the multicast associated with the multicast address is empty, then the multicast
address source list is cleared and a single response is scheduled, address source list is cleared and a single response is scheduled,
using the Multicast Address Timer. The new response is scheduled using the Multicast Address Timer. The new response is scheduled
to be sent at the earliest of the remaining time for the pending to be sent at the earliest of the remaining time for the pending
report and the selected delay.</t> report and the selected delay.</t>
<t>If the received Query is a Multicast Address and Source Specific </li>
<li>
<t>If the received Query is a Multicast Address and Source Specific
Query and there is a pending response for this multicast address Query and there is a pending response for this multicast address
with a non-empty source list, then the multicast address source with a non-empty source list, then the multicast address source
list is augmented to contain the list of sources in the new Query, list is augmented to contain the list of sources in the new Query,
and a single response is scheduled using the Multicast Address and a single response is scheduled using the Multicast Address
Timer. The new response is scheduled to be sent at the earliest Timer. The new response is scheduled to be sent at the earliest
of the remaining time for the pending report and the selected of the remaining time for the pending report and the selected
delay.</t> delay.</t>
</list></t> </li>
</section> </ol>
</section>
<section title="Action on Timer Expiration" anchor="timer_act"> <section anchor="timer_act" numbered="true" toc="default">
<name>Action on Timer Expiration</name>
<t>There are several timers that, upon expiration, trigger protocol <t>There are several timers that, upon expiration, trigger protocol
actions on an MLDv2 Multicast Address Listener node. All these actions on an MLDv2 Multicast Address Listener node. All these
actions are related to pending reports scheduled by the node. actions are related to pending reports scheduled by the node.
<list style="format %d." counter="my_cnt_2"> </t>
<ol group="my_cnt_2" spacing="normal" type="1"><li>
<t>If the expired timer is the Interface Timer (i.e., there is a <t>If the expired timer is the Interface Timer (i.e., there is a
pending response to a General Query), then one Current State pending response to a General Query), then one Current State
Record is sent for each multicast address for which the specified Record is sent for each multicast address for which the specified
interface has listening state, as described in <xref target="if_state" />. interface has listening state, as described in <xref
The target="if_state" format="default"/>. The Current State Record
Current State Record carries the multicast address and its carries the multicast address and its associated filter mode
associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list. Multiple
Source list. Multiple Current State Records are packed into Current State Records are packed into individual Report messages,
individual Report messages, to the extent possible. to the extent possible.</t>
<vspace blankLines="1" /> <t>This naive algorithm may result in bursts of packets when a
This naive algorithm may result in bursts of packets when a node node listens to a large number of multicast addresses. Instead of
listens to a large number of multicast addresses. Instead of using a single Interface Timer, implementations are recommended to
using a single Interface Timer, implementations are recommended to spread transmission of such Report messages over the interval (0,
spread transmission of such Report messages over the interval (0, [Maximum Response Delay]). Note that any such implementation
[Maximum Response Delay]). Note that any such implementation MUST <bcp14>MUST</bcp14> avoid the "ack-implosion" problem, i.e.,
avoid the "ack-implosion" problem, i.e., MUST NOT send a Report <bcp14>MUST NOT</bcp14> send a Report immediately upon reception
immediately upon reception of a General Query.</t> of a General Query.</t>
<t>If the expired timer is a Multicast Address Timer and the list of </li>
recorded sources for that multicast address is empty (i.e., there <li>
is a pending response to a Multicast Address Specific Query), then <t>If the expired timer is a Multicast Address Timer and the list
if, and only if, the interface has listening state for that of recorded sources for that multicast address is empty (i.e.,
multicast address, a single Current State Record is sent for that there is a pending response to a Multicast Address Specific
address. The Current State Record carries the multicast address Query), then if, and only if, the interface has listening state
and its associated filter mode (MODE_IS_INCLUDE or for that multicast address, a single Current State Record is sent
MODE_IS_EXCLUDE) and source list, if any.</t> for that address. The Current State Record carries the multicast
<t>If the expired timer is a Multicast Address Timer and the list of address and its associated filter mode (MODE_IS_INCLUDE or
recorded sources for that multicast address is non-empty (i.e., MODE_IS_EXCLUDE) and source list, if any.</t>
there is a pending response to a Multicast Address and Source </li>
Specific Query), then if, and only if, the interface has listening <li>
state for that multicast address, the contents of the <t>If the expired timer is a Multicast Address Timer and the list
corresponding Current State Record are determined from the per- of recorded sources for that multicast address is non-empty (i.e.,
interface state and the pending response record, as specified in there is a pending response to a Multicast Address and Source
<xref target="csr-info"/>.</t> Specific Query), then if, and only if, the interface has listening
</list></t> state for that multicast address, the contents of the
corresponding Current State Record are determined from the per-
<table title="Determining Contents of Current State Record" anchor="csr-info" interface state and the pending response record, as specified in
> <xref target="csr-info" format="default"/>.</t>
<tbody>
<tr><th align="center">Per-Interface State</th>
<th align="center">Set of Sources in the Pending Response Record</th>
<th align="center">Current State Record</th></tr>
<tr><td>INCLUDE (A)</td><td>B</td><td>IS_IN (A*B)</td></tr>
<tr><td>EXCLUDE (A)</td><td>B</td><td>IS_IN (B-A)</td></tr>
</tbody>
</table>
<t><list style="hanging">
<t>If the resulting Current State Record has an empty set of source
addresses, then no response is sent. After the required Report
messages have been generated, the source lists associated with any
reported multicast addresses are cleared.</t>
</list></t>
<t><list style="format %d." counter="my_cnt_2"> <table align="left" anchor="csr-info">
<t>If the expired timer is a Retransmission Timer for a multicast <name>Determining Contents of Current State Record</name>
address (i.e., there is a pending State Change Report for that <tbody>
multicast address), the contents of the report are determined as <tr>
follows. If the report should contain a Filter Mode Change <th>Per-Interface State</th>
Record, i.e., the Filter Mode Retransmission Counter for that <th>Set of Sources in the Pending Response Record</th>
multicast address has a value higher than zero, then, if the <th>Current State Record</th>
current filter mode of the interface is INCLUDE, a TO_IN record is </tr>
included in the report; otherwise a TO_EX record is included. In <tr>
both cases, the Filter Mode Retransmission Counter for that <td>INCLUDE (A)</td>
multicast address is decremented by one unit after the <td>B</td>
transmission of the report. <td>IS_IN (A*B)</td>
<vspace blankLines="1" /> </tr>
If instead the report should contain Source List Change Records, <tr>
i.e., the Filter Mode Retransmission Counter for that multicast <td>EXCLUDE (A)</td>
address is zero, an ALLOW and a BLOCK record is included. The <td>B</td>
contents of these records are built according to <xref target="slcr <td>IS_IN (B-A)</td>
-info"/>.</t> </tr>
</list></t> </tbody>
</table>
<t>If the resulting Current State Record has an empty set of
source addresses, then no response is sent. After the required
Report messages have been generated, the source lists associated
with any reported multicast addresses are cleared.</t></li>
<li>
<t>If the expired timer is a Retransmission Timer for a multicast
address (i.e., there is a pending State Change Report for that
multicast address), the contents of the report are determined as
follows. If the report should contain a Filter Mode Change
Record, i.e., the Filter Mode Retransmission Counter for that
multicast address has a value higher than zero, then, 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. In
both cases, the Filter Mode Retransmission Counter for that
multicast address is decremented by one unit after the
transmission of the report.
</t>
<t>If instead the report should contain Source List Change
Records, i.e., the Filter Mode Retransmission Counter for that
multicast address is zero, an ALLOW and a BLOCK record is
included. The contents of these records are built according to
<xref target="slcr-info" format="default"/>.</t>
<table title="Determining Contents of Source List Change Records" anchor=" <table align="left" anchor="slcr-info">
slcr-info"> <name>Determining Contents of Source List Change Records</name>
<tbody> <tbody>
<tr><th align="center">Record</th> <tr>
<th align="center">Sources included</th></tr> <th>Record</th>
<tr><td>TO_IN</td><td>All in the current per-interface state that mu <th>Sources Included</th>
st be forwarded</td></tr> </tr>
<tr><td>TO_EX</td><td>All in the current per-interface state that mu <tr>
st be blocked</td></tr> <td>TO_IN</td>
<tr><td>ALLOW</td><td>All with retransmission state (i.e., all sourc <td>All in the current per-interface state that must be forwarded.
es from the </td>
</tr>
<tr>
<td>TO_EX</td>
<td>All in the current per-interface state that must be blocked.</
td>
</tr>
<tr>
<td>ALLOW</td>
<td>All with retransmission state (i.e., all sources from the
Retransmission List) that must be forwarded. For each incl uded source, Retransmission List) that must be forwarded. For each incl uded source,
its Source Retransmission Counter is decreased with one uni t after the its Source Retransmission Counter is decreased with one uni t after the
transmission of the report. If the counter reaches zero, t he source is transmission of the report. If the counter reaches zero, t he source is
deleted from the Retransmission List for that multicast addre deleted from the Retransmission List for that multicast addre
ss.</td></tr> ss.</td>
<tr><td>BLOCK</td><td>All with retransmission state (i.e., all sourc </tr>
es from the <tr>
<td>BLOCK</td>
<td>All with retransmission state (i.e., all sources from the
Retransmission List) that must be blocked. For each includ ed source, Retransmission List) that must be blocked. For each includ ed source,
its Source Retransmission Counter is decreased with one uni t after the its Source Retransmission Counter is decreased with one uni t after the
transmission of the report. If the counter reaches zero, t he source is transmission of the report. If the counter reaches zero, t he source is
deleted from the Retransmission List for that multicast addre deleted from the Retransmission List for that multicast addre
ss.</td></tr> ss.</td>
</tbody> </tr>
</table> </tbody>
</table>
<t>If the computed source list for either an ALLOW or a BLOCK record <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> is empty, that record is omitted from the State Change Report.</t>
</li>
</ol>
</section> </section>
</section> </section>
<section anchor="mr_proto" numbered="true" toc="default">
<section title="Description of the Protocol for Multicast Routers" anchor= <name>Description of the Protocol for Multicast Routers</name>
"mr_proto"> <t>The purpose of MLD is to enable each multicast router to learn, for
<t>The purpose of MLD is to enable each multicast router to learn, for
each of its directly attached links, which multicast addresses have each of its directly attached links, which multicast addresses have
listeners on that link. MLD version 2 adds the capability for a listeners on that link. MLD version 2 adds the capability for a
multicast router to also learn which sources have listeners among multicast router to also learn which sources have listeners among
the neighboring nodes, for packets sent to any particular multicast the neighboring nodes, for packets sent to any particular multicast
address. The information gathered by MLD is provided to whichever address. The information gathered by MLD is provided to whichever
multicast routing protocol is used by the router, in order to ensure multicast routing protocol is used by the router, in order to ensure
that multicast packets are delivered to all links where there are that multicast packets are delivered to all links where there are
interested listeners.</t> interested listeners.</t>
<t>This section describes the part of MLDv2 that is performed by
<t>This section describes the part of MLDv2 that is performed by
multicast routers. Multicast routers may themselves become multicast multicast routers. Multicast routers may themselves become multicast
address listeners, and therefore also perform the multicast listener address listeners and therefore also perform the multicast listener
part of MLDv2, described in <xref target="proto" />.</t> part of MLDv2, as described in <xref target="proto" 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 links. If a multicast router has over each of its directly attached links. If a multicast router has
more than one interface to the same link, it only needs to operate more than one interface to the same link, it only needs to operate
this protocol over one of those interfaces.</t> this protocol over one of those interfaces.</t>
<t>For each interface over which the router operates the MLD protocol,
<t>For each interface over which the router operates the MLD protocol,
the router must configure that interface to listen to all link-layer the router must configure that interface to listen to all link-layer
multicast addresses that can be generated by IPv6 multicasts. For multicast addresses that can be generated by IPv6 multicasts. For
example, an Ethernet-attached router must set its Ethernet address example, an Ethernet-attached router must set its Ethernet address
reception filter to accept all Ethernet multicast addresses that reception filter to accept all Ethernet multicast addresses that
start with the hexadecimal value 3333 <xref target="RFC2464" />; in th e case of an start with the hexadecimal value 3333 <xref target="RFC2464" format="d efault"/>; in the case of an
Ethernet interface that does not support the filtering of such a Ethernet interface that does not support the filtering of such a
multicast address range, it must be configured to accept ALL Ethernet multicast address range, it must be configured to accept ALL Ethernet
multicast addresses, in order to meet the requirements of MLD.</t> multicast addresses, in order to meet the requirements of MLD.</t>
<t>On each interface over which this protocol is being run, the router
<t>On each interface over which this protocol is being run, the router <bcp14>MUST</bcp14> enable reception of the link-scope "all MLDv2-capable rou
MUST enable reception of the link-scope "all MLDv2-capable routers" ters"
multicast address from all sources, and MUST perform the multicast multicast address from all sources and <bcp14>MUST</bcp14> perform the multic
ast
address listener part of MLDv2 for that address on that interface.</t> address listener part of MLDv2 for that address on that interface.</t>
<t>Multicast routers only need to know that at least one node on an
<t>Multicast routers only need to know that at least one node on an
attached link listens to packets for a particular multicast address attached link listens to packets for a particular multicast address
from a particular source; a multicast router is not required to from a particular source; a multicast router is not required to
individually keep track of the interests of each neighboring node. individually keep track of the interests of each neighboring node.
(Nevertheless, see <xref target="host_suppress" /> item 1 for discussi (Nevertheless, see <xref target="host_suppress" format="default"/>, it
on.)</t> em 1 for discussion.)</t>
<t>MLDv2 is backward compatible with the MLDv1 protocol. For a detailed
<t>MLDv2 is backward compatible with the MLDv1 protocol. For a detailed description of compatibility issues, see <xref target="interop" format
description of compatibility issues see <xref target="interop" />.</t> ="default"/>.</t>
<section anchor="mld_qrys" numbered="true" toc="default">
<section title="Conditions for MLD Queries" anchor="mld_qrys"> <name>Conditions for MLD Queries</name>
<t>The behavior of a router that implements the MLDv2 protocol depends
<t>The behavior of a router that implements the MLDv2 protocol depends
on whether there are several multicast routers on the same subnet, or on whether there are several multicast routers on the same subnet, or
not. If it is the case, a querier election mechanism (described in not. If it is the case, a querier election mechanism (described in
<xref target="elect" />) is used to elect a single multicast router to be in <xref target="elect" format="default"/>) is used to elect a single mul ticast router to be in
Querier state. All the multicast routers on the subnet listen to the Querier state. All the multicast routers on the subnet listen to the
messages sent by multicast address listeners, and maintain the same messages sent by multicast address listeners, and maintain the same
multicast listening information state, so that they can quickly and multicast listening information state, so that they can quickly and
correctly take over the querier functionality, should the present correctly take over the querier functionality, should the present
Querier fail. Nevertheless, it is only the Querier that sends Querier fail. Nevertheless, it is only the Querier that sends
periodical or triggered query messages on the subnet.</t> periodical or triggered query messages on the subnet.</t>
<t>The Querier periodically sends General Queries to request Multicast
<t>The Querier periodically sends General Queries to request Multicast
Address Listener information from an attached link. These queries Address Listener information from an attached link. These queries
are used to build and refresh the Multicast Address Listener state of are used to build and refresh the Multicast Address Listener state of
routers on attached links.</t> routers on attached links.</t>
<t>Nodes respond to these queries by reporting their Multicast Address
<t>Nodes respond to these queries by reporting their Multicast Address
Listening state (and set of sources they listen to) with Current Listening state (and set of sources they listen to) with Current
State Multicast Address Records in MLDv2 Multicast Listener Reports.</ t> State Multicast Address Records in MLDv2 Multicast Listener Reports.</ t>
<t>As a listener of a multicast address, a node may express interest in
<t>As a listener of a multicast address, a node may express interest in
listening or not listening to traffic from particular sources. As listening or not listening to traffic from particular sources. As
the desired listening state of a node changes, it reports these the desired listening state of a node changes, it reports these
changes using Filter Mode Change Records or Source List Change changes using Filter Mode Change Records or Source List Change
Records. These records indicate an explicit state change in a Records. These records indicate an explicit state change in a
multicast address at a node in either the Multicast Address Record's multicast address at a node in either the Multicast Address Record's
source list or its filter mode. When Multicast Address Listening is source list or its filter mode. When Multicast Address Listening is
terminated at a node or traffic from a particular source is no longer terminated at a node or traffic from a particular source is no longer
desired, the Querier must query for other listeners of the multicast desired, the Querier must query for other listeners of the multicast
address or of the source before deleting the multicast address (or address or of the source before deleting the multicast address (or
source) from its Multicast Address Listener state and pruning its source) from its Multicast Address Listener state and pruning its
traffic.</t> traffic.</t>
<t>To enable all nodes on a link to respond to changes in multicast
<t>To enable all nodes on a link to respond to changes in multicast
address listening, the Querier sends specific queries. A Multicast address listening, the Querier sends specific queries. A Multicast
Address Specific Query is sent to verify that there are no nodes that Address Specific Query is sent to verify that there are no nodes that
listen to the specified multicast address or to "rebuild" the listen to the specified multicast address or to "rebuild" the
listening state for a particular multicast address. Multicast listening state for a particular multicast address. Multicast
Address Specific Queries are sent when the Querier receives a State Address Specific Queries are sent when the Querier receives a State
Change Record indicating that a node ceases to listen to a multicast Change Record indicating that a node ceases to listen to a multicast
address. They are also sent in order to enable a fast transition of address. They are also sent in order to enable a fast transition of
a router from EXCLUDE to INCLUDE mode, in case a received State a router from EXCLUDE to INCLUDE mode, in case a received State
Change Record motivates this action.</t> Change Record motivates this action.</t>
<t>A Multicast Address and Source Specific Query is used to verify that
<t>A Multicast Address and Source Specific Query is used to verify that there are no nodes on a link that listen to traffic from a specific
there are no nodes on a link which listen to traffic from a specific
set of sources. Multicast Address and Source Specific Queries list set of sources. Multicast Address and Source Specific Queries list
sources for a particular multicast address which have been requested sources for a particular multicast address that have been requested
to no longer be forwarded. This query is sent by the Querier in to no longer be forwarded. This query is sent by the Querier in
order to learn if any node listens to packets sent to the specified order to learn if any node listens to packets sent to the specified
multicast address, from the specified source addresses. Multicast multicast address, from the specified source addresses. Multicast
Address and Source Specific Queries are only sent in response to Address and Source Specific Queries are only sent in response to
State Change Records and never in response to Current State Records. State Change Records and never in response to Current State Records.
<xref target="qry_vars" /> describes each query in more detail.</t> <xref target="qry_vars" format="default"/> describes each query in mor
</section> e detail.</t>
</section>
<section title="MLD State Maintained by Multicast Routers"> <section numbered="true" toc="default">
<name>MLD State Maintained by Multicast Routers</name>
<t>Multicast routers that implement the MLDv2 protocol keep state per <t>Multicast routers that implement the MLDv2 protocol keep state per
multicast address per attached link. This multicast address state multicast address per attached link. This multicast address state
consists of a filter mode, a list of sources, and various timers. For consists of a filter mode, a list of sources, and various timers. For
each attached link on which MLD runs, a multicast router records the each attached link on which MLD runs, a multicast router records the
listening state for that link. That state conceptually consists of a listening state for that link. That state conceptually consists of a
set of records of the form:</t> set of records of the form:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[
(IPv6 multicast address, Filter Timer, (IPv6 multicast address, Filter Timer,
Router Filter Mode, (source records) ) Router Filter Mode, (source records) )]]></sourcecode>
]]></artwork>
</figure>
<t>Each source record is of the form:</t> <t>Each source record is of the form:</t>
<figure> <sourcecode name="" type=""><![CDATA[
<artwork><![CDATA[ (IPv6 source address, source timer)]]></sourcecode>
(IPv6 source address, source timer)
]]></artwork>
</figure>
<t>If all sources for a multicast address are listened to, an empty <t>If all sources for a multicast address are listened to, an empty
source record list is kept with the Router Filter Mode set to source record list is kept with the Router Filter Mode set to
EXCLUDE. This means that nodes on this link want all sources for EXCLUDE. This means that nodes on this link want all sources for
this multicast address to be forwarded. This is the MLDv2 equivalent this multicast address to be forwarded. This is the MLDv2 equivalent
of an MLDv1 listening state.</t> of an MLDv1 listening state.</t>
<section numbered="true" toc="default" anchor="def-router-filter-mode">
<section title="Definition of Router Filter Mode"> <name>Definition of Router Filter Mode</name>
<t>To reduce internal state, MLDv2 routers keep a filter mode per
<t>To reduce internal state, MLDv2 routers keep a filter mode per
multicast address per attached link. This filter mode is used to multicast address per attached link. This filter mode is used to
summarize the total listening state of a multicast address to a summarize the total listening state of a multicast address to a
minimum set such that all nodes' listening states are respected. The minimum set such that all nodes' listening states are respected. The
filter mode may change in response to the reception of particular filter mode may change in response to the reception of particular
types of Multicast Address Records or when certain timer conditions types of Multicast Address Records or when certain timer conditions
occur. In the following sections, we use the term "Router Filter occur. In the following sections, we use the term "Router Filter
Mode" to refer to the filter mode of a particular multicast address Mode" to refer to the filter mode of a particular multicast address
within a router. <xref target="rcv_rpt" /> describes the changes of t he Router within a router. <xref target="rcv_rpt" format="default"/> describes the changes of the Router
Filter Mode per Multicast Address Record received.</t> Filter Mode per Multicast Address Record received.</t>
<t>A router is in INCLUDE mode for a specific multicast address on a
<t>A router is in INCLUDE mode for a specific multicast address on a
given interface if all the listeners on the link interested in that given interface if all the listeners on the link interested in that
address are in INCLUDE mode. The router state is represented through address are in INCLUDE mode. The router state is represented through
the notation INCLUDE (A), where A is called the "Include List". The the notation INCLUDE (A), where A is called the "Include List". The
Include List is the set of sources that one or more listeners on the Include List is the set of sources that one or more listeners on the
link have requested to receive. All the sources from the Include link have requested to receive. All the sources from the Include
List will be forwarded by the router. Any other source that is not List will be forwarded by the router. Any other source that is not
in the Include List will be blocked by the router.</t> in the Include List will be blocked by the router.</t>
<t>A router is in EXCLUDE mode for a specific multicast address on a
<t>A router is in EXCLUDE mode for a specific multicast address on a
given interface if there is at least one listener in EXCLUDE mode given interface if there is at least one listener in EXCLUDE mode
interested in that address on the link. Conceptually, when a interested in that address on the link. Conceptually, when a
Multicast Address Record is received, the Router Filter Mode for that Multicast Address Record is received, the Router Filter Mode for that
multicast address is updated to cover all the requested sources using multicast address is updated to cover all the requested sources using
the least amount of state. As a rule, once a Multicast Address the least amount of state. As a rule, once a Multicast Address
Record with a filter mode of EXCLUDE is received, the Router Filter Record with a filter mode of EXCLUDE is received, the Router Filter
Mode for that multicast address will be set to EXCLUDE. Nevertheless, Mode for that multicast address will be set to EXCLUDE. Nevertheless,
if all nodes with a multicast address record having filter mode set if all nodes with a multicast address record having filter mode set
to EXCLUDE cease reporting, it is desirable for the Router Filter to EXCLUDE cease reporting, it is desirable for the Router Filter
Mode for that multicast address to transition back to INCLUDE mode. Mode for that multicast address to transition back to INCLUDE mode.
This transition occurs when the Filter Timer expires, and is This transition occurs when the Filter Timer expires; see <xref target="rtr_m
explained in detail in <xref target="rtr_mode" />.</t> ode" format="default"/> for more details.</t>
<t>When the router is in EXCLUDE mode, the router state is represented
<t>When the router is in EXCLUDE mode, the router state is represented
through the notation EXCLUDE (X,Y), where X is called the "Requested through the notation EXCLUDE (X,Y), where X is called the "Requested
List" and Y is called the "Exclude List". All sources, except those List" and Y is called the "Exclude List". All sources, except those
from the Exclude List, will be forwarded by the router. The from the Exclude List, will be forwarded by the router. The
Requested List has no effect on forwarding. Nevertheless, it has to Requested List has no effect on forwarding. Nevertheless, it has to
be maintained for several reasons, as explained in <xref target="src_t be maintained for several reasons, as explained in <xref target="src_t
imers" />.</t> imers" format="default"/>.</t>
<t>The exact handling of both the INCLUDE and EXCLUDE mode router stat
<t>The exact handling of both the INCLUDE and EXCLUDE mode router state, e,
according to the received reports, is presented in details in according to the received reports, is presented in detail in Sections
<xref target="curr_state_recs" /> and <xref target="fm_chg" />.</t> <xref target="curr_state_recs" format="counter"/> and <xref target="fm_chg" f
</section> ormat="counter"/>.</t>
</section>
<section title="Definition of Filter Timers"> <section numbered="true" toc="default">
<name>Definition of Filter Timers</name>
<t>The Filter Timer is only used when the router is in EXCLUDE mode for <t>The Filter Timer is only used when the router is in EXCLUDE mode fo
r
a specific multicast address, and it represents the time for the a specific multicast address, and it represents the time for the
Router Filter Mode of the multicast address to expire and switch to Router Filter Mode of the multicast address to expire and switch to
INCLUDE mode. A Filter Timer is a decrementing timer with a lower INCLUDE mode. A Filter Timer is a decrementing timer with a lower
bound of zero. One Filter Timer exists per multicast address record. bound of zero. One Filter Timer exists per multicast address record.
Filter Timers are updated according to the types of Multicast Address Filter Timers are updated according to the types of Multicast Address
Records received.</t> Records received.</t>
<t>If a Filter Timer expires, with the Router Filter Mode for that
<t>If a Filter Timer expires, with the Router Filter Mode for that
multicast address being EXCLUDE, it means that there are no more multicast address being EXCLUDE, it means that there are no more
listeners in EXCLUDE mode on the attached link. At this point, the listeners in EXCLUDE mode on the attached link. At this point, the
router transitions to INCLUDE filter mode. <xref target="rtr_mode" /> descri bes the router transitions to INCLUDE filter mode. <xref target="rtr_mode" format="d efault"/> describes the
actions taken when a Filter Timer expires while in EXCLUDE mode.</t> actions taken when a Filter Timer expires while in EXCLUDE mode.</t>
<t keepWithNext="true"><xref target="FTM" format="default"/> summarize
<t keepWithNext='true'><xref target="FTM"/> summarizes the role of the Filter s the role of the Filter Timer.
Timer. <xref target="rcv_rpt" format="default"/> describes the details of setting th
<xref target="rcv_rpt" /> describes the details of setting the Filter Timer p e Filter Timer per type of
er type of
Multicast Address Record received.</t> Multicast Address Record received.</t>
<table align="left" anchor="FTM">
<table title="Filter Timer Management" anchor="FTM"> <name>Filter Timer Management</name>
<tbody> <tbody>
<tr><th align="center">Router Filter Mode</th> <tr>
<th align="center">Filter Timer Value</th> <th>Router Filter Mode</th>
<th align="center">Actions/Comments</th></tr> <th>Filter Timer Value</th>
<tr><td>INCLUDE</td><td>Not Used</td><td>All listeners in INCLUDE mode.</ <th>Actions/Comments</th>
td></tr> </tr>
<tr><td>EXCLUDE</td><td>Timer > 0</td><td>At least one listener in EXCLUD <tr>
E mode.</td></tr> <td>INCLUDE</td>
<tr><td>EXCLUDE</td><td>Timer == 0</td><td>No more listeners in EXCLUDE m <td>Not Used</td>
ode for <td>All listeners in INCLUDE mode.</td>
</tr>
<tr>
<td>EXCLUDE</td>
<td>Timer &gt; 0</td>
<td>At least one listener in EXCLUDE mode.</td>
</tr>
<tr>
<td>EXCLUDE</td>
<td>Timer == 0</td>
<td>No more listeners in EXCLUDE mode for
the multicast address. If the Requested List is empty, delete the multicast address. If the Requested List is empty, delete
Multicast Address Record. If not, switch to INCLUDE filter mode; Multicast Address Record. If not, switch to INCLUDE filter mode;
the sources in the Requested List are moved to the Include List, the sources in the Requested List are moved to the Include List,
and the Exclude List is deleted.</td></tr> and the Exclude List is deleted.</td>
</tbody> </tr>
</table> </tbody>
</section> </table>
</section>
<section title="Definition of Source Timers" anchor="src_timers"> <section anchor="src_timers" numbered="true" toc="default">
<name>Definition of Source Timers</name>
<t>A Source Timer is a decrementing timer with a lower bound of zero. <t>A Source Timer is a decrementing timer with a lower bound of zero.
One Source Timer is kept per source record. Source timers are One Source Timer is kept per source record. Source timers are
updated according to the type and filter mode of the Multicast updated according to the type and filter mode of the Multicast
Address Record received. <xref target="rcv_rpt" /> describes the sett ing of source Address Record received. <xref target="rcv_rpt" format="default"/> de scribes the setting of source
timers per type of Multicast Address Records received.</t> timers per type of Multicast Address Records received.</t>
<t>In the following, abbreviations are used for several variables (all
<t>In the following, abbreviations are used for several variables (all of which are described in detail in <xref target="timers" format="defa
of which are described in detail in <xref target="timers" />). The va ult"/>). The variable MALI
riable MALI
stands for the Multicast Address Listening Interval, which is the stands for the Multicast Address Listening Interval, which is the
time in which multicast address listening state will time out. The time in which multicast address listening state will time out. The
variable LLQT is the Last Listener Query Time, which is the total variable LLQT is the Last Listener Query Time, which is the total
time the router should wait for a report, after the Querier has sent time the router should wait for a report, after the Querier has sent
the first query. During this time, the Querier should send [Last the first query. During this time, the Querier should send [Last
Member Query Count]-1 retransmissions of the query. LLQT represents Member Query Count]-1 retransmissions of the query. LLQT represents
the "leave latency", or the difference between the transmission of a the "leave latency" or the difference between the transmission of a
listener state change and the modification of the information passed listener state change and the modification of the information passed
to the routing protocol.</t> to the routing protocol.</t>
<t>If the router is in INCLUDE filter mode, a source can be added to t
<t>If the router is in INCLUDE filter mode, a source can be added to the he
current Include List if a listener in INCLUDE mode sends a Current current Include List if a listener in INCLUDE mode sends a Current
State or a State Change Report which includes that source. Each State or a State Change Report that includes that source. Each
source from the Include List is associated with a source timer that source from the Include List is associated with a source timer that
is updated whenever a listener in INCLUDE mode sends a report that is updated whenever a listener in INCLUDE mode sends a report that
confirms its interest in that specific source. If the timer of a confirms its interest in that specific source. If the timer of a
source from the Include List expires, the source is deleted from the source from the Include List expires, the source is deleted from the
Include List. If there are no more source records left, the Include List. If there are no more source records left, the
multicast address record is deleted from the router.</t> multicast address record is deleted from the router.</t>
<t>Besides this "soft leave" mechanism, there is also a "fast leave"
<t>Besides this "soft leave" mechanism, there is also a "fast leave"
scheme in MLDv2; it is also based on the use of source timers. When scheme in MLDv2; it is also based on the use of source timers. When
a node in INCLUDE mode expresses its desire to stop listening to a a node in INCLUDE mode expresses its desire to stop listening to a
specific source, all the multicast routers on the link lower their specific source, all the multicast routers on the link lower their
timer for that source to a small interval of LLQT milliseconds. The timer for that source to a small interval of LLQT milliseconds. The
Querier then sends then a Multicast Address and Source Specific Querier then sends then a Multicast Address and Source Specific
Query, to verify whether there are other listeners for that source on Query, to verify whether there are other listeners for that source on
the link, or not. If a corresponding report is received before the the link, or not. If a corresponding report is received before the
timer expires, all the multicast routers on the link update their timer expires, all the multicast routers on the link update their
source timer. If not, the source is deleted from the Include List. source timer. If not, the source is deleted from the Include List.
The handling of the Include List, according to the received reports, The handling of the Include List, according to the received reports,
is detailed in <xref target="curr_state_recs" /> and <xref target="fm_ is detailed in Sections <xref target="curr_state_recs" format="counter
chg" />.</t> "/> and <xref target="fm_chg" format="counter"/>.</t>
<t>Source timers are treated differently when the Router Filter Mode f
<t>Source timers are treated differently when the Router Filter Mode for or
a multicast address is EXCLUDE. For sources from the Requested List a multicast address is EXCLUDE. For sources from the Requested List,
the source timers have running values; these sources are forwarded by the source timers have running values; these sources are forwarded by
the router. For sources from the Exclude List the source timers are the router. For sources from the Exclude List, the source timers are
set to zero; these sources are blocked by the router. If the timer set to zero; these sources are blocked by the router. If the timer
of a source from the Requested List expires, the source is moved to of a source from the Requested List expires, the source is moved to
the Exclude List. The router informs then the routing protocol that the Exclude List. Then, the router informs the routing protocol that
there is no longer a listener on the link interested in traffic from there is no longer a listener on the link interested in traffic from
this source.</t> this source.</t>
<t>The router has to maintain the Requested List for two reasons:
</t>
<ol type="1" spacing="normal">
<li>
<t>To keep track of sources that listeners in INCLUDE mode
listen to. This is necessary in order to assure a seamless
transition of the router to INCLUDE mode, when there will be no
listener in EXCLUDE mode left. This transition should not
interrupt the flow of traffic to the listeners in INCLUDE mode
still interested in that multicast address. Therefore, at the
moment of the transition, the Requested List should represent
the set of sources that nodes in INCLUDE mode have explicitly
requested.
</t>
<t>When the router switches to INCLUDE mode, the sources in the
Requested List are moved to the Include List, and the Exclude
List is deleted. Before the switch, the Requested List can
contain an inexact guess at the sources that listeners in
INCLUDE mode listen to, which might be too large or too small. Th
ese
inexactitudes are due to the fact that the Requested List is
also used for fast blocking purposes, as described below. If
such a fast blocking is required, some sources may be deleted
from the Requested List (as shown in Sections <xref
target="curr_state_recs" format="counter"/> and <xref
target="fm_chg" format="counter"/>) in order to reduce router
state. Nevertheless, in each such case the Filter Timer is
updated as well. Therefore, listeners in INCLUDE mode will have
enough time, before an eventual switching, to reconfirm their
interest in the eliminated source(s), and rebuild the Requested
List accordingly. The protocol ensures that when a switch to
INCLUDE mode occurs, the Requested List will be accurate.
Details about the transition of the router to INCLUDE mode are
presented in <xref target="mode_switch" format="default"/>.</t>
</li>
<li>
<t>To allow a fast blocking of previously unblocked sources. If
the router receives a report that contains such a request, the
concerned sources are added to the Requested List. Their timers
are set to a small interval of LLQT milliseconds, and a
Multicast Address and Source Specific Query is sent by the
Querier, to check whether there are nodes on the link still
interested in those sources, or not. If no node confirms its
interest in receiving a specific source, the timer of that
source expires. Then, the source is moved from the Requested
List to the Exclude List. From then on, the source will be
blocked by the router.</t>
</li>
</ol>
<t>The router has to maintain the Requested List for two reasons: <t>The handling of the EXCLUDE mode router state, according to the
<list style="bullets"> received reports, is detailed in Sections <xref
<t>To keep track of sources that listeners in INCLUDE mode listen to. target="curr_state_recs" format="counter"/> and <xref
This is necessary in order to assure a seamless transition of the target="fm_chg" format="counter"/>.</t>
router to INCLUDE mode, when there will be no listener in EXCLUDE <t>When the Router Filter Mode for a multicast address is EXCLUDE,
mode left. This transition should not interrupt the flow of source records are only deleted when the Filter Timer expires or
traffic to the listeners in INCLUDE mode still interested in that when newly received Multicast Address Records modify the source
multicast address. Therefore, at the moment of the transition, record list of the router.</t>
the Requested List should represent the set of sources that nodes </section>
in INCLUDE mode have explicitly requested. </section>
<vspace blankLines="1" /> <section numbered="true" toc="default">
When the router switches to INCLUDE mode, the sources in the <name>MLDv2 Source-Specific Forwarding Rules</name>
Requested List are moved to the Include List, and the Exclude List <t>When a multicast router receives a datagram from a source destined to
is deleted. Before the switch, the Requested List can contain an
inexact guess at the sources that listeners in INCLUDE mode listen
to - might be too large or too small. These inexactitudes are due
to the fact that the Requested List is also used for fast blocking
purposes, as described below. If such a fast blocking is
required, some sources may be deleted from the Requested List (as
shown in <xref target="curr_state_recs" /> and <xref target="fm_chg" /
>) in order to reduce router state.
Nevertheless, in each such case the Filter Timer is updated as
well. Therefore, listeners in INCLUDE mode will have enough time,
before an eventual switching, to reconfirm their interest in the
eliminated source(s), and rebuild the Requested List accordingly.
The protocol ensures that when a switch to INCLUDE mode occurs,
the Requested List will be accurate. Details about the transition
of the router to INCLUDE mode are presented in <xref target="mode_swit
ch" />.</t>
<t>To allow a fast blocking of previously unblocked sources. If the
router receives a report that contains such a request, the
concerned sources are added to the Requested List. Their timers
are set to a small interval of LLQT milliseconds, and a Multicast
Address and Source Specific Query is sent by the Querier, to check
whether there are nodes on the link still interested in those
sources, or not. If no node confirms its interest in receiving a
specific source, the timer of that source expires. Then, the
source is moved from the Requested List to the Exclude List. From
then on, the source will be blocked by the router.</t>
</list></t>
<t>The handling of the EXCLUDE mode router state, according to the
received reports, is detailed in <xref target="curr_state_recs" /> and
<xref target="fm_chg" />.</t>
<t>When the Router Filter Mode for a multicast address is EXCLUDE,
source records are only deleted when the Filter Timer expires, or
when newly received Multicast Address Records modify the source
record list of the router.</t>
</section>
</section>
<section title="MLDv2 Source Specific Forwarding Rules">
<t>When a multicast router receives a datagram from a source destined to
a particular multicast address, a decision has to be made whether to a particular multicast address, a decision has to be made whether to
forward the datagram on an attached link or not. The multicast forward the datagram on an attached link or not. The multicast
routing protocol in use is in charge of this decision, and should use routing protocol in use is in charge of this decision and should use
the MLDv2 information to ensure that all sources/multicast addresses the MLDv2 information to ensure that all sources/multicast addresses
that have listeners on a link are forwarded to that link. MLDv2 that have listeners on a link are forwarded to that link. MLDv2
information does not override multicast routing information; for information does not override multicast routing information; for
example, if the MLDv2 filter mode for a multicast address is EXCLUDE, example, if the MLDv2 filter mode for a multicast address is EXCLUDE,
a router may still forward packets for excluded sources to a transit a router may still forward packets for excluded sources to a transit
link.</t> link.</t>
<t>To summarize, <xref target="MLDv2_forwarding_suggestions"/> below des
<t>To summarize, the following table describes the forwarding cribes the forwarding
suggestions made by MLDv2 to the routing protocol for traffic suggestions made by MLDv2 to the routing protocol for traffic
originating from a source destined to a multicast address. It also originating from a source destined to a multicast address. It also
summarizes the actions taken upon the expiration of a source timer summarizes the actions taken upon the expiration of a source timer
based on the Router Filter Mode of the multicast address.</t> based on the Router Filter Mode of the multicast address.</t>
<table> <!--[rfced] Tables 6 and 9 do not have titles; would you like to add
<tbody> them? If so, please provide the desired text.
<tr><th align="center">Router Filter Mode</th> -->
<th align="center">Source Timer Value</th>
<th align="center">Action</th></tr>
<!-- Are we missing an INCLUDE mode where no source elements a
re present? -->
<tr><td>INCLUDE</td><td>TIMER > 0</td><td>Suggest to forward traffic fr
om source</td></tr>
<tr><td>INCLUDE</td><td>TIMER == 0</td><td>Suggest to stop forwarding tr
affic from
source and remove source record. If there are no more source
records,
delete multicast address record</td></tr>
<tr><td>EXCLUDE</td><td>TIMER > 0</td><td>Suggest to forward traffic fro
m source</td></tr>
<tr><td>EXCLUDE</td><td>TIMER == 0</td><td>Suggest to not forward traffi
c from source.
Move the source from the Requested List to the Exclude
List (DO NOT remove source record)</td></tr>
<tr><td>EXCLUDE</td><td>No Source Element</td><td>Suggest to forward tra
ffic from all sources</td></tr>
</tbody>
</table>
</section>
<section title="Action on Reception of Reports" anchor="rcv_rpt"> <!--[rfced] Has the following comment been addressed by the authors?
Please see Table 6 (Section 7.3).
<t>Upon reception of an MLD message that contains a Report, the router Author comment in the XML:
Are we missing an INCLUDE mode where no source elements are present?
-->
<table align="left" anchor="MLDv2_forwarding_suggestions">
<tbody>
<tr>
<th>Router Filter Mode</th>
<th>Source Timer Value</th>
<th>Action</th>
</tr>
<!-- Are we missing an INCLUDE mode where no source elements are pre
sent? -->
<tr>
<td>INCLUDE</td>
<td>TIMER &gt; 0</td>
<td>Suggest to forward traffic from source.</td>
</tr>
<tr>
<td>INCLUDE</td>
<td>TIMER == 0</td>
<td>Suggest to stop forwarding traffic from
source and remove the source record. If there are no more sou
rce records,
delete the multicast address record.</td>
</tr>
<tr>
<td>EXCLUDE</td>
<td>TIMER &gt; 0</td>
<td>Suggest to forward traffic from source.</td>
</tr>
<tr>
<td>EXCLUDE</td>
<td>TIMER == 0</td>
<td>Suggest to not forward traffic from source.
Move the source from the Requested List to the Exclude
List (DO NOT remove the source record).</td>
</tr>
<tr>
<td>EXCLUDE</td>
<td>No Source Element</td>
<td>Suggest to forward traffic from all sources.</td>
</tr>
</tbody>
</table>
</section>
<section anchor="rcv_rpt" numbered="true" toc="default">
<name>Action on Reception of Reports</name>
<t>Upon reception of an MLD message that contains a Report, the router
checks if the source address of the message is a valid link-local checks if the source address of the message is a valid link-local
address, if the Hop Limit is set to 1, and if the Router Alert option address, if the Hop Limit is set to 1, and if the Router Alert option
is present in the Hop-By-Hop Options header of the IPv6 packet. If is present in the Hop-by-Hop Options header of the IPv6 packet. If
any of these checks fails, the packet is dropped. If the validity of any of these checks fail, the packet is dropped. If the validity of
the MLD message is verified, the router starts to process the Report.</t> the MLD message is verified, the router starts to process the Report.</t>
<t>SSM-aware routers <bcp14>SHOULD</bcp14> ignore records that contain m
<t>SSM-aware routers SHOULD ignore records that contain multicast addresses 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 MLDv1 Report and DONE CHANGE_TO_EXCLUDE_MODE. SSM-aware routers <bcp14>SHOULD</bcp14> ignore MLDv1 Report and DONE
messages that messages that
contain multicast addresses in the SSM address range, SHOULD NOT use contain multicast addresses in the SSM address range, <bcp14>SHOULD NOT</bcp1
such Reports to establish IP forwarding state, and MAY log an error if it 4> use
such Reports to establish IP forwarding state, and <bcp14>MAY</bcp14> log an
error if it
receives such a message.</t> receives such a message.</t>
<section anchor="curr_state_recs" numbered="true" toc="default">
<section title="Reception of Current State Records" anchor="curr_state_recs"> <name>Reception of Current State Records</name>
<t>When receiving Current State Records, a router updates both its
<t>When receiving Current State Records, a router updates both its
Filter Timer and its source timers. In some circumstances, the Filter Timer and its source timers. In some circumstances, the
reception of a type of multicast address record will cause the Router reception of a type of multicast address record will cause the Router
Filter Mode for that multicast address to change. <xref target="rcvd-csr"/> Filter Mode for that multicast address to change. <xref target="rcvd-csr" fo rmat="default"/>
describes the actions, with respect to state and timers, that occur describes the actions, with respect to state and timers, that occur
to a router's state upon reception of Current State Records.</t> to a router's state upon reception of Current State Records.</t>
<t>If the router is in INCLUDE filter mode for a multicast address, we
<t>If the router is in INCLUDE filter mode for a multicast address, we
will use the notation INCLUDE (A), where A denotes the associated will use the notation INCLUDE (A), where A denotes the associated
Include List. If the router is in EXCLUDE filter mode for a Include List. If the router is in EXCLUDE filter mode for a
multicast address, we will use the notation EXCLUDE (X,Y), where X multicast address, we will use the notation EXCLUDE (X,Y), where X
and Y denote the associated Requested List and Exclude List and Y denote the associated Requested List and Exclude List,
respectively.</t> respectively.</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 set A of the 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
have their source timers set to value J. 'Delete (A)' means that the set A of the source records should be deleted. 'Filter Timer = J' means
set A of source records should be deleted. 'Filter Timer = J' means
that the Filter Timer for the multicast address should be set to that the Filter Timer for the multicast address should be set to
value J.</t> value J.</t>
<table align="left" anchor="rcvd-csr">
<table title="Actions for Received Current State Records" anchor="rcvd-csr"> <name>Actions for Received Current State Records</name>
<tbody> <tbody>
<tr><th align="center">Router State</th> <tr>
<th align="center">Report Received</th> <th>Router State</th>
<th align="center">New Router State</th> <th>Report Received</th>
<th align="center">Actions</th></tr> <th>New Router State</th>
<tr><td>INCLUDE (A)</td> <th>Actions</th>
<td>IS_IN (B)</td> </tr>
<td>INCLUDE (A+B)</td> <tr>
<td>(B)=MALI</td></tr> <td>INCLUDE (A)</td>
<tr><td>INCLUDE (A)</td> <td>IS_IN (B)</td>
<td>IS_EX (B)</td> <td>INCLUDE (A+B)</td>
<td>EXCLUDE (A*B, B-A)</td> <td>(B)=MALI</td>
<td><ul empty="true" bare="true"> </tr>
<li>(B-A)=0</li> <tr>
<li>Delete (A-B)</li> <td>INCLUDE (A)</td>
<li>Filter Timer=MALI</li></ul></td></tr> <td>IS_EX (B)</td>
<tr><td>EXCLUDE (X,Y)</td> <td>EXCLUDE (A*B, B-A)</td>
<td>IS_IN (A)</td> <td>
<td>EXCLUDE (X+A, Y-A)</td> <ul empty="true" bare="true">
<td>(A)=MALI</td></tr> <li>(B-A)=0</li>
<tr><td>EXCLUDE (X,Y)</td> <li>Delete (A-B)</li>
<td>IS_EX (A)</td> <li>Filter Timer=MALI</li>
<td>EXCLUDE (A-Y, Y*A)</td> </ul>
<td><ul empty="true" bare="true"> </td>
<li>(A-X-Y)=MALI</li> </tr>
<li>Delete (X-A)</li> <tr>
<li>Delete (Y-A)</li> <td>EXCLUDE (X,Y)</td>
<li>Filter Timer=MALI</li></ul></td></tr> <td>IS_IN (A)</td>
</tbody> <td>EXCLUDE (X+A, Y-A)</td>
</table> <td>(A)=MALI</td>
</section> </tr>
<tr>
<section title="Reception of Filter Mode Change and Source List Change Record <td>EXCLUDE (X,Y)</td>
s" anchor="fm_chg"> <td>IS_EX (A)</td>
<td>EXCLUDE (A-Y, Y*A)</td>
<t>When a change in the global state of a multicast address occurs in a <td>
<ul empty="true" bare="true">
<li>(A-X-Y)=MALI</li>
<li>Delete (X-A)</li>
<li>Delete (Y-A)</li>
<li>Filter Timer=MALI</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section anchor="fm_chg" 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 multicast address occurs in
a
node, the node sends either a Source List Change Record or a Filter node, the node sends either a Source List Change Record or a Filter
Mode Change Record for that multicast address. As with Current State Mode Change Record for that multicast address. As with Current State
Records, routers must act upon these records and possibly change Records, routers must act upon these records and possibly change
their own state to reflect the new listening state of the link.</t> their own state to reflect the new listening state of the link.</t>
<t>The Querier must query sources or multicast addresses that are
<t>The Querier must query sources or multicast addresses that are
requested to be no longer forwarded. When a router queries or requested to be no longer forwarded. When a router queries or
receives a query for a specific set of sources, it lowers its source receives a query for a specific set of sources, it lowers its source
timers for those sources to a small interval of Last Listener Query timers for those sources to a small interval of Last Listener Query
Time milliseconds. If multicast address records are received in Time milliseconds. If multicast address records are received in
response to the queries which express interest in listening the response to the queries that express interest in listening to the
queried sources, the corresponding timers are updated.</t> queried sources, the corresponding timers are updated.</t>
<t>Multicast Address Specific queries can also be used in order to
<t>Multicast Address Specific queries can also be used in order to
enable a fast transition of a router from EXCLUDE to INCLUDE mode, in enable a fast transition of a router from EXCLUDE to INCLUDE mode, in
case a received Multicast Address Record motivates this action. The case a received Multicast Address Record motivates this action. The
Filter Timer for that multicast address is lowered to a small Filter Timer for that multicast address is lowered to a small
interval of Last Listener Query Time milliseconds. If any multicast interval of Last Listener Query Time milliseconds. If any multicast
address records that express EXCLUDE mode interest in the multicast address records that express EXCLUDE mode interest in the multicast
address are received within this interval, the Filter Timer is address are received within this interval, the Filter Timer is
updated and the suggestion to the routing protocol to forward the updated and the suggestion to the routing protocol to forward the
multicast address stands without any interruption. If not, the multicast address stands without any interruption. If not, the
router will switch to INCLUDE filter mode for that multicast address.< /t> router will switch to INCLUDE filter mode for that multicast address.< /t>
<t>During the query period (i.e., Last Listener Query Time millisecond
<t>During the query period (i.e., Last Listener Query Time milliseconds) s),
the MLD component in the router continues to suggest to the routing the MLD component in the router continues to suggest to the routing
protocol to forward traffic from the multicast addresses or sources protocol to forward traffic from the multicast addresses or sources
that are queried. It is not until after Last Listener Query Time that are queried.
<!--[rfced] The following sentence is hard to read. May we add "and"
and two commas for easier readability as shown below?
Original:
It is not until after the Last Listener Query Time milliseconds
without receiving a record that expresses interest in the queried
multicast address or sources that the router may prune the
multicast address or sources from the link.
Perhaps:
It is not until after the Last Listener Query Time milliseconds,
and without receiving a record that expresses interest in the queried
multicast address or sources, that the router may prune the
multicast address or sources from the link.
-->
It is not until after Last Listener Query Time
milliseconds without receiving a record that expresses interest in milliseconds without receiving a record that expresses interest in
the queried multicast address or sources that the router may prune the queried multicast address or sources that the router may prune
the multicast address or sources from the link.</t> the multicast address or sources from the link.</t>
<t><xref target="mr-state-trans" format="default"/> describes the chan
<t><xref target="mr-state-trans"/> describes the changes in multicast address ges in multicast address state
state
and the action(s) taken when receiving either Filter Mode Change or and the action(s) taken when receiving either Filter Mode Change or
Source List Change Records. <xref target="mr-state-trans"/> also describes t Source List Change Records. <xref target="mr-state-trans" format="default"/>
he queries also describes the queries
which are sent by the Querier when a particular report is received.</t that are sent by the Querier when a particular report is received.</t>
> <t>We use the following notation to describe the queries that are
<t>We use the following notation for describing the queries that are
sent. We use the notation 'Q(MA)' to describe a Multicast Address sent. We use the notation 'Q(MA)' to describe a Multicast Address
Specific Query to the MA multicast address. We use the notation Specific Query to the MA multicast address. We use the notation
'Q(MA,A)' to describe a Multicast Address and Source Specific Query 'Q(MA,A)' to describe a Multicast Address and Source Specific Query
to the MA multicast address with source list A. If source list A is to the MA multicast address 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 null as a result of the action (e.g. A*B), then no query is sent as a
result of the operation.</t> result of the operation.</t>
<t>In order to maintain protocol robustness, queries defined in the
<t>In order to maintain protocol robustness, queries defined in the Actions column of <xref target="mr-state-trans" format="default"/> need to be
Actions column of <xref target="mr-state-trans"/> need to be transmitted [Las transmitted [Last
t
Listener Query Count] times, once every [Last Listener Query Listener Query Count] times, once every [Last Listener Query
Interval] period.</t> Interval] period.</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 multicast address, the new and pending be retransmitted for the same multicast address, the new and pending
queries have to be merged. In addition, received host reports for a queries have to be merged. In addition, received host reports for a
multicast address with pending queries may affect the contents of multicast address with pending queries may affect the contents of
those queries. <xref target="spec_qry" /> describes the process of bu ilding and those queries. <xref target="spec_qry" format="default"/> describes t he process of building and
maintaining the state of pending queries.</t> maintaining the state of pending queries.</t>
<table align="left" anchor="mr-state-trans">
<table title="Multicast Router State Transitions" anchor="mr-state-trans"> <name>Multicast Router State Transitions</name>
<tbody> <tbody>
<tr><th align="center">Router State</th> <tr>
<th align="center">Report Received</th> <th>Router State</th>
<th align="center">New Router State</th> <th>Report Received</th>
<th align="center">Actions</th></tr> <th>New Router State</th>
<tr><td>INCLUDE (A)</td><td>ALLOW (B)</td><td>INCLUDE(A+B)</td><td>(B)= <th>Actions</th>
MALI</td></tr> </tr>
<tr><td>INCLUDE (A)</td><td>BLOCK (B)</td><td>INCLUDE(A)</td><td>Send Q( <tr>
MA,A*B)</td></tr> <td>INCLUDE (A)</td>
<tr><td>INCLUDE (A)</td><td>TO_EX (B)</td><td>EXCLUDE(A*B,B-A)</td><td>( <td>ALLOW (B)</td>
B-A)=0, Delete (A-B), Send Q(MA,A*B), Filter Timer=MALI</td></tr> <td>INCLUDE(A+B)</td>
<tr><td>INCLUDE (A)</td><td>TO_IN (B)</td><td>INCLUDE(A+B)</td><td>(B)=M <td>(B)=MALI</td>
ALI, Send Q(MA,A-B)</td></tr> </tr>
<tr><td>EXCLUDE (X,Y)</td><td>ALLOW (A)</td><td>EXCLUDE(X+A,Y-A)</td><td <tr>
>(A)=MALI</td></tr> <td>INCLUDE (A)</td>
<tr><td>EXCLUDE (X,Y)</td><td>BLOCK (A)</td><td>EXCLUDE(X+(A-Y),Y)</td>< <td>BLOCK (B)</td>
td>(A-X-Y)=Filter Timer, Send Q(MA,A-Y)</td></tr> <td>INCLUDE(A)</td>
<tr><td>EXCLUDE (X,Y)</td><td>TO_EX (A)</td><td>EXCLUDE(A-Y,Y*A)</td><td <td>Send Q(MA,A*B)</td>
>(A-X-Y)=Filter Timer, Delete (X-A), Delete (Y-A), Send Q(MA,A-Y), Filter Timer= </tr>
MALI</td></tr> <tr>
<tr><td>EXCLUDE (X,Y)</td><td>TO_IN (A)</td><td>EXCLUDE(X+A,Y-A)</td><td <td>INCLUDE (A)</td>
>(A)=MALI, Send Q(MA,X-A), Send Q(MA)</td></tr> <td>TO_EX (B)</td>
</tbody> <td>EXCLUDE(A*B,B-A)</td>
</table> <td>(B-A)=0, Delete (A-B), Send Q(MA,A*B), Filter Timer=MALI</td
</section> >
</section> </tr>
<tr>
<section title="Switching Router Filter Modes" anchor="rtr_mode"> <td>INCLUDE (A)</td>
<td>TO_IN (B)</td>
<t>The Filter Timer is used as a mechanism for transitioning the Router <td>INCLUDE(A+B)</td>
<td>(B)=MALI, Send Q(MA,A-B)</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>ALLOW (A)</td>
<td>EXCLUDE(X+A,Y-A)</td>
<td>(A)=MALI</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>BLOCK (A)</td>
<td>EXCLUDE(X+(A-Y),Y)</td>
<td>(A-X-Y)=Filter Timer, Send Q(MA,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)=Filter Timer, Delete (X-A), Delete (Y-A), Send Q(MA,
A-Y), Filter Timer=MALI</td>
</tr>
<tr>
<td>EXCLUDE (X,Y)</td>
<td>TO_IN (A)</td>
<td>EXCLUDE(X+A,Y-A)</td>
<td>(A)=MALI, Send Q(MA,X-A), Send Q(MA)</td>
</tr>
</tbody>
</table>
</section>
</section>
<section anchor="rtr_mode" numbered="true" toc="default">
<name>Switching Router Filter Modes</name>
<t>The Filter 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 Filter Timer expires with a Router Filter Mode of EXCLUDE, a
<t>When a Filter Timer expires with a Router Filter Mode of EXCLUDE, a
router assumes that there are no nodes with a filter mode of router assumes that there are no nodes with a filter mode of
EXCLUDE present on the attached link. Thus, the router transitions EXCLUDE present on the attached link. Thus, the router transitions
to INCLUDE filter mode for the multicast address.</t> to INCLUDE filter mode for the multicast address.</t>
<t>A router uses the sources from the Requested List as its state for
<t>A router uses the sources from the Requested List as its state for
the switch to a filter mode of INCLUDE. Sources from the Requested the switch to a filter mode of INCLUDE. Sources from the Requested
List are moved in the Include List, while sources from the Exclude List are moved in the Include List, while sources from the Exclude
List are deleted. For example, if a router's state for a multicast List are deleted. For example, if a router's state for a multicast
address is EXCLUDE(X,Y) and the Filter Timer expires for that address is EXCLUDE(X,Y) and the Filter Timer expires for that
multicast address, the router switches to filter mode of INCLUDE with multicast address, the router switches to filter mode of INCLUDE with
state INCLUDE(X). If at the moment of the switch the Requested List state INCLUDE(X). If at the moment of the switch the Requested List
(X) is empty, the multicast address record is deleted from the (X) is empty, the multicast address record is deleted from the
router.</t> router.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Action on Reception of Queries"> <name>Action on Reception of Queries</name>
<t>Upon reception of an MLD message that contains a Query, the router
<t>Upon reception of an MLD message that contains a Query, the router
checks if the source address of the message is a valid link-local checks if the source address of the message is a valid link-local
address, if the Hop Limit is set to 1, and if the Router Alert option address, if the Hop Limit is set to 1, and if the Router Alert option
is present in the Hop-By-Hop Options header of the IPv6 packet. If is present in the Hop-by-Hop Options header of the IPv6 packet. If
any of these checks fails, the packet is dropped.</t> any of these checks fail, the packet is dropped.</t>
<t>If the validity of the MLD message is verified, the router starts to
<t>If the validity of the MLD message is verified, the router starts to
process the Query.</t> process the Query.</t>
<section numbered="true" toc="default">
<section title="Timer Updates"> <name>Timer Updates</name>
<t>MLDv2 uses the S flag to ensure
<t>MLDv2 uses the Suppress Router-Side Processing flag to ensure robustness, as explained in <xref target="build_state" format="default
robustness, as explained in <xref target="build_state" />. When a rou "/>. When a router sends or
ter sends or receives a query with a clear S flag,
receives a query with a clear Suppress Router-Side Processing flag,
it must update its timers to reflect the correct timeout values for it must update its timers to reflect the correct timeout values for
the multicast address or sources being queried. The following table the multicast address or sources being queried. The following table
describes the timer actions when sending or receiving a Multicast describes the timer actions when sending or receiving a Multicast
Address Specific or Multicast Address and Source Specific Query with Address Specific or Multicast Address and Source Specific Query with
the Suppress Router-Side Processing flag not set.</t> the S flag not set.</t>
<figure>
<artwork><![CDATA[
Query Action
Q(MA,A) Source Timers for sources in A are lowered to LLQT
Q(MA) Filter Timer is lowered to LLQT
]]></artwork>
</figure>
<t>When a router sends or receives a query with the Suppress Router-Side
Processing flag set, it will not update its timers.</t>
</section>
<section title="Querier Election" anchor="elect">
<t>MLDv2 elects a single router per subnet to be in Querier state; all
the other routers on the subnet should be in Non-Querier state. MLDv2
uses the same querier election mechanism as MLDv1, namely the IPv6
address. When a router starts operating on a subnet, by default it
considers itself as being the Querier. Thus, it sends several
General Queries separated by a small time interval (see <xref target="
start_qry_int" />
and <xref target="start_qry_cnt" /> for details).</t>
<t>When a router receives a query with a lower IPv6 address than its
own, it sets the Other Querier Present timer to Other Querier Present
Timeout; if it was previously in Querier state, it switches to Non-
Querier state and ceases to send queries on the link. After the
Other Querier Present timer expires, it should re-enter the Querier
state and begin sending General Queries.</t>
<t>All MLDv2 queries MUST be sent with the fe80::/64 link-local source
address prefix. Therefore, for the purpose of MLDv2 querier
election, an IPv6 address A is considered to be lower than an IPv6
address B if the interface ID represented by the last 64 bits of
address A, in big-endian bit order, is lower than the interface ID
represented by the last 64 bits of address B.</t>
</section>
<section title="Building and Sending Specific Queries" anchor="spec_qry">
<section title="Building and Sending Multicast Address Specific Queries"> <table align="left">
<thead>
<tr>
<th>Query</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<tr>
<td>Q(MA,A)</td>
<td>Source Timers for sources in A are lowered to LLQT.</td>
</tr>
<tr>
<td>Q(MA)</td>
<td>The Filter Timer is lowered to LLQT.</td>
</tr>
</tbody>
</table>
<t>When a table action "Send Q(MA)" is encountered, the Filter Timer <t>When a router sends or receives a query with the S
flag set, it will not update its timers.</t>
</section>
<section anchor="elect" numbered="true" toc="default">
<name>Querier Election</name>
<t>MLDv2 elects a single router per subnet to be in Querier state;
all the other routers on the subnet should be in Non-Querier
state. MLDv2 uses the same querier election mechanism as MLDv1,
namely the IPv6 address. When a router starts operating on a
subnet, by default it considers itself as being the Querier. Thus,
it sends several General Queries separated by a small time interval
(see Sections <xref target="start_qry_int" format="counter"/> and
<xref target="start_qry_cnt" format="counter"/> for details).</t>
<t>When a router receives a query with a lower IPv6 address than its
own, it sets the Other Querier Present timer to Other Querier
Present Timeout; if it was previously in Querier state, it switches
to Non- Querier state and ceases to send queries on the link. After
the Other Querier Present timer expires, it should re-enter the
Querier state and begin sending General Queries.</t>
<t>All MLDv2 queries <bcp14>MUST</bcp14> be sent with the fe80::/64
link-local source address prefix. Therefore, for the purpose of
MLDv2 querier election, an IPv6 address A is considered to be lower
than an IPv6 address B if the interface ID represented by the last
64 bits of address A, in big-endian bit order, is lower than the
interface ID represented by the last 64 bits of address B.</t>
</section>
<section anchor="spec_qry" numbered="true" toc="default">
<name>Building and Sending Specific Queries</name>
<section numbered="true" toc="default">
<name>Building and Sending Multicast Address Specific Queries</name>
<t>When a table action "Send Q(MA)" is encountered, the Filter Timer
must be lowered to LLQT. The Querier must then immediately send a must be lowered to LLQT. The Querier must then immediately send a
Multicast Address Specific query as well as schedule [Last Listener Multicast Address Specific Query as well as schedule [Last Listener
Query Count - 1] query retransmissions to be sent every [Last Query Count - 1] query retransmissions to be sent every [Last
Listener Query Interval], over [Last Listener Query Time].</t> Listener Query Interval], over [Last Listener Query Time].</t>
<t>When transmitting a Multicast Address Specific Query, if the Filt
<t>When transmitting a Multicast Address Specific Query, if the Filter er
Timer is larger than LLQT, the "Suppress Router-Side Processing" bit Timer is larger than LLQT, the "Suppress Router-Side Processing" bit
is set in the query message.</t> is set in the query message.</t>
</section> </section>
<section title="Building and Sending Multicast Address and Source Specific Qu <section numbered="true" toc="default">
eries"> <name>Building and Sending Multicast Address and Source Specific Que
ries</name>
<t>When a table action "Send Q(MA,X)" is encountered by the Querier in <!-- [rfced] We see "Send Q(MA,X-A)" not "Send Q(MA,X)" in Table 8. Is
the table in <xref target="fm_chg" />, the following actions must be performe this variance okay or is an update needed?
d
for each of the sources in X that send to multicast address MA, with Current:
When a table action "Send Q(MA,X)" is encountered by the Querier in
Table 8 (Section 7.4.2), the following actions must be performed for
each of the sources in X that send to multicast address MA, with the
source timer larger than LLQT: source timer larger than LLQT:
<list style="bullets">
<t>Lower source timer to LLQT;</t>
<t>Add the sources to the Retransmission List;</t>
<t>Set the Source Retransmission Counter for each source to [Last List
ener Query Count].</t>
</list></t>
<t>The Querier must then immediately send a Multicast Address and Source Perhaps:
When a table action "Send Q(MA,X-A)" is encountered by the Querier in
Table 8 (Section 7.4.2), the following actions must be performed for
each of the sources in X that send to multicast address MA, with the
source timer larger than LLQT:
-->
<t>When a table action "Send Q(MA,X)" is encountered by the Querier
in
<xref target="mr-state-trans"/> (<xref target="fm_chg" format="default"/>), t
he following actions must be performed
for each of the sources in X that send to multicast address MA, with
the source timer larger than LLQT:
</t>
<ul spacing="normal">
<li>
<t>lower source timer to LLQT;</t>
</li>
<li>
<t>add the sources to the Retransmission List; and</t>
</li>
<li>
<t>set the Source Retransmission Counter for each source to [Las
t Listener Query Count].</t>
</li>
</ul>
<t>The Querier must then immediately send a Multicast Address and So
urce
Specific Query as well as schedule [Last Listener Query Count -1] Specific Query as well as schedule [Last Listener Query Count -1]
query retransmissions to be sent every [Last Listener Query query retransmissions to be sent every [Last Listener Query
Interval], over [Last Listener Query Time]. The contents of these Interval], over [Last Listener Query Time]. The contents of these
queries are calculated as follows.</t> queries are calculated as follows.</t>
<t>When building a Multicast Address and Source Specific Query for a
<t>When building a Multicast Address and Source Specific Query for a
multicast address MA, two separate query messages are sent for the multicast address MA, two separate query messages are sent for the
multicast address. The first one has the "Suppress Router-Side multicast address. The first one has the "Suppress Router-Side
Processing" bit set and contains all the sources with retransmission Processing" bit set and contains all the sources with retransmission
state (i.e., sources from the Retransmission List of that multicast state (i.e., sources from the Retransmission List of that multicast
address), and timers greater than LLQT. The second has the "Suppress address) and timers greater than LLQT. The second has the "Suppress
Router-Side Processing" bit clear and contains all the sources with Router-Side Processing" bit clear and contains all the sources with
retransmission state and timers lower or equal to LLQT. If either of retransmission state and timers lower or equal to LLQT. If either of
the two calculated messages does not contain any sources, then its the two calculated messages does not contain any sources, then its
transmission is suppressed.</t> transmission is suppressed.</t>
<t>Note: If a Multicast Address Specific Query is scheduled to be
<t>Note: If a Multicast Address Specific query is scheduled to be
transmitted at the same time as a Multicast Address and Source transmitted at the same time as a Multicast Address and Source
specific query for the same multicast address, then transmission of Specific Query for the same multicast address, then transmission of
the Multicast Address and Source Specific message with the "Suppress the Multicast Address and Source Specific message with the "Suppress
Router-Side Processing" bit set may be suppressed.</t> 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 MLDv1" anchor="interop"> <name>Interoperation with MLDv1</name>
<t>MLD version 2 hosts and routers interoperate with hosts and routers
<t>MLD version 2 hosts and routers interoperate with hosts and routers
that have not yet been upgraded to MLDv2. This compatibility is that have not yet been upgraded to MLDv2. 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 MLD operating on hosts and routers within a on the versions of MLD 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 MLD version of a Multicast Listener Query message is determined
<t>The MLD version of a Multicast Listener Query message is determined
as follows: as follows:
<list style="empty"> </t>
<t>MLDv1 Query: length = 24 octets</t> <ul spacing="normal">
<t>MLDv2 Query: length >= 28 octets</t> <li>
</list></t> <t>MLDv1 Query: length = 24 octets</t>
</li>
<t>Query messages that do not match any of the above conditions (e.g., a <li>
Query of length 26 octets) MUST be silently ignored.</t> <t>MLDv2 Query: length &gt;= 28 octets</t>
</section> </li>
</ul>
<section title="Multicast Address Listener Behavior"> <t>Query messages that do not match any of the above conditions (e.g., a
Query of length 26 octets) <bcp14>MUST</bcp14> be silently ignored.</t
<section title="In the Presence of MLDv1 Routers"> >
<t>In order to be compatible with MLDv1 routers, MLDv2 hosts MUST </section>
operate in version 1 compatibility mode. MLDv2 hosts MUST keep state <section numbered="true" toc="default">
<name>Multicast Address Listener Behavior</name>
<section numbered="true" toc="default">
<name>In the Presence of MLDv1 Routers</name>
<t>In order to be compatible with MLDv1 routers, MLDv2 hosts <bcp14>MU
ST</bcp14>
operate in version 1 compatibility mode. MLDv2 hosts <bcp14>MUST</bcp14> kee
p state
per local interface regarding the compatibility mode of each attached per local interface regarding the compatibility mode of each attached
link. A host's compatibility mode is determined from the Host link. A host's compatibility mode is determined from the Host
Compatibility Mode variable which can be in one of the two states: Compatibility Mode variable that can be in one of the two states:
MLDv1 or MLDv2.</t> MLDv1 or MLDv2.</t>
<t>The Host Compatibility Mode of an interface is set to MLDv1 wheneve
<t>The Host Compatibility Mode of an interface is set to MLDv1 whenever r
an MLDv1 Multicast Address Listener General Query is received on that an MLDv1 Multicast Address Listener General Query is received on that
interface. At the same time, the Older Version Querier Present timer interface. At the same time, the Older Version Querier Present timer
for the interface is set to Older Version Querier Present Timeout for the interface is set to Older Version Querier Present Timeout
seconds. The timer is re-set whenever a new MLDv1 General Query is received seconds. The timer is reset whenever a new MLDv1 General Query is received
on that interface. If the Older Version Querier Present timer on that interface. If the Older Version Querier Present timer
expires, the host switches back to Host Compatibility Mode of MLDv2.</ t> expires, the host switches back to Host Compatibility Mode of MLDv2.</ t>
<t>When Host Compatibility Mode is MLDv2, a host acts using the MLDv2
<t>When Host Compatibility Mode is MLDv2, a host acts using the MLDv2
protocol on that interface. When Host Compatibility Mode is MLDv1, a protocol on that interface. When Host Compatibility Mode is MLDv1, a
host acts in MLDv1 compatibility mode, using only the MLDv1 protocol, host acts in MLDv1 compatibility mode, using only the MLDv1 protocol,
on that interface.</t> on that interface.</t>
<t>An MLDv1 Querier will send General Queries with the Maximum Respons
<t>An MLDv1 Querier will send General Queries with the Maximum Response e
Code set to the desired Maximum Response Delay, i.e., the full range Code set to the desired Maximum Response Delay, i.e., the full range
of this field is linear and the exponential algorithm described in of this field is linear and the exponential algorithm described in
<xref target="mrcode" />. is not used.</t> <xref target="mrcode" format="default"/>. is 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 responses and retransmission timers.</t> pending responses and retransmission timers.</t>
<t>An SSM-aware host that receives an MLDv1 General Query or MLDv1 Gro
<t>An SSM-aware host that receives an MLDv1 General Query or MLDv1 Group up
Specific Query for a multicast address in the SSM address range SHOULD log an Specific Query for a multicast address in the SSM address range <bcp14>SHOULD
error. </bcp14> log an error.
It is RECOMMENDED that implementions provide a configuration option to disabl It is <bcp14>RECOMMENDED</bcp14> that implementations provide a configuration
e option to disable the
use of Host Compatibility Mode to allow networks to operate only in SSM mode. use of Host Compatibility Mode to allow networks to operate only 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 MLDv1 Multicast Address Listeners"> <name>In the Presence of MLDv1 Multicast Address Listeners</name>
<t>An MLDv2 host may be placed on a link where there are MLDv1 hosts.
<t>An MLDv2 host may be placed on a link where there are MLDv1 hosts. A A
host MAY allow its MLDv2 Multicast Listener Report to be suppressed host <bcp14>MAY</bcp14> allow its MLDv2 Multicast Listener Report to be suppr
essed
by a Version 1 Multicast Listener Report.</t> by a Version 1 Multicast Listener Report.</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 MLDv1 Routers"> <section numbered="true" toc="default">
<name>In the Presence of MLDv1 Routers</name>
<t>MLDv2 routers may be placed on a network where there is at least one <t>MLDv2 routers may be placed on a network where there is at least on
e
MLDv1 router. The following requirements apply: MLDv1 router. The following requirements apply:
<list style="bullets"> </t>
<t>If an MLDv1 router is present on the link, the Querier MUST use <ul spacing="normal">
<li>
<t>If an MLDv1 router is present on the link, the Querier <bcp14>M
UST</bcp14> use
the lowest version of MLD present on the network. This must be the lowest version of MLD present on the network. This must be
administratively assured. Routers that desire to be compatible administratively assured. Routers that desire to be compatible
with MLDv1 MUST have a configuration option to act in MLDv1 mode; with MLDv1 <bcp14>MUST</bcp14> have a configuration option to act in MLDv1 mode;
if an MLDv1 router is present on the link, the system if an MLDv1 router is present on the link, the system
administrator must explicitly configure all MLDv2 routers to act administrator must explicitly configure all MLDv2 routers to act
in MLDv1 mode. When in MLDv1 mode, the Querier MUST send periodic in MLDv1 mode. When in MLDv1 mode, the Querier <bcp14>MUST</bcp14> send pe riodic
General Queries truncated at the Multicast Address field (i.e., 24 General Queries truncated at the Multicast Address field (i.e., 24
bytes long), and SHOULD also warn about receiving an MLDv2 Query bytes long) and <bcp14>SHOULD</bcp14> also warn about receiving an MLDv2 Q
(such warnings MUST be rate-limited). The Querier MUST also fill uery
(such warnings <bcp14>MUST</bcp14> be rate-limited). The Querier <bcp14>M
UST</bcp14> also fill
in the Maximum Response Delay in the Maximum Response Code field, in the Maximum Response Delay in the Maximum Response Code field,
i.e., the exponential algorithm described in <xref target="mrcode" /> is n ot i.e., the exponential algorithm described in <xref target="mrcode" format= "default"/> is not
used.</t> used.</t>
<t>If a router is not explicitly configured to use MLDv1 and receives </li>
an MLDv1 General Query, it SHOULD log a warning. These warnings <li>
MUST be rate-limited.</t> <t>If a router is not explicitly configured to use MLDv1 and recei
<t>It is RECOMMENDED that implementions provide a configuration option ves
an MLDv1 General Query, it <bcp14>SHOULD</bcp14> log a warning. These war
nings
<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 in SSM mode. to disable use of compatibility mode to allow networks to operate only in SSM mode.
This configuration option SHOULD be disabled by default.</t> This configuration option <bcp14>SHOULD</bcp14> be disabled by default.</t>
</list></t> </li>
</section> </ul>
</section>
<section title="In the Presence of MLDv1 Multicast Address Listeners"> <section numbered="true" toc="default">
<name>In the Presence of MLDv1 Multicast Address Listeners</name>
<t>MLDv2 routers may be placed on a network where there are hosts that <t>MLDv2 routers may be placed on a network where there are hosts that
have not yet been upgraded to MLDv2. In order to be compatible with have not yet been upgraded to MLDv2. In order to be compatible with
MLDv1 hosts, MLDv2 routers MUST operate in version 1 compatibility MLDv1 hosts, MLDv2 routers <bcp14>MUST</bcp14> operate in version 1 compatibi lity
mode. MLDv2 routers keep a compatibility mode per multicast address mode. MLDv2 routers keep a compatibility mode per multicast address
record. The compatibility mode of a multicast address is determined record. The compatibility mode of a multicast address is determined
from the Multicast Address Compatibility Mode variable, which can be from the Multicast Address Compatibility Mode variable, which can be
in one of the two following states: MLDv1 or MLDv2.</t> in one of the two following states: MLDv1 or MLDv2.</t>
<t>The Multicast Address Compatibility Mode of a multicast address
<t>The Multicast Address Compatibility Mode of a multicast address
record is set to MLDv1 whenever an MLDv1 Multicast Listener Report is record is set to MLDv1 whenever an MLDv1 Multicast Listener Report is
received for that multicast address. At the same time, the Older received for that multicast address. At the same time, the Older
Version Host Present timer for the multicast address is set to Older Version Host Present timer for the multicast address is set to Older
Version Host Present Timeout seconds. The timer is re-set whenever a Version Host Present Timeout seconds. The timer is reset whenever a
new MLDv1 Report is received for that multicast address. If the new MLDv1 Report is received for that multicast address. If the
Older Version Host Present timer expires, the router switches back to Older Version Host Present timer expires, the router switches back to
Multicast Address Compatibility Mode of MLDv2 for that multicast the Multicast Address Compatibility Mode of MLDv2 for that multicast
address.</t> address.</t>
<t>Note that when a router switches back to MLDv2 Multicast Address
<t>Note that when a router switches back to MLDv2 Multicast Address
Compatibility Mode for a multicast address, it takes some time to Compatibility Mode for a multicast address, it takes some time to
regain source-specific state information. Source-specific regain source-specific state information. Source-specific
information will be learned during the next General Query, but information will be learned during the next General Query, but
sources that should be blocked will not be blocked until [Multicast sources that should be blocked will not be blocked until [Multicast
Address Listening Interval] after that.</t> Address Listening Interval] after that.</t>
<t>When Multicast Address Compatibility Mode is MLDv2, a router acts
<t>When Multicast Address Compatibility Mode is MLDv2, a router acts
using the MLDv2 protocol for that multicast address. When Multicast using the MLDv2 protocol for that multicast address. When Multicast
Address Compatibility Mode is MLDv1, a router internally translates Address Compatibility Mode is MLDv1, a router internally translates
the following MLDv1 messages for that multicast address to their the following MLDv1 messages for that multicast address to their
MLDv2 equivalents (<xref target="msg-xlate"/>).</t> MLDv2 equivalents (<xref target="msg-xlate" format="default"/>).</t>
<table title="MLD Message Translation" anchor="msg-xlate"> <table anchor="msg-xlate">
<tbody> <name>MLD Message Translation</name>
<tr><th align="center">MLDv1 Message</th> <tbody>
<th align="center">MLDv2 Equivalent</th></tr> <tr>
<tr><td>Report</td><td>IS_EX( {} )</td></tr> <th align="left">MLDv1 Message</th>
<tr><td>Done</td><td>TO_IN( {} )</td></tr> <th align="left">MLDv2 Equivalent</th>
</tbody> </tr>
</table> <tr>
<td>Report</td>
<t>MLDv2 BLOCK messages are ignored, as are source-lists in TO_EX() <td>IS_EX( {} )</td>
</tr>
<tr>
<td>Done</td>
<td>TO_IN( {} )</td>
</tr>
</tbody>
</table>
<t>MLDv2 BLOCK messages are ignored, as are source-lists in TO_EX()
messages (i.e., any TO_EX() message is treated as TO_EX( {} )). On messages (i.e., any TO_EX() message is treated as TO_EX( {} )). On
the other hand, the Querier continues to send MLDv2 queries, the other hand, the Querier continues to send MLDv2 queries,
regardless of its Multicast Address Compatibility Mode.</t> regardless of its Multicast Address Compatibility Mode.</t>
</section> </section>
</section> </section>
</section> </section>
<section anchor="timers" numbered="true" toc="default">
<section title="List of Timers, Counters, and their Default Values" anchor="t <name>List of Timers, Counters, and Their Default Values</name>
imers"> <t>Most of these timers are configurable. If non-default settings are
used, they <bcp14>MUST</bcp14> be consistent among all nodes on a single link
<t>Most of these timers are configurable. If non-default settings are . Note
used, they MUST be consistent among all nodes on a single link. Note
that parentheses are used to group expressions to make the algebra that parentheses are used to group expressions to make the algebra
clear.</t> clear.</t>
<section anchor="robust" numbered="true" toc="default">
<section title="Robustness Variable" anchor="robust"> <name>Robustness Variable</name>
<t>The Robustness Variable allows tuning for the expected packet loss on
<t>The Robustness Variable allows tuning for the expected packet loss on
a link. If a link is expected to be lossy, the value of the a link. If a link is expected to be lossy, the value of the
Robustness Variable may be increased. MLD is robust to [Robustness Robustness Variable may be increased. MLD is robust to [Robustness
Variable] - 1 packet losses. The value of the Robustness Variable Variable] - 1 packet losses. The value of the Robustness Variable
MUST NOT be zero, and SHOULD NOT be one. Default value: 2.</t> <bcp14>MUST NOT</bcp14> be zero and <bcp14>SHOULD NOT</bcp14> be one.
</section> Default value: 2.</t>
</section>
<section title="Query Interval" anchor="qry_int"> <section anchor="qry_int" numbered="true" toc="default">
<name>Query Interval</name>
<t>The Query Interval variable denotes the interval between General <t>The Query Interval variable denotes the interval between General
Queries sent by the Querier. Default value: 125 seconds.</t> Queries sent by the Querier. Default value: 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 MLD messages on the link; larger values cause MLD Queries to be of MLD messages on the link; larger values cause MLD Queries to be
sent less often.</t> sent less often.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Query Response Interval"> <name>Query Response Interval</name>
<t>The Query Response Interval is the Maximum Response Delay used to cal
<t>The Maximum Response Delay used to calculate the Maximum Response culate the Maximum Response
Code inserted into the periodic General Queries. Default value: Code that is inserted into the periodic General Queries. Default value:
10000 (10 seconds)</t> 10000 (10 seconds)</t>
<t>By varying the [Query Response Interval], an administrator may tune
<t>By varying the [Query Response Interval], an administrator may tune
the burstiness of MLD messages on the link; larger values make the the burstiness of MLD messages on the link; larger values make the
traffic less bursty, as host responses are spread out over a larger traffic less bursty, as host responses are spread out over a larger
interval. The number of seconds represented by the [Query Response interval. The number of seconds represented by the [Query Response
Interval] must be less than the [Query Interval].</t> Interval] must be less than the [Query Interval].</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Multicast Address Listening Interval"> <name>Multicast Address Listening Interval</name>
<t>The Multicast Address Listening Interval (MALI) is the amount of time
<t>The Multicast Address Listening Interval (MALI) is the amount of time
that must pass before a multicast router decides there are no more that must pass before a multicast router decides there are no more
listeners of a multicast address or a particular source on a link. listeners of a multicast address or a particular source on a link.
This value MUST be ([Robustness Variable] times [Query Interval]) This value <bcp14>MUST</bcp14> be ([Robustness Variable] times [Query Interva l])
plus 2 times [Query Response Interval].</t> plus 2 times [Query Response Interval].</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Other Querier Present Timeout"> <name>Other Querier Present Timeout</name>
<t>The Other Querier Present Timeout is the length of time that must
<t>The Other Querier Present Timeout 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 ([Robustness Variable] times ([Query Interval]) plus (one <bcp14>MUST</bcp14> be ([Robustness Variable] times ([Query Interval]) plus (
one
half of [Query Response Interval]).</t> half of [Query Response Interval]).</t>
</section> </section>
<section anchor="start_qry_int" numbered="true" toc="default">
<section title="Startup Query Interval" anchor="start_qry_int"> <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 value: 1/4 the [Query sent by a Querier on startup. Default value: 1/4 the [Query
Interval].</t> Interval].</t>
</section> </section>
<section anchor="start_qry_cnt" numbered="true" toc="default">
<section title="Startup Query Count" anchor="start_qry_cnt"> <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 value: [Robustness separated by the Startup Query Interval. Default value: [Robustness
Variable].</t> Variable].</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Last Listener Query Interval"> <name>Last Listener Query Interval</name>
<t>The Last Listener Query Interval (LLQI) is the Maximum Response Delay
<t>The Last Listener Query Interval is the Maximum Response Delay used used
to calculate the Maximum Response Code inserted into Multicast to calculate the Maximum Response Code inserted into Multicast
Address Specific Queries sent in response to Version 1 Multicast Address Specific Queries sent in response to Version 1 Multicast
Listener Done messages. It is also the Maximum Response Delay used Listener Done messages. It is also the Maximum Response Delay used
to calculate the Maximum Response Code inserted into Multicast to calculate the Maximum Response Code inserted into Multicast
Address and Source Specific Query messages. Default value: 1000 (1 Address and Source Specific Query messages. Default value: 1000 (1
second).</t> second).</t>
<t>Note that for values of LLQI greater than 32.768 seconds, a limited <t>Note that for values of LLQI greater than 32.768 seconds, a limited
set of values can be represented, corresponding to sequential values set of values can be represented, corresponding to sequential values
of Maximum Response Code. When converting a configured time to a of Maximum Response Code. When converting a configured time to a
Maximum Response Code value, it is recommended to use the exact value Maximum Response Code value, it is recommended to use the exact value
if possible, or the next lower value if the requested value is not if possible, or the next lower value if the requested value is not
exactly representable.</t> exactly representable.</t>
<t>This value may be tuned to modify the "leave latency" of the link. A
<t>This value may be tuned to modify the "leave latency" of the link. A
reduced value results in reduced time to detect the departure of the reduced value results in reduced time to detect the departure of the
last listener for a multicast address or source.</t> last listener for a multicast address or source.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Last Listener Query Count"> <name>Last Listener Query Count</name>
<t>The Last Listener Query Count is the number of Multicast Address
<t>The Last Listener Query Count is the number of Multicast Address
Specific Queries sent before the router assumes there are no local Specific Queries sent before the router assumes there are no local
listeners. The Last Listener Query Count is also the number of listeners. The Last Listener Query Count is also the number of
Multicast Address and Source Specific Queries sent before the router Multicast Address and Source Specific Queries sent before the router
assumes there are no listeners for a particular source. Default assumes there are no listeners for a particular source. Default
value: [Robustness Variable].</t> value: [Robustness Variable].</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Last Listener Query Time"> <name>Last Listener Query Time</name>
<t>The Last Listener Query Time is the time value represented by the
<t>The Last Listener Query Time is the time value represented by the
Last Listener Query Interval, multiplied by [Last Listener Query Last Listener Query Interval, multiplied by [Last Listener Query
Count]. It is not a tunable value, but may be tuned by changing its Count]. It is not a tunable value, but it may be tuned by changing its
components.</t> 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
node's initial report of interest in a multicast address. Default node's initial report of interest in a multicast address. Default
value: 1 second.</t> value: 1 second.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Older Version Querier Present Timeout"> <name>Older Version Querier Present Timeout</name>
<t>The Older Version Querier Present Timeout is the timeout for
<t>The Older Version Querier Present Timeout is the time-out for
transitioning a host back to MLDv2 Host Compatibility Mode. When an transitioning a host back to MLDv2 Host Compatibility Mode. When an
MLDv1 query is received, MLDv2 hosts set their Older Version Querier MLDv1 query is received, MLDv2 hosts set their Older Version Querier
Present Timer to [Older Version Querier Present Timeout].</t> Present Timer to [Older Version Querier Present Timeout].</t>
<t>This value <bcp14>MUST</bcp14> be ([Robustness Variable] times (the [
<t>This value MUST be ([Robustness Variable] times (the [Query Interval] Query Interval]
in the last Query received)) plus ([Query Response Interval]).</t> in the last Query received)) plus ([Query Response Interval]).</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Older Version Host Present Timeout"> <name>Older Version Host Present Timeout</name>
<t>The Older Version Host Present Timeout is the timeout for
<t>The Older Version Host Present Timeout is the time-out for
transitioning a router back to MLDv2 Multicast Address Compatibility transitioning a router back to MLDv2 Multicast Address Compatibility
Mode for a specific multicast address. When an MLDv1 report is Mode for a specific multicast address. When an MLDv1 report is
received for that multicast address, routers set their Older Version received for that multicast address, routers set their Older Version
Host Present Timer to [Older Version Host Present Timeout].</t> Host Present Timer to [Older Version Host Present Timeout].</t>
<t>This value <bcp14>MUST</bcp14> be ([Robustness Variable] times [Query
<t>This value MUST be ([Robustness Variable] times [Query Interval]) Interval])
plus ([Query Response Interval]).</t> plus ([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 MLD to expected losses on a link.
<t>The Robustness Variable tunes MLD to expected losses on a link.
MLDv2 is robust to [Robustness Variable] - 1 packet losses, e.g., if MLDv2 is robust to [Robustness Variable] - 1 packet losses, e.g., if
the Robustness Variable is set to the default value of 2, MLDv2 is the Robustness Variable is set to the default value of 2, MLDv2 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 links, the value of the Robustness Variable losses occur. On lossy links, the value of the Robustness Variable
should be increased to allow for the expected level of packet loss. should be increased to allow for the expected level of packet loss.
However, increasing the value of the Robustness Variable increases However, increasing the value of the Robustness Variable increases
the leave latency of the link (the time between when the last the leave latency of the link (the time between when the last
listener stops listening to a source or multicast address and when listener stops listening to a source or multicast address and when
the traffic stops flowing).</t> the traffic stops flowing).</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Query Interval"> <name>Query Interval</name>
<t>The overall level of periodic MLD traffic is inversely proportional
<t>The overall level of periodic MLD traffic is inversely proportional
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 MLD traffic. The value of the Query Interval MUST overall level of MLD traffic. The value of the Query Interval <bcp14>MUST</b cp14>
be equal to or greater than the Maximum Response Delay used to be equal to or greater than the Maximum Response Delay used to
calculate the Maximum Response Code inserted in General Query calculate the Maximum Response Code inserted in General Query
messages.</t> messages.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Maximum Response Delay"> <name>Maximum Response Delay</name>
<t>The burstiness of MLD traffic is inversely proportional to the
<t>The burstiness of MLD traffic is inversely proportional to the
Maximum Response Delay. A longer Maximum Response Delay will spread Maximum Response Delay. A longer Maximum Response Delay will spread
Report messages over a longer interval. However, a longer Maximum Report messages over a longer interval. However, a longer Maximum
Response Delay in Multicast Address Specific and Multicast Address Response Delay in Multicast Address Specific and Multicast Address
And Source Specific Queries extends the leave latency (the time and Source Specific Queries extends the leave latency (the time
between when the last listener stops listening to a source or between when the last listener stops listening to a source or
multicast address and when the traffic stops flowing.) The expected multicast address and when the traffic stops flowing.) The expected
rate of Report messages can be calculated by dividing the expected rate of Report messages can be calculated by dividing the expected
number of Reporters by the Maximum Response Delay. The Maximum number of Reporters by the Maximum Response Delay. The Maximum
Response Delay may be dynamically calculated (shown in <xref target="mrd-calc "/>) per Query by using the Response Delay may be dynamically calculated (as shown in <xref target="mrd-c alc" format="default"/>) per Query by using the
expected number of Reporters for that Query.</t> expected number of Reporters for that Query.</t>
<table anchor="mrd-calc">
<table title="Maximum Response Delay Calculation" anchor="mrd-calc"> <name>Maximum Response Delay Calculation</name>
<tbody> <tbody>
<tr><th align="center">Query Type</th> <tr>
<th align="center">Expected Number of Reporters</th></tr> <th align="left">Query Type</th>
<tr><td>General Query</td><td>All nodes on link</td></tr> <th align="left">Expected Number of Reporters</th>
<tr><td>Multicast Address Specific Query</td><td>All nodes on the link t </tr>
hat had expressed interest in the multicast address</td></tr> <tr>
<tr><td>Multicast Address and Source Specific Query</td><td>All nodes on <td>General Query</td>
the link that had expressed interest in the source and multicast address</td></ <td>All nodes on the link.</td>
tr> </tr>
</tbody> <tr>
</table> <td>Multicast Address Specific Query</td>
<td>All nodes on the link that had expressed interest in the mul
<t>A router is not required to calculate these populations or tune the ticast address.</td>
</tr>
<tr>
<td>Multicast Address and Source Specific Query</td>
<td>All nodes on the link that had expressed interest in the sou
rce and multicast address.</td>
</tr>
</tbody>
</table>
<t>A router is not required to calculate these populations or tune the
Maximum Response Delay dynamically; these are simply guidelines.</t> Maximum Response Delay 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>MLD does not contain any cryptographic protection, thus its messages
<t>MLD does not contain any cryptographic protection thus its messages
are not authenticated, the message contents are not confidential, and are not authenticated, the message contents are not confidential, and
any message can be replayed. The ability to replay messages does not affect any message can be replayed. The ability to replay messages does not affect
the behavior of the protocol itself.</t> the behavior of the protocol itself.</t>
<t>Replaying messages can lead to multicast
<t>Replaying messages can lead to multicast
forwarding state to remain active beyond the needs of group members on a forwarding state to remain active beyond the needs of group members on a
link. Excessive retention of multicast state may lead to resource link. Excessive retention of multicast state may lead to resource
exhaustion in some devices.</t> exhaustion in some devices.</t>
<t>The lack of confidentiality allows any device with access to the link
<t>The lack of confidentiality allows any device with access to the link
to determine which multicast groups are being requested. This is a privacy to determine which multicast groups are being requested. This is a privacy
issue as some multicast content may be sensitive.</t> issue as some multicast content may be sensitive.</t>
<t>The lack of authentication allows for the creation of forged messages.
<t>The lack of authentication allows for the creation of forged messages. No Note
te
that before processing an MLD message, nodes verify if the source that before processing an MLD message, nodes verify if the source
address of the message is a valid link-local address (or the address of the message is a valid link-local address (or the
unspecified address), if the Hop Limit is set to 1, and if the Router unspecified address), if the Hop Limit is set to 1, and if the Router
Alert option is present in the Hop-By-Hop Options header of the IPv6 Alert option is present in the Hop-by-Hop Options header of the IPv6
packet. If any of these checks fails, the packet is dropped. This packet. If any of these checks fails, the packet is dropped. This
defends the MLDv2 nodes from acting on forged MLD messages originated defends the MLDv2 nodes from acting on forged MLD messages originated
off-link. Therefore, in the following we discuss only the effects of off-link. Therefore, we discuss only the effects of
on-link forgery.</t> on-link forgery in the following section.</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 IPv6 address than
<t>A forged Query message from a machine with a lower IPv6 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
Multicast Listener Done Messages, traffic might flow to multicast Multicast Listener Done messages, traffic might flow to multicast
addresses with no listeners for up to [Multicast Address Listener addresses with no listeners for up to [Multicast Address Listener
Interval].</t> Interval].</t>
<t>A forged Version 1 Query message will put MLDv2 listeners on that
<t>A forged Version 1 Query message will put MLDv2 listeners on that
link in MLDv1 Host Compatibility Mode. This scenario can be avoided link in MLDv1 Host Compatibility Mode. This scenario can be avoided
by providing MLDv2 hosts with a configuration option to ignore by providing MLDv2 hosts with a configuration option to ignore
Version 1 messages completely.</t> Version 1 messages completely.</t>
<t>A DoS attack on a node could be staged through forged Multicast
<t>A DoS attack on a node could be staged through forged Multicast
Address and Source Specific Queries. The attacker can find out about Address and Source Specific Queries. The attacker can find out about
the listening state of a specific node with a general query. After the listening state of a specific node with a general query. After
that it could send a large number of Multicast Address and Source that, it could send a large number of Multicast Address and Source
Specific Queries, each with a large source list and/or long Maximum Specific Queries, each with a large source list and/or long Maximum
Response Delay. The node will have to store and maintain the sources Response Delay. The node will have to store and maintain the sources
specified in all of those queries for as long as it takes to send the specified in all of those queries for as long as it takes to send the
delayed response. This would consume both memory and CPU cycles in delayed response. This would consume both memory and CPU cycles in
order to augment the recorded sources with the source lists included order to augment the recorded sources with the source lists included
in the successive queries.</t> in the successive queries.</t>
<t>To protect against such a DoS attack, a node stack implementation
<t>To protect against such a DoS attack, a node stack implementation
could restrict the number of Multicast Address and Source Specific could restrict the number of Multicast Address and Source Specific
Queries per multicast address within this interval, and/or record Queries per multicast address within this interval and/or record
only a limited number of sources.</t> only a limited number of sources.</t>
</section> </section>
<section numbered="true" toc="default">
<section title="Current State Report messages"> <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 listeners of a multicast address on a link when there are not. are listeners of a multicast address on a link when there are not.
Nevertheless, since listening to a multicast address on a host is Nevertheless, since listening to a multicast address on a host is
generally an unprivileged operation, a local user may trivially gain generally an unprivileged operation, a local user may trivially gain
the same result without forging any messages. If a large number of the same result without forging any messages. If a large number of
forged Report messages are generated, a multicast router may consume forged Report messages are generated, a multicast router may consume
significant resources maintaining multicast forwarding state.</t> significant resources maintaining multicast forwarding state.</t>
<t>A forged Version 1 Report Message may put a router into MLDv1
<t>A forged Version 1 Report Message may put a router into MLDv1
Multicast Address Compatibility Mode for a particular multicast Multicast Address Compatibility Mode for a particular multicast
address, meaning that the router will ignore MLDv2 source specific address, meaning that the router will ignore MLDv2 source-specific
state messages. This can cause traffic to flow from unwanted sources state messages. This can cause traffic to flow from unwanted sources
for up to [Multicast Address Listener Interval]. This can be solved for up to [Multicast Address Listener Interval]. This can be solved
by providing routers with a configuration switch to ignore Version 1 by providing routers with a configuration switch to ignore Version 1
messages completely. This breaks automatic compatibility with messages completely. This breaks automatic compatibility with
Version 1 hosts, so it should only be used in situations where source Version 1 hosts, so it should only be used in situations where source
filtering is critical.</t> filtering 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 Multicast Address Specific or Multicast Address and Source out Multicast Address Specific or Multicast Address and Source
Specific Queries for the multicast address in question. This causes Specific Queries for the multicast address in question. This causes
extra processing on each router and on each listener of the multicast extra processing on each router and on each listener of the multicast
address, but cannot cause loss of desired traffic.</t> address, but it cannot cause loss of desired traffic.</t>
</section> </section>
</section> </section>
<section anchor="iana" numbered="true" toc="default">
<section title="IANA Considerations" anchor="iana"> <name>IANA Considerations</name>
<t>IANA has assigned the IPv6 link-local multicast address
<t>IANA has assigned the IPv6 link-local multicast address
ff02::16, called "all MLDv2-capable routers", as described ff02::16, called "all MLDv2-capable routers", as described
in <xref target="dest_addr" />. Version 2 Multicast Listener Reports will be in <xref target="dest_addr" format="default"/>. Version 2 Multicast Listener
sent Reports will be sent
to this special address. The reference for this assignment should be changed to this special address.</t>
to <t>In addition, IANA has assigned the ICMPv6 message Type value of 143
this document upon publication as an RFC.</t>
<t>In addition, IANA has assigned the ICMPv6 message type value of 143
for Version 2 Multicast Listener Report messages, as specified in for Version 2 Multicast Listener Report messages, as specified in
<xref target="node_state" />. The reference for this assignment should be cha <xref target="node_state" format="default"/>.</t>
nged to </section>
this document upon publication as an RFC.</t>
</section>
<section title="Contributors">
<t>Roland Vida, Luis Henrique Maciel Kosmalski Costa, Serge Fdida,
Steve Deering, Bill Fenner, and Isidor Kouvelas are the authors of
RFC 3810, which makes up the majority of the content in this document.</t>
<t>Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe and Tim Winters have con </middle>
tributed <back>
valuable content to this version of the specification.</t> <references>
</section> <name>References</name>
<references>
<name>Normative References</name>
<section title="Acknowledgments"> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
<t>We would like to thank Hitoshi Asaeda, Randy Bush, Francis Dupont, 119.xml"/>
Ted Hardie, Russ Housley, Konstantin Kabassanov, Erik Nordmark, <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
Shinsuke Suzuki, Margaret Wasserman, Bert Wijnen, and Remi Zara for 200.xml"/>
their valuable comments and suggestions on this document.</t> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8
174.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
443.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.2
464.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
710.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2
711.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
291.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
607.xml"/>
<t>Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable feedb <!-- [I-D.ietf-pim-3228bis] companion document RFC 9778-->
ack on this <reference anchor="RFC9778" target="https://www.rfc-editor.org/info/rfc9
version of the specification and we thank them for their input.</t> 778">
</section> <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>
</middle> </references>
<references>
<name>Informative References</name>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
861.xml"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4
862.xml"/>
<back> <!-- Because this document will likey be published at the same time as 3376bis,
<references title="Normative References"> we have updated the reference to refer to RFC 9776. Please let us know if any co
<?rfc include="reference.RFC.2119" ?> rrections are needed.
<?rfc include="reference.RFC.8200" ?>
<?rfc include="reference.RFC.8174" ?>
<?rfc include="reference.RFC.4443" ?>
<?rfc include="reference.RFC.4604" ?>
<?rfc include="reference.RFC.2464" ?>
<?rfc include="reference.RFC.2710" ?>
<?rfc include="reference.RFC.2711" ?>
<?rfc include="reference.RFC.4291" ?>
<?rfc include="reference.RFC.4607" ?>
<?rfc include="reference.I-D.ietf-pim-3228bis" ?>
</references>
<references title="Informative References"> Please consider whether it is appropriate to refer to [BCP57] and [STD100], or i
<?rfc include="reference.RFC.4861" ?> f referring to the specific RFCs is preferred.
<?rfc include="reference.RFC.4862" ?> -->
<?rfc include="reference.RFC.3376" ?>
<?rfc include="reference.RFC.3569" ?>
<?rfc include="reference.RFC.3678" ?>
<?rfc include="reference.RFC.3810" ?>
</references>
<section title="Design Rationale"> <!-- <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.R
<section title="The Need for State Change Messages" anchor="state_change"> FC.3376.xml"/>-->
<reference anchor="RFC9776"
target="https://www.rfc-editor.org/info/rfc9776">
<front>
<title>Internet Group Management Protocol, Version 3</title>
<author initials="B." surname="Haberman" fullname="Brian Haberman">
<organization>Johns Hopkins University Applied Physics
Lab</organization>
</author>
<date month="March" year="2025"/>
</front>
<seriesInfo name="STD" value="100"/>
<seriesInfo name="RFC" value="9776"/>
<seriesInfo name="DOI" value="10.17487/RFC9776"/>
</reference>
<t>MLDv2 specifies two types of Multicast Listener Reports: Current <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"/>
<xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3
810.xml"/>
</references>
</references>
<section 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>MLDv2 specifies two types of Multicast Listener Reports: Current
State and State Change. This section describes the rationale for the State and State Change. This section describes the rationale for the
need for both these types of Reports.</t> need for both these types of Reports.</t>
<t>Routers need to distinguish Multicast Listener Reports that were sent
<t>Routers need to distinguish Multicast Listener Reports that were sent
in response to Queries from those that were sent as a result of a in response to Queries from those that were sent as a result of a
change in the per-interface state. Multicast Listener Reports that change in the per-interface state. Multicast Listener Reports that
are sent in response to Multicast Address Listener Queries are used are sent in response to Multicast Address Listener Queries are used
mainly to refresh the existing state at the router; they typically do mainly to refresh the existing state at the router; they typically do
not cause transitions in state at the router. Multicast Listener not cause transitions in state at the router. Multicast Listener
Reports that are sent in response to changes in the per-interface Reports that are sent in response to changes in the per-interface
state require the router to take some action in response to the state require the router to take some action in response to the
received report (see <xref target="rcv_rpt" />).</t> received report (see <xref target="rcv_rpt" 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 Multicast Listener Reports as potential force a router to treat all Multicast Listener Reports as potential
changes in state and could result in increased processing at the changes in state and could result in increased processing at the
router as well as an increase in MLD traffic on the link.</t> router as well as an increase in MLD traffic on the link.</t>
</section> </section>
<section anchor="host_suppress" numbered="true" toc="default">
<section title="Host Suppression" anchor="host_suppress"> <name>Host Suppression</name>
<t>In MLDv1, a host would not send a pending multicast listener report
<t>In MLDv1, a host would not send a pending multicast listener report
if a similar report was sent by another listener on the link. In if a similar report was sent by another listener on the link. In
MLDv2, the suppression of multicast listener reports has been MLDv2, the suppression of multicast listener reports has been
removed. The following points explain this decision. removed. The following points explain this decision.
<list style="numbers"> </t>
<ol spacing="normal" type="1"><li>
<t>Routers may want to track per-host multicast listener status on an <t>Routers may want to track per-host multicast listener status on a
n
interface. This would allow routers to implement fast leaves interface. This would allow routers to implement fast leaves
(e.g., for layered multicast congestion control schemes), as well (e.g., for layered multicast congestion control schemes) as well
as track listener status for possible security or accounting as track listener status for possible security or accounting
purposes. The present specification does not require routers to purposes. The present specification does not require routers to
implement per-host tracking. Nevertheless, the lack of host implement per-host tracking. Nevertheless, the lack of host
suppression in MLDv2 makes possible to implement either suppression in MLDv2 makes it possible to implement either
proprietary or future standard behavior of multicast routers that proprietary or future standard behavior of multicast routers that
would support per-host tracking, while being fully interoperable would support per-host tracking, while being fully interoperable
with MLDv2 listeners and routers that implement the exact behavior with MLDv2 listeners and routers that implement the exact behavior
described in this specification.</t> described in this specification.</t>
</li>
<t>Multicast Listener Report suppression does not work well on <li>
bridged LANs. Many bridges and Layer2/Layer3 switches that <t>Multicast Listener Report suppression does not work well on
bridged LANs. Many bridges and Layer 2 / Layer 3 switches that
implement MLD snooping do not forward MLD messages across LAN implement MLD snooping do not forward MLD messages across LAN
segments in order to prevent multicast listener report segments in order to prevent multicast listener report
suppression.</t> suppression.</t>
</li>
<t>By eliminating multicast listener report suppression, hosts have <li>
<t>By eliminating multicast listener report suppression, hosts have
fewer messages to process; this leads to a simpler state machine fewer messages to process; this leads to a simpler state machine
implementation.</t> implementation.</t>
</li>
<t>In MLDv2, a single multicast listener report now bundles multiple <li>
<t>In MLDv2, a single multicast listener report now bundles multiple
multicast address records to decrease the number of packets sent. multicast address records to decrease the number of packets sent.
In comparison, the previous version of MLD required that each In comparison, the previous version of MLD required that each
multicast address be reported in a separate message.</t> multicast address be reported in a separate message.</t>
</list></t> </li>
</section> </ol>
</section>
<section title="Switching router filter modes from EXCLUDE to INCLUDE" anchor <section anchor="mode_switch" numbered="true" toc="default">
="mode_switch"> <name>Switching Router Filter Modes from EXCLUDE to INCLUDE</name>
<t>If on a link there are nodes in both EXCLUDE and INCLUDE modes for a
<t>If on a link there are nodes in both EXCLUDE and INCLUDE modes for a
single multicast address, the router must be in EXCLUDE mode as well single multicast address, the router must be in EXCLUDE mode as well
(see section 7.2.1). In EXCLUDE mode, a router forwards traffic from (see <xref target="def-router-filter-mode" format="default"/>). In EXCLUDE m ode, a router forwards traffic from
all sources except those in the Exclude List. If all nodes in all sources except those in the Exclude List. If all nodes in
EXCLUDE mode cease to exist or to listen, it would be desirable for EXCLUDE mode cease to exist or to listen, it would be desirable for
the router to switch back to INCLUDE mode seamlessly, without the router to switch back to INCLUDE mode seamlessly, without
interrupting the flow of traffic to existing listeners.</t> interrupting the flow of traffic to existing listeners.</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 that nodes that are in INCLUDE mode listen to, even all sources that nodes that are in INCLUDE mode listen to, even
though the router itself is in EXCLUDE mode. If the Filter Timer for though the router itself is in EXCLUDE mode. If the Filter Timer for
a multicast address expires, it implies that there are no nodes in a multicast address expires, it implies that there are no nodes in
EXCLUDE mode on the link (otherwise a multicast listener report from EXCLUDE mode on the link (otherwise, a multicast listener report from
that node would have refreshed the Filter Timer). The router can that node would have refreshed the Filter Timer). The router can
then switch to INCLUDE mode seamlessly; sources from the Requested then switch to INCLUDE mode seamlessly; sources from the Requested
List are moved to the Include List, while sources from the Exclude List are moved to the Include List, while sources from the Exclude
List are deleted.</t> List are deleted.</t>
</section> </section>
</section> </section>
<section numbered="true" toc="default">
<section title="Summary of Changes"> <name>Summary of Changes</name>
<section title="MLDv1"> <section numbered="true" toc="default">
<name>MLDv1</name>
<t>The following is a summary of changes from MLDv1, specified in <xref targe <t>The following is a summary of changes from MLDv1, specified in <xref
t="RFC2710" />. target="RFC2710" format="default"/>.
<list style="bullets"> </t>
<ul spacing="normal">
<t>MLDv2 introduces source filtering.</t> <li>
<t>MLDv2 introduces source filtering.</t>
<t>The IP service interface of MLDv2 nodes is modified accordingly. </li>
<li>
<t>The IP service interface of MLDv2 nodes is modified accordingly.
It enables the specification of a filter mode and a source list.</t> It enables the specification of a filter mode and a source list.</t>
</li>
<t>An MLDv2 node keeps per-socket and per-interface multicast <li>
<t>An MLDv2 node keeps per-socket and per-interface multicast
listening states that include a filter mode and a source list for listening states that include a filter mode and a source list for
each multicast address. This enables packet filtering based on a each multicast address. This enables packet filtering based on a
socket's multicast reception state.</t> socket's multicast reception state.</t>
</li>
<t>MLDv2 state kept on routers includes a filter mode and a list of <li>
<t>MLDv2 state kept on routers includes a filter mode and a list of
sources and source timers for each multicast address that has sources and source timers for each multicast address that has
listeners on the link. MLDv1 routers kept only the list of listeners on the link. MLDv1 routers kept only the list of
multicast addresses.</t> multicast addresses.</t>
</li>
<t>Queries include additional fields (<xref target="qry_msg" />).</t> <li>
<t>Queries include additional fields (<xref target="qry_msg" format=
<t>The S flag (Suppress Router-Side Processing) is included in "default"/>).</t>
queries in order to fix robustness issues.</t> </li>
<li>
<t>The Querier's Robustness Variable and Query Interval Code are <t>The S flag is included in queries in order to fix robustness issu
es.</t>
</li>
<li>
<t>The Querier's Robustness Variable and Query Interval Code are
included in Queries in order to synchronize all MLDv2 routers included in Queries in order to synchronize all MLDv2 routers
connected to the same link.</t> connected to the same link.</t>
</li>
<t>A new Query type (Multicast Address and Source Specific Query) is <li>
<t>A new Query type (Multicast Address and Source Specific Query) is
introduced.</t> introduced.</t>
</li>
<t>The Maximum Response Delay is not directly included in the Query <li>
<t>The Maximum Response Delay is not directly included in the Query
anymore. Instead, an exponential algorithm is used to calculate anymore. Instead, an exponential algorithm is used to calculate
its value, based on the Maximum Response Code included in the its value, based on the Maximum Response Code included in the
Query. The maximum value is increased from 65535 milliseconds to Query. The maximum value is increased from 65535 milliseconds to
about 140 minutes.</t> about 140 minutes.</t>
</li>
<t>Reports include Multicast Address Records. Information on the <li>
<t>Reports include Multicast Address Records. Information on the
listening state for several different multicast addresses can be listening state for several different multicast addresses can be
included in the same Report message.</t> included in the same Report message.</t>
</li>
<t>Reports are sent to the "all MLDv2-capable multicast routers" <li>
<t>Reports are sent to the "all MLDv2-capable multicast routers"
address, instead of the multicast address the host listens to, as address, instead of the multicast address the host listens to, as
in MLDv1. This facilitates the operation of layer-2 snooping in MLDv1. This facilitates the operation of Layer 2 snooping
switches.</t> switches.</t>
</li>
<t>There is no "host suppression", as in MLDv1. All nodes send <li>
<t>There is no "host suppression", as in MLDv1. All nodes send
Report messages.</t> Report messages.</t>
</li>
<t>Unsolicited Reports, announcing changes in receiver listening <li>
state, are sent [Robustness Variable] times. RFC 2710 is less <t>Unsolicited Reports, announcing changes in receiver listening
state, are sent [Robustness Variable] times. <xref target="RFC2710"/> is
less
explicit.</t> explicit.</t>
</li>
<t>There are no Done messages.</t> <li>
<t>There are no Done messages.</t>
<t>Interoperability with MLDv1 systems is achieved by MLDv2 state </li>
<li>
<t>Interoperability with MLDv1 systems is achieved by MLDv2 state
operations.</t> operations.</t>
</li>
<t>In order to ensure interoperability, hosts maintain a Host <li>
<t>In order to ensure interoperability, hosts maintain a Host
Compatibility Mode variable and an Older Version Querier Present Compatibility Mode variable and an Older Version Querier Present
timer per interface. Routers maintain a Multicast Address timer per interface. Routers maintain a Multicast Address
Compatibility Mode variable and an Older Version Host Present Compatibility Mode variable and an Older Version Host Present
timer per multicast address.</t> timer per multicast address.</t>
</list></t> </li>
</section> </ul>
<section anchor="3810-changes" title="Changes since RFC 3810"> </section>
<t>The following summarizes the changes made since <xref target="RFC3810"/>. <section anchor="_810-changes" numbered="true" toc="default">
<list style="bullets"> <name>Changes since RFC 3810</name>
<t>Added definition of Resv to address Erratum 4773.</t>
<t>Added clarifying text on which multicast addresses require the send <t>The following summarizes the changes made since <xref target="RFC3810
ing of MLD messages " format="default"/>.
</t>
<ul spacing="normal">
<li>
<t>Added definition of Resv to address Erratum 4773.</t>
</li>
<li>
<t>Added clarifying text on which multicast addresses require the se
nding of MLD messages
to address Erratum 5977.</t> to address Erratum 5977.</t>
<t>Added text to clarify the Group Membership Interval timer changes </li>
from Erratum 6725.</t> <li>
<t>Changed Reserved field in messages to Flags field to facilitate use <!-- [rfced] Erratum 6725 is for RFC 3376, not RFC 3810. Should the text that re
of an IANA-managed registry for ferences Erratum 6725 be removed from this document and
future bit allocations.</t> perhaps added to RFC 9776?
</list></t>
</section> Current:
</section> The following summarizes the changes made since [RFC3810].
</back>
...
* Added text to clarify the Group Membership Interval timer changes
per Erratum 6725.
-->
<t>Added text to clarify the Group Membership Interval timer changes
per Erratum 6725.</t>
</li>
<li>
<t>Changed "Reserved field" to "Flags field" in messages to facilita
te use of an IANA-managed registry for future bit allocations.</t>
</li>
</ul>
</section>
<section numbered="false" toc="default">
<name>Acknowledgments</name>
<t>We would like to thank <contact fullname="Hitoshi Asaeda"/>, <contact
fullname="Randy Bush"/>, <contact fullname="Francis Dupont"/>, <contact
fullname="Ted Hardie"/>, <contact fullname="Russ Housley"/>, <contact
fullname="Konstantin Kabassanov"/>, <contact fullname="Erik Nordmark"/>,
<contact fullname="Shinsuke Suzuki"/>, <contact fullname="Margaret
Wasserman"/>, <contact fullname="Bert Wijnen"/>, and <contact
fullname="Remi Zara"/> for their valuable comments and suggestions on
this specification.</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="Roland Vida"/>, <contact fullname="Luis Henrique
Maciel Kosmalski Costa"/>, <contact fullname="Serge Fdida"/>, <contact
fullname="Steve Deering"/>, <contact fullname="Bill Fenner"/>, and
<contact fullname="Isidor Kouvelas"/> are the authors of RFC 3810, which
makes up the majority of the content in this specification.</t>
<t><contact fullname="Anuj Budhiraja"/>, <contact fullname="Toerless
Eckert"/>, <contact fullname="Olufemi Komolafe"/>, and <contact
fullname="Tim Winters"/> have contributed valuable content to this
specification.</t>
</section>
</section>
</back>
<!-- [rfced] Please review each artwork element and let us know if any should
be marked as sourcecode (or another element) instead.
In addition, please consider whether the "type" attribute of any sourcecode
element should be set.
The current list of preferred values for "type" is available at
<https://www.rfc-editor.org/rpc/wiki/doku.php?id=sourcecode-types>.
If the current list does not contain an applicable type, feel free to
suggest additions for consideration. Note that it is also acceptable
to leave the "type" attribute not set.
-->
<!-- [rfced] Terminology
a) Throughout the text, the following terminology appears to be used
inconsistently. Please review these occurrences and let us know if/how they
may be made consistent.
Multicast Address Listening state vs. Multicast Address Listener state
[Note: are these states different, or should the state be either
"Listening" or "Listener"? Also consider instances of
"multicast listening state" and "multicast listener status".]
Multicast Address Listener vs. multicast address listener
Multicast Address Record vs. multicast address record
Multicast Listener Report vs. multicast listener report
b) We updated the text to reflect the forms on the right. Please let us
know if any additional changes are needed.
Filter Mode Change records -> Filter Mode Change Records (1 instance)
Hop-By-Hop -> Hop-by-Hop (for consistency and to align with other RFCs)
Multicast Address Specific query -> Multicast Address Specific Query (2)
Multicast Address and Source specific query ->
Multicast Address and Source Specific Query (1)
Multicast Listener Done Messages -> Multicast Listener Done messages (1)
Querier State -> Querier state (1)
Source list -> source list (1)
Source List Change records -> Source List Change Records (1)
type value -> Type value (1)
Version 2 -> version 2 (when referring to MLDv2) (2)
c) We note that "Filter Mode" is uppercase when a part of "Filter
Mode Change Record", "Filter Mode Retransmission Counter", and
"Router Filter Mode"; otherwise, it appears as lowercase. Given
this, should any of the instances in the text below be made
lowercase?
And is "Source List" referring to a "Source List Change Record" or a
"source list" (general)?
Also, "Filter Timer" is consistently uppercase, but should all
instances be made lowercase to match "source timer" in the
running text?
Current:
This Multicast Address Listener state consists of a Filter Mode, a
Filter Timer, and a Source List, with a timer associated to each
source from the list. The Filter Mode is used to summarize the total
listening state of a multicast address to a minimum set, such that
all nodes' listening states are respected. The Filter Mode may
change in response to the reception of particular types of report
messages or when certain timer conditions occur.
-->
<!-- [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.
-->
</rfc> </rfc>
 End of changes. 435 change blocks. 
1853 lines changed or deleted 2305 lines changed or added

This html diff was produced by rfcdiff 1.48.