<?xmlversion="1.0" encoding="US-ASCII"?>version='1.0' encoding='utf-8'?> <!DOCTYPE rfcSYSTEM "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"?>[ <!ENTITY nbsp " "> <!ENTITY zwsp "​"> <!ENTITY nbhy "‑"> <!ENTITY wj "⁠"> ]> <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="std" docName="draft-ietf-pim-3810bis-12" number="9777" ipr="pre5378trust200902" updates="2710"obsoletes="3810">obsoletes="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=DESC&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="editor"> <organization abbrev="JHU APL">Johns Hopkins University Applied Physics Lab</organization> <address> <email>brian@innovationslab.net</email> </address> </author> <date year="2025" month="March"/> <area>RTG</area> <workgroup>pim</workgroup> <!-- [rfced] Please insert any keywords (beyond those that appear in the title) for use on https://www.rfc-editor.org/search. --> <keyword>example</keyword> <abstract><t>This<!--[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 directly attachedlinks,links and to discover which multicast addresses are of interest to those neighboring nodes. MLDv2 is designed to be interoperable with MLDv1. MLDv2 adds the ability for a node to report interest in listening to packets with a particular multicast address only from specific source addresses or from all sources except for specific source addresses.</t> <t>This document obsoletes RFC 3810.</t> </abstract> </front> <middle> <section anchor="intro"title="Introduction">numbered="true" toc="default"> <name>Introduction</name> <t>The Multicast Listener DiscoveryProtocol(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 attachedlinks,links and to discover specifically which multicast addresses are of interest to those neighboring nodes. <!--[rfced] Is "on the one hand" and "on the other hand" necessary in this sentence? While we understand that it was included in RFC 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. Original: 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. Perhaps: 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 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 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> <t>This document specifiesVersionversion 2 of MLD. The previous version of MLD is specified in <xref target="RFC2710"/>. Informat="default"/>; in thisdocumentdocument, we will refer to it asMLDv1."MLDv1". MLDv2 is a translation oftheIGMPv3protocol<xreftarget="RFC3376" />target="RFC9776" format="default"/> for IPv6 semantics.</t> <t>The MLDv2 protocol, when compared to MLDv1, adds support for "source filtering", i.e., the ability for a node to report interest in listening to packets only from specific source addresses, as required to support Source-Specific Multicast (SSM) <xref target="RFC3569"/>,format="default"/>, or from*all but*<strong>all but</strong> specific source addresses, sent to a particular multicast address. MLDv2 is designed to be interoperable with MLDv1.</t> <t>This document usesSSM-aware"SSM-aware" to refer to systems that supportSource-Specific Multicast (SSM)SSM as defined in <xreftarget="RFC4607"/>.</t>target="RFC4607" format="default"/>.</t> <t>This document obsoletes <xreftarget="RFC3810"/>.target="RFC3810" format="default"/>. <xreftarget="3810-changes"/>target="_810-changes" format="default"/> lists the main changes from <xreftarget="RFC3810"/>.</t>target="RFC3810" format="default"/>.</t> <sectiontitle="Conventionsnumbered="true" toc="default"> <name>Conventions Used in ThisDocument"> <t>TheDocument</name> <t> The key words"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY","<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", "<bcp14>MAY</bcp14>", and"OPTIONAL""<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as described inBCP 14BCP 14 <xref target="RFC2119"/> <xreftarget="RFC2119"/><xreftarget="RFC8174"/> when, and only when, they appear in all capitals, as shownhere.</t>here. </t> </section> </section> <sectiontitle="Protocol Overview">numbered="true" toc="default"> <name>Protocol Overview</name> <t>This section gives a brief description of the protocol operation. The following sections present the protocol details.</t> <t>MLD is an asymmetric protocol; it specifies separate behaviors for multicast address listeners (i.e., hosts or routers that listen to multicast packets) and multicast routers. The purpose of MLD is to enable each multicast router to learn, for each of its directly attached links, which multicast addresses and which sources have interested listeners on that link. The information gathered by MLD is provided to whichever multicast routing protocol is used by the router, in order to ensure that multicast packets are delivered to 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 attached link is listening to packets for a particular multicast address, from a particular source; a multicast router is not required to individually keep track of the interests of each neighboring node. (Nevertheless, see <xref target="host_suppress"/>format="default"/>, item 1 for discussion.)</t> <t>A multicast router performs the router part of the MLDv2 protocol (described indetailsdetail in <xref target="mr_proto"/>)format="default"/>) on each of its directly attached 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 those interfaces. The router behavior depends on whether there are several multicast routers on the same subnet, or not. If that is the 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 router is called theQuerier."Querier". All multicast routers on the subnet listen to the messages sent by multicast address listeners, and maintain the same multicast listening information state, so that they can take over the querier role, should the present Querier fail. Nevertheless, only the Querier sends periodical or triggered query messages on the subnet, as described in <xref target="mld_qrys"/>.</t>format="default"/>.</t> <t>A multicast address listener performs the listener part of the MLDv2 protocol (described indetailsdetail in <xref target="proto"/>)format="default"/>) on all interfaces on which multicast reception is supported, even if more than one of those interfaces are connected to the same link.</t> <sectiontitle="Buildinganchor="build_state" numbered="true" toc="default"> <name>Building Multicast Listening State on Multicast AddressListeners" anchor="build_state">Listeners</name> <t>Upper-layer protocols and applications that run on a multicast address listener node use specific service interface calls (described in <xref target="srvc_if"/>)format="default"/>) to ask the IP layer to enable or disable reception of packets sent to specific multicast addresses. The node keeps Multicast Address Listening state for each socket on which the 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 maintain or compute multicast listening state for each of its 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 filter mode, and a source list. The filter mode may be either INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to the specified multicast address is enabled only from the source addresses listed in the source list. In EXCLUDE mode, reception of packets sent to the given multicast address is enabled from all source addresses except those listed in the source list.</t> <t>Atmostmost, one record per multicast address exists for a given interface. This per-interface state is derived from the per-socket state, but it may differ fromitthe per-socket state when different sockets have differing filter modes and/or source lists for the same multicast address and interface. After a multicast packet has been accepted from an interface by the IP layer, its subsequent delivery to the application connected to a particular socket depends on the multicast listening state of that socket (and possibly also on other conditions, such as what transport-layer port the socket is bound to). Note that MLDv2 messages are not subject to source filtering and must always be processed by hosts and routers.</t> </section> <sectiontitle="Exchanginganchor="msg_ex" numbered="true" toc="default"> <name>Exchanging Messages between the Querier and the ListeningNodes" anchor="msg_ex">Nodes</name> <t>There are three types of MLDv2 query messages: General Queries, Multicast Address Specific Queries, and Multicast Address and Source Specific Queries. The Querier periodically sends General Queries, to learn multicast address listener information from an attached link. These queries are used to build and refresh the Multicast Address Listener state inside all multicast routers on the link.</t> <t>Nodes respond to these queries by reporting their per-interface Multicast Address Listeningstate,state through Current State Report messages sent to a specific multicast address that all MLDv2 routers on the link listen to. On the other hand, if the listening state of a node changes, the node immediately reports these changes through a State Change Report message. The State Change Report contains either Filter Mode Changerecords,Records, Source List Changerecords,Records, or records of both types. A detailed description of the report messages is presented in <xref target="mar_types"/>.</t>format="default"/>.</t> <t>Both router and listener state changes are mainly triggered by the expiration of a specifictimer,timer or the reception of an MLD message (listener state change can be also triggered by the invocation of a service interface call). Therefore, to enhance protocol robustness, in spite of the possible unreliability of message exchanges, messages are retransmitted several times. Furthermore, timers are set so as to take into account the possible messagelosses,losses and to wait for retransmissions.</t> <t>Periodical General Queries and Current State Reports do not apply this rule, in ordernotto not overload the link; it is assumed that ingeneralgeneral, these messages do not generate statechanges,changes as their main purposebeingis to refresh existing state. Thus, even if one such message is lost, the corresponding state will be refreshed during the next reporting period.</t> <t>As opposed to Current State Reports, State Change Reports are retransmitted several times, in order to avoid them being missed by one or more multicast routers. The number of retransmissions depends on the so-called Robustness Variable. This variable allows tuning 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 of the Robustness Variable may be increased. MLD is robust to [Robustness Variable]-1 packet losses. This document recommends a default value of 2 for the Robustness Variable (see <xref target="robust"/>).</t>format="default"/>).</t> <t>If more changes to the same per-interface state entry occur before all the retransmissions of the State Change Report for the first change have been completed, each additional change triggers the immediate transmission of a new State Change Report. <xref target="chg_if_state"/>format="default"/> 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 ensure that each instance of state change is transmitted at least [Robustness Variable] times.</t> <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 source), the Querier must query for other listeners of the multicast address (or source) before deleting the multicast address (or source) from its Multicast Address Listener state and stopping the corresponding traffic. Thus, the Querier sends a Multicast Address Specific Query to verify whether there are nodes still listening to a specified multicast address or not. Similarly, the Querier sends a Multicast Address and Source Specific Query to verify whether, for a specified multicast address, there are nodes still listening to a specific set of sources, or not. <xref target="qry_vars"/>format="default"/> describes each query in more detail.</t> <t>Both Multicast Address Specific Queries and Multicast Address and Source Specific Queries are only sent in response to State Change Reports, never in response to Current State Reports. This distinction between the two types of reports is needed to avoid the router treating all Multicast Listener Reports as potential changes 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 effective if a State Change Report islost,lost and only the following Current State Report is received by the router. Nevertheless, it avoids an increased processing at therouterrouter, and it reduces the MLD traffic on the link. More details on the necessity of distinguishing between the two report types can be found in <xref target="state_change"/>.</t>format="default"/>.</t> <t>Nodes respond to the above queries through Current StateReports,Reports that contain their per-interface Multicast Address Listening state only for the multicast addresses (or sources) being queried.</t> <t>As stated earlier, in order to ensure protocol robustness, all the queries, except the periodical General Queries, are retransmitted several times within a given time interval. The number of retransmissions depends on the Robustness Variable. If, while scheduling new queries, there are pending queries to be retransmitted for the same multicast address, the new queries and the pending queries have to be merged. In addition, host reports received for a multicast address with pending queries may affect the contents of those queries. The process of building and maintaining the state of pending queries is presented in <xref target="spec_qry"/>.</t>format="default"/>.</t> <t>Protocol robustness is also enhanced through the use of the S flag (Suppress Router-Side Processing). As described above, when a Multicast Address Specific or a Multicast Address and Source Specific Query is sent by the Querier, a number of retransmissions of the query are scheduled. In the original (first)queryquery, the S flag is clear. When the Querier sends this query, it lowers the timers for the concerned multicast address (or source) to a given value; similarly, any non-querier multicast router that receives the query lowers its timers in the same way. Nevertheless, while waiting for the next scheduled queries to be sent, the Querier may receive a 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 synchronized with the current Querier (the non-querier router might have missed the first query). Nevertheless, the timers should not be lowered again, as a valid answer was already received. Therefore, in subsequentqueriesqueries, the Querier sets the S flag.</t> </section> <section anchor="mr-state"title="Buildingnumbered="true" toc="default"> <name>Building Multicast Address Listener State on MulticastRouters">Routers</name> <t>Multicast routers that implement MLDv2 (whether they are in Querier state or not) keep state per multicast address per attached link. 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 reportmessages,messages or when certain timer conditions occur.</t> <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 address are in INCLUDE mode. The router state is represented through 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 more listeners on the link have requested to receive. All the 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 router.</t> <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 includes that source. Each source from the Include List is associated with a source timer 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 source from the Include List expires, the source is deleted from the Include List.</t> <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 a node in INCLUDE mode expresses its desire to stop listening to a specific source, all the multicast routers on the link lower their timers for that source to a given value. The Querier then sends a Multicast Address and Source Specific Query, to verify whether there are other listeners for that source on the link, or not. If a report that includes this source is received before the timer expiration, all the multicast routers on the link update the source timer. If not, the source is deleted from the Include List. The handling of the Include List, according to the received reports, is detailed in Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>.</t>format="counter"/>.</t> <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 that address on the link. When the first report is received from such a listener, the router sets the Filter Timer that corresponds to that address. This timer is reset each time an EXCLUDE mode listener confirms its listening state through a Current State Report. The timer is also updated when a listener, formerly in INCLUDE mode, announces its filter mode change through a State Change Report 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 switches back to INCLUDE mode for that multicast address.</t> <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" and Y is called the "Exclude List". All sources, except those from the Exclude List, will be forwarded by the router. The Requested List has no effect on forwarding. Nevertheless, the router has to maintain the Requested List for two reasons:<list style="bullets"></t> <ol spacing="normal" type="1"> <li> <t>To keep track of sources that listeners in INCLUDE mode listen to. This is necessary to assure a seamless transition of the router to INCLUDE mode, when there is no listener in EXCLUDE mode left. This transition should not interrupt the flow of traffic to listeners in INCLUDE mode for that multicast address. Therefore, at the time of the transition, the Requested List should contain the set of sources that nodes in INCLUDE mode have explicitly requested.<vspace blankLines="1" /></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 switching, the Requested List can contain an inexact guess of the sources listeners in INCLUDE mode listento -to, which 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 Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>)format="counter"/>) in order to reduce router state. Nevertheless, in each suchcasecase, 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 eliminatedsource(s),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"/>.</t>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 concerned sources are added to the Requested List. Their timers 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 nodes on the link still interested in those sources, or not. If no node announces its interest in receiving those specificsource,sources, the timers of those sources expire. Then, the sources are moved from the Requested List to the Exclude List. From then on, the sources will be blocked by the router.</t></list></t></li> </ol> <t>The handling of the EXCLUDE mode router state, according to the received reports, is detailed in Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>.</t>format="counter"/>.</t> <t>Both the MLDv2 router and listener behaviors described in this document were defined to ensure backward interoperability with MLDv1 hosts and routers. Interoperability issues are detailed in <xref target="interop"/>.</t>format="default"/>.</t> </section> </section> <sectiontitle="Theanchor="srvc_if" numbered="true" toc="default"> <name>The Service Interface for Requesting IP MulticastReception" anchor="srvc_if">Reception</name> <t>Within an IP system, there is (at least conceptually) a service interface used by upper-layer protocols or application programs 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 the capabilities of MLDv2, a node's IP service interface must support the following operation:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ IPv6MulticastListen ( socket, interface, IPv6 multicast-address, filter-mode, source-list) ]]></artwork> </figure>)]]></sourcecode> <t>where:<list style="symbols"></t> <ul spacing="normal"> <li> <t>"socket" is an implementation-specific parameter used to distinguish among different requesting entities (e.g.,programs,programs and processes) within the node; the socket parameter of BSD Unix system calls is a specific example.</t> </li> <li> <t>"interface" is a local identifier of the network interface on which reception of the specified multicast address is to be enabled or disabled. Interfaces may be physical (e.g., an Ethernet interface) or virtual (e.g., the endpoint of a Frame Relay virtual circuit or an IP-in-IP "tunnel"). An implementation may allow a special "unspecified" value to be passed as the interface parameter, in which case the request would apply to the "primary" or "default" interface of the node (perhaps established by system configuration). If reception of the same multicast address is desired on more than one interface, IPv6MulticastListen is invoked separately for each desired interface.</t> </li> <li> <t>"IPv6 multicast address" is the multicast address to which the request pertains. If reception of more than one multicast address on a given interface is desired, IPv6MulticastListen is invoked separately for each desired address.</t> </li> <li> <t>"filter mode" may be either INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to the specified multicast address is requested only from the source addresses listed in the source list parameter. In EXCLUDE mode, reception of packets sent to the given multicast address is requested from all source addresses except those listed in the source list parameter.</t> </li> <li> <t>"source list" is an unordered list of zero or more unicast addresses from which multicast reception is desired or not desired, depending on the filter mode. An implementationMAY<bcp14>MAY</bcp14> impose a limit on the size of source lists. When an operation causes the source list size limit to be exceeded, the service interfaceSHOULD<bcp14>SHOULD</bcp14> return an error.</t></list></t></li> </ul> <t>For a given combination of socket, interface, and IPv6 multicast 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 list, or both, may be changed by subsequent IPv6MulticastListen requests that specify the same socket, interface, and IPv6 multicast address. Each subsequent request completely replaces any earlier request for the given socket, interface, and multicast address.</t> <t>The MLDv1 protocol did not support sourcefilters,filters and had a simpler service interface; it consisted of Start Listening and Stop Listening operations to enable and disable listening to a given multicast address (from all sources) on a given interface. The equivalent operations in the new service interface are asfollows:</t>follows.</t> <t>The Start Listening operation is equivalent to:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ IPv6MulticastListen ( socket, interface, IPv6 multicast address, EXCLUDE, {}) ]]></artwork> </figure>)]]></sourcecode> <t>and the Stop Listening operation is equivalent to:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ IPv6MulticastListen ( socket, interface, IPv6 multicast address, INCLUDE, {}) ]]></artwork> </figure>)]]></sourcecode> <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>format="default"/>.</t> </section> <sectiontitle="Multicastanchor="node_state" numbered="true" toc="default"> <name>Multicast Listening State Maintained byNodes" anchor="node_state">Nodes</name> <sectiontitle="Per-Socket State" anchor="sock_state">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. That state conceptually consists of a set of records of the form:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ (interface, IPv6 multicast address, filter mode, sourcelist) ]]></artwork> </figure>list)]]></sourcecode> <t>The per-socket state evolves in response to each invocation of IPv6MulticastListen on the socket, as follows:<list style="bullets"></t> <ul spacing="normal"> <li> <t>If the requested filter mode is INCLUDE and the requested source list is empty, then the entry that corresponds to the requested interface and multicast address is deleted, if present. If no such entry is present, the request has no effect.</t> </li> <li> <t>If the requested filter mode is EXCLUDE or the requested source list is non-empty, then the entry that corresponds to the requested interface and multicast address, if present, is changed to contain the requested filter mode and source list. If no such entry is present, a new entry is created, using the parameters specified in the request.</t></list></t></li> </ul> </section> <sectiontitle="Per-Interface State" anchor="if_state">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 also maintain or compute multicast listening state for each of its interfaces. That state conceptually consists of a set of records of the form:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ (IPv6 multicast address, filter mode, sourcelist) ]]></artwork> </figure>list)]]></sourcecode> <t>Atmostmost, one record per multicast address exists for a given interface. This per-interface state is derived from the per-socket state, but it may differ fromitthe per-socket state when different sockets have differing filter modes and/or source lists for the same multicast address and interface. For example, suppose one application or process invokes the following operation on socket s1:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c}) ]]></artwork> </figure>)]]></sourcecode> <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 another application or process invokes the following operation on socket s2:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d}) ]]></artwork> </figure>)]]></sourcecode> <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 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 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 mode INCLUDE and source list {a, b, c, d}.</t> <t>After a multicast packet has been accepted from an interface by the IP layer, its subsequent delivery to the application or process that listens on a particular socket depends on the multicast listening 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 example, if a packet arrives on interface i, destined to multicast 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 source filtering and must always be processed by hosts and routers.</t> <t>Requiring the filtering of packets based upon a socket's multicast reception state is a new feature of this service interface. The previous service interface described no filtering based upon multicast listening state; rather, a Start Listening operation on a socket simply caused the node to start to listen to a multicast address on the given interface; packets sent to that multicast address could be delivered to all sockets, whether they had started to listen or not.</t> <t>The general rules for deriving the per-interface state from the per- socket state are as follows: for each distinct (interface, IPv6 multicast address) pair that appears in any per-socket state, a per- interface record is created for that multicast address on that interface. Considering all socket records that contain the same (interface, IPv6 multicast address) pair,<list style="bullets"></t> <ul spacing="normal"> <li> <t>if any such record has a filter mode of EXCLUDE, then the filter mode of the interface record is EXCLUDE, and the source list of the interface record is the intersection of the source lists of all socket records in EXCLUDE mode, minus those source addresses that appear in any socket record in INCLUDE mode. For example, if the socket records for multicast address m on interface iare: <list style="hanging"> <t>fromare:</t> <ul spacing="normal"> <li>from socket s1: ( i, m, EXCLUDE, {a, b, c, d})</t> <t>from)</li> <li>from socket s2: ( i, m, EXCLUDE, {b, c, d, e})</t> <t>from)</li> <li>from socket s3: ( i, m, INCLUDE, {d, e, f})</t> </list> then)</li> </ul> <t>then the corresponding interface record on interface iis: <list style="hanging"> <t>(is:</t> <ul spacing="normal"> <li>( m, EXCLUDE, {b, c})</t> </list> If)</li> </ul> <t>If a fourth socket is added, suchas: <list style="hanging"> <t>Fromas:</t> <ul spacing="normal"> <li>From socket s4: ( i, m, EXCLUDE, {})</t> </list> then)</li> </ul> <t>then the interface recordbecomes: <list style="hanging"> <t>(becomes:</t> <ul spacing="normal"> <li>( m, EXCLUDE, {})</t> </list></t>)</li> </ul> </li> <li> <t>if all such records have a filter mode of INCLUDE, then the filter mode of the interface record is INCLUDE, and the source list of the interface record is the union of the source lists of all the socket records. For example, if the socket records for multicast address m on interface iare: <list style="hanging"> <t>fromare:</t> <ul spacing="normal"> <li>from socket s1: ( i, m, INCLUDE, {a, b, c})</t> <t>from)</li> <li>from socket s2: ( i, m, INCLUDE, {b, c, d})</t> <t>from)</li> <li>from socket s3: ( i, m, INCLUDE, {e, f})</t> </list> then)</li> </ul> <t>then the corresponding interface record on interface iis: <list style="hanging"> <t>(is:</t> <ul spacing="normal"> <li>( m, INCLUDE, {a, b, c, d, e, f})</t> </list> An)</li> </ul> <t>An implementationMUST NOT<bcp14>MUST NOT</bcp14> 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 errorMUST<bcp14>MUST</bcp14> be returned to the application which requested the operation.</t></list></t></li> </ul> <t>The above rules for deriving the per-interface state are (re)evaluated whenever an IPv6MulticastListen invocation modifies the per-socket state by adding, deleting, or modifying a per-socket state record. Note that a change of the per-socket state does not necessarily result in a change of the per-interface state.</t> </section> </section> <sectiontitle="Message Formats">numbered="true" toc="default"> <name>Message Formats</name> <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 packets by a preceding Next Header value of 58. All MLDv2 messages described in this documentMUST<bcp14>MUST</bcp14> be sent with a link-local IPv6 Source Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option <xref target="RFC2711"/>format="default"/> in a Hop-by-Hop Options header. (The Router Alert option is necessary to cause routers to examine MLDv2 messages sent to IPv6 multicast addresses in which the routers themselves have no interest.) MLDv2 Reports can be sent with the source address set to 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 <xref target="src_addrs"/>.format="default"/> for details.)</t> <t>There are two MLD message types of concern to the MLDv2 protocol described in this document:<list style="bullets"></t> <ul spacing="normal"> <li> <t>Multicast Listener Query (Type = decimal 130)</t> </li> <li> <t>Version 2 Multicast Listener Report (Type = decimal 143). See <xref target="iana"/>format="default"/> for IANA considerations.</t></list></t></li> </ul> <t>To assure the interoperability with nodes that implement MLDv1 (see <xref target="interop"/>),format="default"/>), an implementation of MLDv2 must also support the 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 this as expected? Original: * Version 1 Multicast Listener Report (Type = decimal 131) [RFC2710] * Version 1 Multicast Listener Done (Type = decimal 132) [RFC2710] 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 target="RFC2710"/></t>format="default"/></t> </li> <li> <t>Version 1 Multicast Listener Done (Type = decimal 132) <xref target="RFC2710"/></t> </list></t>format="default"/></t> </li> </ul> <t>Unrecognized message typesMUST<bcp14>MUST</bcp14> be silently ignored. Other message types may be used by newer versions or extensions of MLD, by multicast routing protocols, or for other uses.</t> <t>In this document, unless otherwise qualified, the capitalized words "Query" and "Report" refer to MLD Multicast Listener Queries and MLD Version 2 Multicast Listener Reports, respectively.</t> <sectiontitle="Multicastanchor="qry_msg" numbered="true" toc="default"> <name>Multicast Listener QueryMessage" anchor="qry_msg">Message</name> <t>Multicast Listener Queries are sent by multicast routers in QuerierStatestate to query the multicast listening state of neighboring interfaces. Queries have the following format:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 130 | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Maximum Response Code | Reserved | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | * * | | * Multicast Address * | | * * | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags |S| QRV | QQIC | Number of Sources (N) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | * * | | * Source Address [1] * | | * * | | +- -+ | | * * | | * Source Address [2] * | | * * | | +- . -+ . . . . . . +- -+ | | * * | | * Source Address [N] * | | * * | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork> </figure>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> <sectiontitle="Code"> <t>Initializednumbered="true" toc="default"> <!--[rfced] For consistency with the other subsections, we added 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. Note that Sections 5.1.2 and 5.2.2 contain the same text; however, Section 5.1.2 does not include a reference to RFC 8200. Should Section 5.1.2 be updated to match, or is this variance intentional? And may we list RFC 4443 before RFC 8200? Some examples: Original: 5.1.1. Code Initialized to zero by the sender; ignored by receivers. 5.1.2. Checksum The standard ICMPv6 checksum; it covers the entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields [RFC4443]. 5.2.2. Checksum The standard ICMPv6 checksum; it covers the entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields [RFC8200] [RFC4443]. Perhaps: 5.1.1. Code The Code field is initialized to zero by the sender and ignored by receivers. 5.1.2. Checksum The Checksum field is the standard ICMPv6 checksum; it covers the entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields [RFC4443] [RFC8200]. 5.2.2. Checksum 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> <sectiontitle="Checksum">numbered="true" toc="default"> <name>Checksum</name> <t>The Checksum field is the standard ICMPv6 checksum; it covers the entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields <xref target="RFC4443"/>.format="default"/>. For computing the checksum, the Checksum field is set to zero. When a packet is received, the checksumMUST<bcp14>MUST</bcp14> be verified before processing it.</t> </section> <sectiontitle="Maximumanchor="mrcode" numbered="true" toc="default"> <name>Maximum ResponseCode" anchor="mrcode">Code</name> <t>The Maximum Response Code field specifies the maximum time allowed before sending a responding Report. The actual time allowed, called theMaximum"Maximum ResponseDelay,Delay", is represented in units ofmilliseconds,milliseconds and is derived from the Maximum Response Code as follows:</t><t>If<ul spacing="normal"> <li>If Maximum Response Code < 32768, Maximum Response Delay = Maximum ResponseCode</t> <t>IfCode.</li> <li><t>If Maximum Response Code>=32768,>=32768, Maximum Response Code represents a floating-point value as follows:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ 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) ]]></artwork> </figure>(exp+3)]]></artwork> </li> </ul> <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> <sectiontitle="Reserved">numbered="true" toc="default"> <name>Reserved</name> <t>The Reserved field is set to zero ontransmission,transmission and ignored on reception.</t> </section> <sectiontitle="Multicast Address">numbered="true" toc="default"> <name>Multicast Address</name> <t>For a General Query, the Multicast Address field is set to zero. For 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> <sectiontitle="Flags">numbered="true" toc="default"> <name>Flags</name> <t>Allocation of individual bits within the Flags field is described inSection 2.2 of<xreftarget="I-D.ietf-pim-3228bis" />.target="RFC9778" sectionFormat="of" section="2.2"/>. Future specifications will define the associated meaning tied to any such allocation.</t> </section> <sectiontitle="Snumbered="true" toc="default"> <name>S Flag (Suppress Router-SideProcessing)">Processing)</name> <t>When set to one, the SFlagflag indicates to any receiving multicast routers that they have to suppress the normal timer updates they perform upon hearing a Query. Nevertheless, it does not suppress the 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 multicast listener.</t> </section> <sectiontitle="QRVnumbered="true" toc="default"> <name>QRV (Querier's RobustnessVariable)">Variable)</name> <t>If non-zero, the QRV field contains the [Robustness Variable] value 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> <t>Routers adopt the QRV value from the most recently received Query as their own [Robustness Variable] value, unless that most recently received QRV was zero, in which case they use the default [Robustness Variable] value specified in <xref target="robust"/>,format="default"/> or a statically configured value.</t> </section> <sectiontitle="QQICnumbered="true" toc="default"> <name>QQIC (Querier's Query IntervalCode)">Code)</name> <t>TheQuerier's Query Interval CodeQQIC field specifies the [Query Interval] used by the Querier. The actual interval, called theQuerier's"Querier's Query Interval(QQI),(QQI)", is represented in units ofseconds,seconds and is derived from theQuerier's Query Interval CodeQQIC as follows:</t><t>If<ul spacing="normal"> <li>If QQIC < 128, QQI =QQIC</t> <t>IfQQIC</li> <li><t>If QQIC>=>= 128, QQIC represents a floating-point value as follows:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |1| exp | mant | +-+-+-+-+-+-+-+-+ QQI = (mant | 0x10) << (exp +3) ]]></artwork> </figure>3)]]></artwork> </li> </ul> <t>Multicast routers that are not the current Querier adopt the QQI value from the most recently received Query as their own [Query Interval] value, unless that most recently received QQI was zero, in which case the receiving routers use the default [Query Interval] value specified in <xref target="qry_int"/>.</t>format="default"/>.</t> </section> <sectiontitle="Numberanchor="num_srcs" numbered="true" toc="default"> <name>Number of Sources(N)" anchor="num_srcs">(N)</name> <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 a Multicast Address SpecificQuery,Query and non-zero in a Multicast 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 Ethernet link with an MTU of 1500 octets, the IPv6 header (40 octets) together with theHop-By-HopHop-by-Hop Extension Header (8 octets) that 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 1424 octets left for source addresses, which limits the number of source addresses to 89 (1424/16).</t> </section> <sectiontitle="Sourcenumbered="true" toc="default"> <name>Source Address[i]">[i]</name> <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> </section> <sectiontitle="Additional Data">numbered="true" toc="default"> <name>Additional Data</name> <t>If the Payload Length field in the IPv6 header of a received Query indicates that there are additional octets of data present, beyond the fields described here, MLDv2 implementationsMUST<bcp14>MUST</bcp14> include those octets in the computation to verify the received MLD Checksum, butMUST<bcp14>MUST</bcp14> otherwise ignore those additional octets. When sending a Query, an MLDv2 implementationMUST NOT<bcp14>MUST NOT</bcp14> include additional octets beyond the fields described above.</t> </section> <sectiontitle="Query Variants" anchor="qry_vars">anchor="qry_vars" numbered="true" toc="default"> <name>Query Variants</name> <t>There are three variants of the Query message:<list style="bullets"></t> <ul spacing="normal"> <li> <t>A "General Query" is sent by the Querier to learn which multicast addresses have listeners on an attached link. In a General Query, both the Multicast Address field and the Number of Sources (N) field are zero.</t> </li> <li> <t>A "Multicast Address Specific Query" is sent by the Querier to learn if a particular multicast address has any listeners on an attached link. In a Multicast Address Specific Query, the Multicast Address field contains the multicast address of interest, while the Number of Sources (N) field is set to zero.</t> </li> <li> <t>A "Multicast Address and Source Specific Query" is sent by the Querier to learn if any of the sources from the specified list for the particular multicast address has any listeners on an attached link or not. In a Multicast Address and Source Specific Query the Multicast Address field contains the multicast address of interest, while the Source Address [i] field(s) contain(s) the source address(es) of interest.</t></list></t></li> </ul> </section> <sectiontitle="Sourcenumbered="true" toc="default"> <name>Source Addresses forQueries">Queries</name> <t>All MLDv2 QueriesMUST<bcp14>MUST</bcp14> be sent with a valid IPv6 link-local source address. If a node (router or host) receives a Query message with the IPv6 Source Address set to the unspecified address (::), or any other address that is not a valid IPv6 link-local address, itMUST<bcp14>MUST</bcp14> silently discard the message andSHOULD<bcp14>SHOULD</bcp14> log a warning.</t> </section> <sectiontitle="Destinationnumbered="true" toc="default"> <name>Destination Addresses forQueries">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 and Source Specific Queries are sent with an IP destination address equal to the multicast address of interest. However, a nodeMUST<bcp14>MUST</bcp14> accept and process any Query whose IP Destination Address field contains any of the addresses (unicast or multicast) assigned to the interface on which the Query arrives. This might be useful, e.g., for debugging purposes.</t> </section> </section> <sectiontitle="Versionnumbered="true" toc="default"> <name>Version 2 Multicast Listener ReportMessage">Message</name> <t>Version 2 Multicast Listener Reports are sent by IP nodes to report (to neighboring routers) the current multicast listening state, or changes in the multicast listening state, of their interfaces. Reports have the following format:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type = 143 | Reserved | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags |Nr of Mcast Address Records (M)| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Multicast Address Record [1] . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Multicast Address Record [2] . . . | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | . | . . . | . | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Multicast Address Record [M] . . . | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork> </figure>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> <t>Each Multicast Address Record has the following internal format:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Record Type | Aux Data Len | Number of Sources (N) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | * * | | * Multicast Address * | | * * | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | * * | | * Source Address [1] * | | * * | | +- -+ | | * * | | * Source Address [2] * | | * * | | +- -+ . . . . . . . . . +- -+ | | * * | | * Source Address [N] * | | * * | | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | | . . . Auxiliary Data . . . | |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ]]></artwork> </figure>+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+]]></artwork> <sectiontitle="Reserved">numbered="true" toc="default"> <name>Reserved</name> <t>The Reserved field is set to zero ontransmission,transmission and ignored on reception.</t> </section> <sectiontitle="Checksum">numbered="true" toc="default"> <name>Checksum</name> <t>The Checksum Field is the standard ICMPv6 checksum; it covers the entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields <xref target="RFC8200"/><xrefformat="default"/> <xref target="RFC4443"/>.format="default"/>. In order to compute the checksum, the Checksum field is set to zero. When a packet is received, the checksumMUST<bcp14>MUST</bcp14> be verified before processing it.</t> </section> <sectiontitle="Flags">numbered="true" toc="default"> <name>Flags</name> <t>Allocation of individual bits within the Flags field is described inSection 2.3 of<xreftarget="I-D.ietf-pim-3228bis" />.target="RFC9778" sectionFormat="of" section="2.3"/>. Future specifications will define the associated meaning tied to any such allocation.</t> </section> <sectiontitle="Nrnumbered="true" toc="default"> <name>Nr of Mcast Address Records(M)">(M)</name> <t>The Nr of the Mcast Address Records (M) field specifies how many Multicast Address Records are present in this Report.</t> </section> <sectiontitle="Multicastnumbered="true" toc="default"> <name>Multicast AddressRecord">Record</name> <t>Each Multicast Address Record is a block of fields that contain information on the sender listening to a single multicast address on the interface from which the Report is sent.</t> </section> <sectiontitle="Record Type"> <t>Itnumbered="true" toc="default"> <name>Record Type</name> <t>The Record Type field specifies the type of the Multicast Address Record. See <xref target="mar_types"/>format="default"/> for a detailed description of the different possible Record Types.</t> </section> <sectiontitle="Auxnumbered="true" toc="default"> <name>Aux DataLen">Len</name> <t>The Aux Data Len field contains the length of the Auxiliary DataFieldfield in this Multicast Address Record, in units of 32-bit words. It may contain zero, to indicate the absence of any auxiliary data.</t> </section> <sectiontitle="Numbernumbered="true" toc="default"> <name>Number of Sources(N)">(N)</name> <t>The Number of Sources (N) field specifies how many source addresses are present in this Multicast Address Record.</t> </section> <sectiontitle="Multicast Address">numbered="true" toc="default"> <name>Multicast Address</name> <t>The Multicast Address field contains the multicast address to which this Multicast Address Record pertains.</t> </section> <sectiontitle="Sourcenumbered="true" toc="default"> <name>Source Address[i]">[i]</name> <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> </section> <sectiontitle="Auxiliary Data">numbered="true" toc="default"> <name>Auxiliary Data</name> <t>The Auxiliary Data field, if present, contains additional information thatpertainpertains to this Multicast Address Record. The protocol specified in this document, MLDv2, does not define any auxiliary data. Therefore, implementations of MLDv2MUST NOT<bcp14>MUST NOT</bcp14> include any auxiliary data (i.e.,MUST<bcp14>MUST</bcp14> set the Aux Data Len field to zero) in any transmitted Multicast AddressRecord,Record andMUST<bcp14>MUST</bcp14> ignore any such data present in any received Multicast Address Record. The semantics and 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> </section> <sectiontitle="Additional Data">numbered="true" toc="default"> <name>Additional Data</name> <t>If the Payload Length field in the IPv6 header of a received Report indicates that there are additional octets of data present, beyond the last Multicast Address Record, MLDv2 implementationsMUST<bcp14>MUST</bcp14> include those octets in the computation to verify the received MLD Checksum, butMUST<bcp14>MUST</bcp14> otherwise ignore those additional octets. When sending a Report, an MLDv2 implementationMUST NOT<bcp14>MUST NOT</bcp14> include additional octets beyond the last Multicast Address Record.</t> </section> <sectiontitle="Multicastanchor="mar_types" numbered="true" toc="default"> <name>Multicast Address RecordTypes" anchor="mar_types">Types</name> <t>There are a number of different types of Multicast Address Records that may be included in a Reportmessage: <list style="bullets"> <t>Amessage:</t> <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 twovalues: <list style="format %d - " counter="my_cnt">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 hostSHOULD NOT<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 <xreftarget="RFC4604"/>.</t> </list></t>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:<list style="format %d - " counter="my_cnt"></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 hostSHOULD NOT<bcp14>SHOULD NOT</bcp14> send a CHANGE_TO_EXCLUDE_MODE record type for multicast addresses that fall within the SSM address range.</t></list></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 twovalues: <list style="format %d - " counter="my_cnt">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></list></t> </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 the same multicast address, one of type ALLOW_NEW_SOURCES and one of type BLOCK_OLD_SOURCES.</t> <t>We use the term "State Change Record" to refer to either a Filter Mode Change Record or a Source List Change Record.</t> <t>Multicast Address Records with an unrecognized Record Type valueMUST<bcp14>MUST</bcp14> 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 describe the contents of a Multicast Address Record that pertains to a particular multicast address:</t><figure> <artwork><![CDATA[<artwork name="" type="" align="left" alt=""><![CDATA[ IS_IN ( x ) - Type MODE_IS_INCLUDE, 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_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addressesx ]]></artwork> </figure>x]]></artwork> <t>where x is either:<list style="bullets"></t> <ul spacing="normal"> <li> <t>a capital letter (e.g., "A") to represent the set of sourceaddresses,addresses or</t> </li> <li> <t>a set expression (e.g., "A+B"), where "A+B" means the union of sets A and B, "A*B" means the intersection of sets A and B, and "A-B" means the removal of all elements of set B from set A.</t></list></t></li> </ul> </section> <sectiontitle="Sourceanchor="src_addrs" numbered="true" toc="default"> <name>Source Addresses forReports" anchor="src_addrs">Reports</name> <t>An MLDv2 ReportMUST<bcp14>MUST</bcp14> be sent with a valid IPv6 link-local source address, or the unspecified address (::), if the sending interface has not acquired a valid link-local address yet. Sending reports with the unspecified address is allowed to support the use of IP multicast in the Neighbor Discovery Protocol <xref target="RFC4861"/>.format="default"/>. For stateless autoconfiguration, as defined in <xref target="RFC4862"/>,format="default"/>, a node is required to join several IPv6 multicast groups, in order to perform Duplicate Address Detection (DAD). Prior to DAD, the only address the reporting node has for the sending interface is a tentative one, which cannot be used for communication. Thus, the unspecified address must be used.</t> <t>On the other hand, routersMUST<bcp14>MUST</bcp14> silently discard a message that is 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 router cannot identify the source address of the packet as belonging to a link connected to the interface on which the packet was received. A Report sent with the unspecified address is also discarded by the router. This enhances security, as unidentified reporting nodes cannot influence the state of the MLDv2 router(s). Nevertheless, the reporting node has modified its listening state for multicast addresses that are contained in the Multicast Address Records of the Report message. From now on, it will treat packets sent to those multicast addresses according to this new listening state. Once a valid link-local address is available, a nodeSHOULD<bcp14>SHOULD</bcp14> generate new MLDv2 Report messages for all multicast addresses joined on the interface.</t> </section> <sectiontitle="Destinationanchor="dest_addr" numbered="true" toc="default"> <name>Destination Addresses forReports" anchor="dest_addr">Reports</name> <t>Version 2 Multicast Listener Reports are sent with an IP destination address of ff02::16, to which all MLDv2-capable multicast routers listen (see <xref target="iana"/>format="default"/> for IANA considerations related to this special destination address). A node that operates in version 1 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 the Report. In addition, a nodeMUST<bcp14>MUST</bcp14> accept and process any version 1 Report whose IP Destination Address field contains any of the IPv6 addresses (unicast or multicast) assigned to the interface on which the Report arrives. This might be useful, e.g., for debugging purposes.</t> </section> <sectiontitle="Multicastnumbered="true" toc="default"> <name>Multicast Listener ReportSize">Size</name> <t>If the set of Multicast Address Records required in a Report does not 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 Address Records are sent in as many Report messages as needed to report the entire set.</t> <t>If a single Multicast Address Record contains so many source addresses that it does not fit within the size limit of a single Report message, then:<list style="bullets"></t> <ul spacing="normal"> <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 subset of the sourceaddresses,addresses and is sent in a separate Report.</t> </li> <li> <t>if its Type is IS_EX or TO_EX, a single Multicast Address Record is sent, with as many source addresses as can fit; the remaining source addresses are not reported. Although the choice of which sources to report is arbitrary, it is preferable to report the same set of sources in each subsequent report, rather than reporting different sources each time.</t></list></t></li> </ul> </section> </section> </section> <sectiontitle="Protocolanchor="proto" numbered="true" toc="default"> <name>Protocol Description for Multicast AddressListeners" anchor="proto">Listeners</name> <t>MLD is an asymmetric protocol, as it specifies separate behaviors for multicast address listeners -- that is, hosts or routers that listen to multicast packets -- and multicast routers. This section describes the part of MLDv2 that applies to all multicast address listeners. (Note that a multicast router that is also a multicast address listener performs both parts of MLDv2; it receives and it responds to its own MLDmessages,messages as well as to those of its neighbors.) The multicast router part of MLDv2 is described in <xref target="mr_proto"/>.</t>format="default"/>.</t> <t>A node performs the protocol described in this section over all interfaces on which multicast reception is supported, even if more than one of those interfaces are connected to the same link.</t> <t>For interoperability with multicast routers that run the MLDv1 protocol, nodes maintain a Host Compatibility Mode variable for each interface on which multicast reception is supported. This section describes the behavior of multicast address listener nodes on interfaces for which Host Compatibility Mode = MLDv2. The algorithm for determining Host CompatibilityMode,Mode and the behavior if its value is set toMLDv1,MLDv1 are described in <xref target="interop"/>.</t>format="default"/>.</t> <t>The link-scope all-nodes multicast address, (ff02::1), is handled as a special case. On all nodes -- thatisis, all hosts androuters,routers including multicast routers -- listening to packets destined to the all-nodes multicast address, from all sources, is permanently enabled on all interfaces on which multicast listening is supported. No MLD messages are ever sent regarding neither the link-scope all-nodes multicast address, nor any multicast address of scope 0 (reserved) or 1 (node-local). Multicast listenersMUST<bcp14>MUST</bcp14> send MLD messages for all multicast addresses except for the link-scope all-nodes multicast address and any multicast addresses of scope less than 2.</t> <t>There are three types of events that trigger MLDv2 protocol actions on an interface:<list style="bullets"></t> <ul spacing="normal"> <li> <t>a change of the per-interface listening state, caused by a local invocation of IPv6MulticastListen;</t> </li> <li> <t>the firing of a specifictimer;</t>timer; and</t> </li> <li> <t>the reception of a Query.</t></list></t></li> </ul> <t>(Received MLD messages of types other than Query are silently ignored, except as required for interoperation with nodes that implement MLDv1.)</t> <t>The following subsections describe the actions to be taken for each case. Timer and counter names appear in square brackets. Default values for those timers and counters are specified in <xref target="timers"/>.</t>format="default"/>.</t> <sectiontitle="Actionanchor="chg_if_state" numbered="true" toc="default"> <name>Action on Change of Per-InterfaceState" anchor="chg_if_state">State</name> <t>An invocation of IPv6MulticastListen may cause the multicast listening state of an interface to change, according to the rules in <xref target="if_state"/>.format="default"/>. Each such change affects the per-interface entry for a single multicast address.</t> <t>A change of per-interface state causes the node to immediately transmit a State Change Report from that interface. The type and contents of the Multicast Address Record(s) in that Report are determined by comparing the filter mode and source list for the affected multicast address before and after the change, according to <xreftarget="rec-xmit-logic"/>.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 creating a new per-interface record), or if no state exists after the change (i.e., the change consisted of deleting a per-interface record), then the "non-existent" state is considered to have an INCLUDE filter mode and an empty source list.</t> <tabletitle="Statealign="left" anchor="rec-xmit-logic"> <name>State Change Record TransmissionLogic" anchor="rec-xmit-logic">Logic</name> <tbody><tr><th align="center">Old<tr> <th>Old State</th><th align="center">New<th>New State</th><th align="center">State<th>State Change RecordSent</th></tr> <tr><td>INCLUDE (A)</td><td>INCLUDE (B)</td><td>ALLOWSent</th> </tr> <tr> <td>INCLUDE (A)</td> <td>INCLUDE (B)</td> <td>ALLOW (B-A), BLOCK(A-B)</td></tr> <tr><td>EXCLUDE (A)</td><td>EXCLUDE (B)</td><td>ALLOW(A-B)</td> </tr> <tr> <td>EXCLUDE (A)</td> <td>EXCLUDE (B)</td> <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>(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> <t>To cover the possibility of the State Change Report being missed by one or more multicast routers, [Robustness Variable] - 1 retransmissions are scheduled, through a Retransmission Timer, at intervals chosen at random from the range (0, [Unsolicited Report Interval]).</t> <t>If more changes to the same per-interface state entry occur before all the retransmissions of the State Change Report for the first change have been completed, each such additional change triggers the immediate transmission of a new State Change Report.</t> <t>The contents of the new Report are calculated as follows:<list style="bullets"></t> <ul spacing="normal"> <li> <t>As for the first Report, the per-interface state for the affected multicast address before and after the latest change is compared.</t> </li> <li> <t>The records that express the difference are built according to the table above. Nevertheless, these records are not transmitted in a separate message, but they are instead merged with the contents of the pending report, to create the new State Change Report. The rules for calculating this merged report are described below.</t></list></t></li> </ul> <t>The transmission of the merged State Change Report terminates retransmissions of the earlier State Change Reports for the same multicastaddress,address and becomes the first of [Robustness Variable] transmissions of the new State Change Reports. These transmissions are necessary in order to ensure that each instance of state change is transmitted at least [Robustness Variable] times.</t> <t>Each time a source is included in the difference report calculated above, retransmission state for that source needs to be maintained until [Robustness Variable] State Change Reports have been sent by the node. This is done in order to ensure that a series of successive state changes do not break the protocol robustness. Sources in retransmission state can be kept in aper multicast addressper-multicast-address Retransmission List, with a Source Retransmission Counter 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 State Change Report issentsent, the counter is decreased by one unit. When the counter reaches zero, the source is deleted from the Retransmission List for that multicast address.</t> <t>If the per-interface listening change that triggers the new report is a filter mode change, then the next [Robustness Variable] State Change Reports will include a Filter Mode Change Record. This applies even if any number of source list changes occur in that period. The node has to maintain retransmission state for the multicast address until the [Robustness Variable] State Change Reports have been sent. This can be done through aper multicast addressper-multicast-address Filter Mode Retransmission Counter. When the filter mode changes, the counter is set to [Robustness Variable]. Each time a State Change Report is sent the counter is decreased by one unit. When the counter reaches zero, i.e., [Robustness Variable] State Change Reports with Filter Mode Change Records have been transmitted after the last filter mode change, and if source list changes have resulted in additional reports being scheduled, then the next State Change Report will include Source List Change Records.</t> <t>Each time a per-interface listening state change triggers theImmediateimmediate transmission of a new State Change Report, its contents 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;otherwiseotherwise, a TO_EX record is included. 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 <xreftarget="if-rep-info"/>.</t>target="if-rep-info" format="default"/>.</t> <tabletitle="Per-Interfacealign="left" anchor="if-rep-info"> <name>Per-Interface State Change ReportContents" anchor="if-rep-info">Contents</name> <tbody><tr><th align="center">Record</th> <th align="center">Sources Included</th></tr> <tr><td>TO_IN</td><td>All<tr> <th>Record</th> <th>Sources Included</th> </tr> <tr> <td>TO_IN</td> <td>All in the current per-interface state that must beforwarded</td></tr> <tr><td>TO_EX</td><td>Allforwarded.</td> </tr> <tr> <td>TO_EX</td> <td>All in the current per-interface state that must beblocked</td></tr> <tr><td>ALLOW</td><td>Allblocked.</td> </tr> <tr> <td>ALLOW</td> <td>All with retransmission state (i.e., all sources from the Retransmission List) that must beforwarded</td></tr> <tr><td>BLOCK</td><td>Allforwarded.</td> </tr> <tr> <td>BLOCK</td> <td>All with retransmission state that must beblocked</td></tr>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> <!-- [rfced] Please review whether any of the notes in this document should be in the <aside> element. It is defined as "a container for content that is semantically less important or tangential to the content that surrounds it" (https://authors.ietf.org/en/rfcxml-vocabulary#aside). --> <t>Note: When the first State Change Report is sent, the non-existent pending report to merge with can be treated as a Source Change Report with empty ALLOW and BLOCK records (no sources have retransmission state).</t> <t>The building of a scheduled State Change Report, triggered by the firing of a Retransmission Timer, instead of a per-interface listening state change, is described in <xref target="timer_act"/>.</t>format="default"/>.</t> </section> <sectiontitle="Actionnumbered="true" toc="default"> <name>Action on Reception of aQuery">Query</name> <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 address, if the Hop Limit is set to 1, and if the Router Alert option is present in theHop-By-HopHop-by-Hop Options header of the IPv6 packet. If any of these checksfails,fail, the packet is dropped.</t> <t>If the validity of the MLD message is verified, the node starts to process the Query. Instead of responding immediately, the node delays its response by a random amount of time, bounded by the Maximum Response Delay value derived from the Maximum Response Code in the received Query message. A node may receive a variety of Queries on different interfaces and of different kinds (e.g., General Queries, Multicast Address Specific Queries, and Multicast Address and Source Specific Queries), each of which may require its own delayed response.</t> <t>Before scheduling a response to a Query, the node must first consider previously scheduled pending responses and, in many cases, schedule a combined response. Therefore, for each of its interfaces on which it operates the listener part of the MLDv2 protocol, the node must be able to maintain the following state:<list style="bullets"></t> <ul spacing="normal"> <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 the node has to reporton;</t>on; and</t> </li> <li> <t>a per-multicast-address list of sources to be reported in response 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 checks whether it has any per-interface listening state record to report on, or not. Similarly, when a new valid Multicast Address (and Source) Specific Query arrives on an interface, the node checks whether it has a per-interface listening state record that 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, [Maximum Response Delay]), where Maximum Response Delay is derived from the Maximum Response Code inserted in the received Query message. The following rules are then used to determine if a Report needs to be scheduled ornot,not and the type of Report to schedule. (The rules are considered in order and only the first matching rule is applied.)<list style="numbers"></t> <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 needs to be scheduled.</t> </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 selected delay. Any previously pending response to a General Query is canceled.</t> </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 pending response to a previous Query for this multicast address, then the Multicast Address Timer is used to schedule a report. If the received Query is a Multicast Address and Source Specific Query, the list of queried sources is recordedto be usedfor use when generating a response.</t> </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 a Multicast Address Specific Query or the recorded source list associated with the multicast address is empty, then the multicast address source list is cleared and a single 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 report and the selected delay.</t> </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 with a non-empty source list, then the multicast address source list is augmented to contain the list of sources in the new Query, and a single 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 report and the selected delay.</t></list></t></li> </ol> </section> <sectiontitle="Actionanchor="timer_act" numbered="true" toc="default"> <name>Action on TimerExpiration" anchor="timer_act">Expiration</name> <t>There are several timers that, upon expiration, trigger protocol actions on an MLDv2 Multicast Address Listener node. All these 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 pending response to a General Query), then one Current State Record is sent for each multicast address for which the specified interface has listening state, as described in <xref target="if_state"/>.format="default"/>. The Current State Record carries the multicast address and its associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) andSourcesource list. Multiple Current State Records are packed into individual Report messages, to the extentpossible. <vspace blankLines="1" /> Thispossible.</t> <t>This naive algorithm may result in bursts of packets when a node listens to a large number of multicast addresses. Instead of using a single Interface Timer, implementations are recommended to spread transmission of such Report messages over the interval (0, [Maximum Response Delay]). Note that any such implementationMUST<bcp14>MUST</bcp14> avoid the "ack-implosion" problem, i.e.,MUST NOT<bcp14>MUST NOT</bcp14> send a Report immediately upon reception of a General Query.</t> </li> <li> <t>If the expired timer is a Multicast Address Timer and the list of recorded sources for that multicast address is empty (i.e., there is a pending response to a Multicast Address Specific Query), then if, and only if, the interface has listening state for that multicast address, a single Current State Record is sent for that address. The Current State Record carries the multicast address and its associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list, if any.</t> </li> <li> <t>If the expired timer is a Multicast Address Timer and the list of recorded sources for that multicast address is non-empty (i.e., there is a pending response to a Multicast Address and Source Specific Query), then if, and only if, the interface has listening state for that multicast address, the contents of the corresponding Current State Record are determined from the per- interface state and the pending response record, as specified in <xreftarget="csr-info"/>.</t> </list></t>target="csr-info" format="default"/>.</t> <tabletitle="Determiningalign="left" anchor="csr-info"> <name>Determining Contents of Current StateRecord" anchor="csr-info">Record</name> <tbody><tr><th align="center">Per-Interface<tr> <th>Per-Interface State</th><th align="center">Set<th>Set of Sources in the Pending Response Record</th><th align="center">Current<th>Current StateRecord</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>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 arecleared.</t> </list></t> <t><list style="format %d." counter="my_cnt_2">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.<vspace blankLines="1" /> If</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 <xreftarget="slcr-info"/>.</t> </list></t>target="slcr-info" format="default"/>.</t> <tabletitle="Determiningalign="left" anchor="slcr-info"> <name>Determining Contents of Source List ChangeRecords" anchor="slcr-info">Records</name> <tbody><tr><th align="center">Record</th> <th align="center">Sources included</th></tr> <tr><td>TO_IN</td><td>All<tr> <th>Record</th> <th>Sources Included</th> </tr> <tr> <td>TO_IN</td> <td>All in the current per-interface state that must beforwarded</td></tr> <tr><td>TO_EX</td><td>Allforwarded.</td> </tr> <tr> <td>TO_EX</td> <td>All in the current per-interface state that must beblocked</td></tr> <tr><td>ALLOW</td><td>Allblocked.</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 included source, its Source Retransmission Counter is decreased with one unit after the transmission of the report. If the counter reaches zero, the source is deleted from the Retransmission List for that multicastaddress.</td></tr> <tr><td>BLOCK</td><td>Alladdress.</td> </tr> <tr> <td>BLOCK</td> <td>All with retransmission state (i.e., all sources from the Retransmission List) that must be blocked. For each included source, its Source Retransmission Counter is decreased with one unit after the transmission of the report. If the counter reaches zero, the source is deleted from the Retransmission List for that multicastaddress.</td></tr>address.</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> </li> </ol> </section> </section> <sectiontitle="Descriptionanchor="mr_proto" numbered="true" toc="default"> <name>Description of the Protocol for MulticastRouters" anchor="mr_proto">Routers</name> <t>The purpose of MLD is to enable each multicast router to learn, for each of its directly attached links, which multicast addresses have listeners on that link. MLD version 2 adds the capability for a multicast router to also learn which sources have listeners among the neighboring nodes, for packets sent to any particular multicast address. The information gathered by MLD is provided to whichever multicast routing protocol is used by the router, in order to ensure that multicast packets are delivered to all links where there are interested listeners.</t> <t>This section describes the part of MLDv2 that is performed by multicast routers. Multicast routers may themselves become multicast addresslisteners,listeners and therefore also perform the multicast listener part of MLDv2, as described in <xref target="proto"/>.</t>format="default"/>.</t> <t>A multicast router performs the protocol described in this section 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 this protocol over one of those interfaces.</t> <t>For each interface over which the router operates the MLD protocol, the router must configure that interface to listen to all link-layer multicast addresses that can be generated by IPv6 multicasts. For example, an Ethernet-attached router must set its Ethernet address reception filter to accept all Ethernet multicast addresses that start with the hexadecimal value 3333 <xref target="RFC2464"/>;format="default"/>; in the case of an Ethernet interface that does not support the filtering of such a multicast address range, it must be configured to accept ALL Ethernet multicast addresses, in order to meet the requirements of MLD.</t> <t>On each interface over which this protocol is being run, the routerMUST<bcp14>MUST</bcp14> enable reception of the link-scope "all MLDv2-capable routers" multicast address from allsources,sources andMUST<bcp14>MUST</bcp14> perform the multicast 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 attached link listens to packets for a particular multicast address from a particular source; a multicast router is not required to individually keep track of the interests of each neighboring node. (Nevertheless, see <xref target="host_suppress"/>format="default"/>, item 1 for discussion.)</t> <t>MLDv2 is backward compatible with the MLDv1 protocol. For a detailed description of compatibilityissuesissues, see <xref target="interop"/>.</t>format="default"/>.</t> <sectiontitle="Conditionsanchor="mld_qrys" numbered="true" toc="default"> <name>Conditions for MLDQueries" anchor="mld_qrys">Queries</name> <t>The behavior of a router that implements the MLDv2 protocol depends on whether there are several multicast routers on the same subnet, or not. If it is the 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. All the multicast routers on the subnet listen to the messages sent by multicast address listeners, and maintain the same multicast listening information state, so that they can quickly and correctly take over the querier functionality, should the present Querier fail. Nevertheless, it is only the Querier that sends periodical or triggered query messages on the subnet.</t> <t>The Querier periodically sends General Queries to request Multicast Address Listener information from an attached link. These queries are used to build and refresh the Multicast Address Listener state of routers on attached links.</t> <t>Nodes respond to these queries by reporting their Multicast Address Listening state (and set of sources they listen to) with Current State Multicast Address Records in MLDv2 Multicast Listener Reports.</t> <t>As a listener of a multicast address, a node may express interest in listening or not listening to traffic from particular sources. As the desired listening state of a node changes, it reports these changes using Filter Mode Change Records or Source List Change Records. These records indicate an explicit state change in a multicast address at a node in either the Multicast Address Record's source list or its filter mode. When Multicast Address Listening is terminated at a node or traffic from a particular source is no longer desired, the Querier must query for other listeners of the multicast address or of the source before deleting the multicast address (or source) from its Multicast Address Listener state and pruning its traffic.</t> <t>To enable all nodes on a link to respond to changes in multicast address listening, the Querier sends specific queries. A Multicast Address Specific Query is sent to verify that there are no nodes that listen to the specified multicast address or to "rebuild" the listening state for a particular multicast address. Multicast Address Specific Queries are sent when the Querier receives a State 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 a router from EXCLUDE to INCLUDE mode, in case a received State Change Record motivates this action.</t> <t>A Multicast Address and Source Specific Query is used to verify that there are no nodes on a linkwhichthat listen to traffic from a specific set of sources. Multicast Address and Source Specific Queries list sources for a particular multicast addresswhichthat have been requested 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 multicast address, from the specified source addresses. Multicast Address and Source Specific Queries are only sent in response to State Change Records and never in response to Current State Records. <xref target="qry_vars"/>format="default"/> describes each query in more detail.</t> </section> <sectiontitle="MLDnumbered="true" toc="default"> <name>MLD State Maintained by MulticastRouters">Routers</name> <t>Multicast routers that implement the MLDv2 protocol keep state per multicast address per attached link. This multicast address state 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 listening state for that link. That state conceptually consists of a set of records of the form:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ (IPv6 multicast address, Filter Timer, Router Filter Mode, (source records)) ]]></artwork> </figure>)]]></sourcecode> <t>Each source record is of the form:</t><figure> <artwork><![CDATA[<sourcecode name="" type=""><![CDATA[ (IPv6 source address, sourcetimer) ]]></artwork> </figure>timer)]]></sourcecode> <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 EXCLUDE. This means that nodes on this link want all sources for this multicast address to be forwarded. This is the MLDv2 equivalent of an MLDv1 listening state.</t> <sectiontitle="Definitionnumbered="true" toc="default" anchor="def-router-filter-mode"> <name>Definition of Router FilterMode">Mode</name> <t>To reduce internal state, MLDv2 routers keep a filter mode per multicast address per attached link. This 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 Multicast Address Records or when certain timer conditions occur. In the following sections, we use the term "Router Filter Mode" to refer to the filter mode of a particular multicast address within a router. <xref target="rcv_rpt"/>format="default"/> describes the changes of the Router Filter Mode per Multicast Address Record received.</t> <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 address are in INCLUDE mode. The router state is represented through 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 link have requested to receive. All the 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 router.</t> <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 interested in that address on the link. Conceptually, when a Multicast Address Record is received, the Router Filter Mode for that multicast address is updated to cover all the requested sources using the least amount of state. As a rule, once a Multicast Address Record with a filter mode of EXCLUDE is received, the Router Filter Mode for that multicast address will be set to EXCLUDE. Nevertheless, if all nodes with a multicast address record having filter mode set to EXCLUDE cease reporting, it is desirable for the Router Filter Mode for that multicast address to transition back to INCLUDE mode. This transition occurs when the Filter Timerexpires, and is explained in detail inexpires; see <xref target="rtr_mode"/>.</t>format="default"/> for more details.</t> <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 List" and Y is called the "Exclude List". All sources, except those from the Exclude List, will be forwarded by the router. The Requested List has no effect on forwarding. Nevertheless, it has to be maintained for several reasons, as explained in <xref target="src_timers"/>.</t>format="default"/>.</t> <t>The exact handling of both the INCLUDE and EXCLUDE mode router state, according to the received reports, is presented indetailsdetail in Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>.</t>format="counter"/>.</t> </section> <sectiontitle="Definitionnumbered="true" toc="default"> <name>Definition of FilterTimers">Timers</name> <t>The Filter Timer is only used when the router is in EXCLUDE mode for a specific multicast address, and it represents the time for the Router Filter Mode of the multicast address to expire and switch to INCLUDE mode. A Filter Timer is a decrementing timer with a lower bound of zero. One Filter Timer exists per multicast address record. Filter Timers are updated according to the types of Multicast Address Records received.</t> <t>If a Filter Timer expires, with the Router Filter Mode for that multicast address being EXCLUDE, it means that there are no more listeners in EXCLUDE mode on the attached link. At this point, the router transitions to INCLUDE filter mode. <xref target="rtr_mode"/>format="default"/> describes the actions taken when a Filter Timer expires while in EXCLUDE mode.</t> <tkeepWithNext='true'><xref target="FTM"/>keepWithNext="true"><xref target="FTM" format="default"/> summarizes the role of the Filter Timer. <xref target="rcv_rpt"/>format="default"/> describes the details of setting the Filter Timer per type of Multicast Address Record received.</t> <tabletitle="Filter Timer Management"align="left" anchor="FTM"> <name>Filter Timer Management</name> <tbody><tr><th align="center">Router<tr> <th>Router Filter Mode</th><th align="center">Filter<th>Filter Timer Value</th><th align="center">Actions/Comments</th></tr> <tr><td>INCLUDE</td><td>Not Used</td><td>All<th>Actions/Comments</th> </tr> <tr> <td>INCLUDE</td> <td>Not Used</td> <td>All listeners in INCLUDEmode.</td></tr> <tr><td>EXCLUDE</td><td>Timer > 0</td><td>Atmode.</td> </tr> <tr> <td>EXCLUDE</td> <td>Timer > 0</td> <td>At least one listener in EXCLUDEmode.</td></tr> <tr><td>EXCLUDE</td><td>Timermode.</td> </tr> <tr> <td>EXCLUDE</td> <td>Timer ==0</td><td>No0</td> <td>No more listeners in EXCLUDE mode for the multicast address. If the Requested List is empty, delete Multicast Address Record. If not, switch to INCLUDE filter mode; the sources in the Requested List are moved to the Include List, and the Exclude List isdeleted.</td></tr>deleted.</td> </tr> </tbody> </table> </section> <sectiontitle="Definitionanchor="src_timers" numbered="true" toc="default"> <name>Definition of SourceTimers" anchor="src_timers">Timers</name> <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 updated according to the type and filter mode of the Multicast Address Record received. <xref target="rcv_rpt"/>format="default"/> describes the setting of source timers per type of Multicast Address Records received.</t> <t>In the following, abbreviations are used for several variables (all of which are described in detail in <xref target="timers"/>).format="default"/>). The variable MALI stands for the Multicast Address Listening Interval, which is the time in which multicast address listening state will time out. The 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 the first query. During this time, the Querier should send [Last Member Query Count]-1 retransmissions of the query. LLQT represents the "leavelatency",latency" or the difference between the transmission of a listener state change and the modification of the information passed to the routing protocol.</t> <t>If the router is in INCLUDE filter mode, a source can be added to the current Include List if a listener in INCLUDE mode sends a Current State or a State Change Reportwhichthat includes that source. Each source from the Include List is associated with a source timer 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 source from the Include List expires, the source is deleted from the Include List. If there are no more source records left, the multicast address record is deleted from the router.</t> <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 a node in INCLUDE mode expresses its desire to stop listening to a specific source, all the multicast routers on the link lower their timer for that source to a small interval of LLQT milliseconds. The Querier then sends then a Multicast Address and Source Specific Query, to verify whether there are other listeners for that source on the link, or not. If a corresponding report is received before the timer expires, all the multicast routers on the link update their source timer. If not, the source is deleted from the Include List. The handling of the Include List, according to the received reports, is detailed in Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>.</t>format="counter"/>.</t> <t>Source timers are treated differently when the Router Filter Mode for a multicast address is EXCLUDE. For sources from the RequestedListList, the source timers have running values; these sources are forwarded by the router. For sources from the ExcludeListList, the source timers are 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 the Exclude List.TheThen, the router informsthenthe routing protocol that there is no longer a listener on the link interested in traffic from this source.</t> <t>The router has to maintain the Requested List for two reasons:<list style="bullets"></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.<vspace blankLines="1" /> When</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 listento -to, which 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 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"/>.</t>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></list></t></li> </ol> <t>The handling of the EXCLUDE mode router state, according to the received reports, is detailed in Sections <xref target="curr_state_recs"/>format="counter"/> and <xref target="fm_chg"/>.</t>format="counter"/>.</t> <t>When the Router Filter Mode for a multicast address is EXCLUDE, source records are only deleted when the Filter Timerexpires,expires or when newly received Multicast Address Records modify the source record list of the router.</t> </section> </section> <sectiontitle="MLDv2 Source Specificnumbered="true" toc="default"> <name>MLDv2 Source-Specific ForwardingRules">Rules</name> <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 forward the datagram on an attached link or not. The multicast routing protocol in use is in charge of thisdecision,decision and should use the MLDv2 information to ensure that all sources/multicast addresses that have listeners on a link are forwarded to that link. MLDv2 information does not override multicast routing information; for example, if the MLDv2 filter mode for a multicast address is EXCLUDE, a router may still forward packets for excluded sources to a transit link.</t> <t>To summarize,the following table<xref target="MLDv2_forwarding_suggestions"/> below describes the forwarding suggestions made by MLDv2 to the routing protocol for traffic originating from a source destined to a multicast address. It also summarizes the actions taken upon the expiration of a source timer 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 them? If so, please provide the desired text. --> <!--[rfced] Has the following comment been addressed by the authors? Please see Table 6 (Section 7.3). 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 align="center">Router<tr> <th>Router Filter Mode</th><th align="center">Source<th>Source Timer Value</th><th align="center">Action</th></tr><th>Action</th> </tr> <!-- Are we missing an INCLUDE mode where no source elements are present? --><tr><td>INCLUDE</td><td>TIMER > 0</td><td>Suggest<tr> <td>INCLUDE</td> <td>TIMER > 0</td> <td>Suggest to forward traffic fromsource</td></tr> <tr><td>INCLUDE</td><td>TIMERsource.</td> </tr> <tr> <td>INCLUDE</td> <td>TIMER ==0</td><td>Suggest0</td> <td>Suggest to stop forwarding traffic from source and remove the source record. If there are no more source records, delete the multicast addressrecord</td></tr> <tr><td>EXCLUDE</td><td>TIMER > 0</td><td>Suggestrecord.</td> </tr> <tr> <td>EXCLUDE</td> <td>TIMER > 0</td> <td>Suggest to forward traffic fromsource</td></tr> <tr><td>EXCLUDE</td><td>TIMERsource.</td> </tr> <tr> <td>EXCLUDE</td> <td>TIMER ==0</td><td>Suggest0</td> <td>Suggest to not forward traffic from source. Move the source from the Requested List to the Exclude List (DO NOT remove the sourcerecord)</td></tr> <tr><td>EXCLUDE</td><td>Norecord).</td> </tr> <tr> <td>EXCLUDE</td> <td>No SourceElement</td><td>SuggestElement</td> <td>Suggest to forward traffic from allsources</td></tr>sources.</td> </tr> </tbody> </table> </section> <sectiontitle="Actionanchor="rcv_rpt" numbered="true" toc="default"> <name>Action on Reception ofReports" anchor="rcv_rpt">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 address, if the Hop Limit is set to 1, and if the Router Alert option is present in theHop-By-HopHop-by-Hop Options header of the IPv6 packet. If any of these checksfails,fail, the packet is dropped. If the validity of the MLD message is verified, the router starts to process the Report.</t> <t>SSM-aware routersSHOULD<bcp14>SHOULD</bcp14> ignore records that contain multicast addresses in the SSM address range if the record type is MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE. SSM-aware routersSHOULD<bcp14>SHOULD</bcp14> ignore MLDv1 Report and DONE messages that contain multicast addresses in the SSM address range,SHOULD NOT<bcp14>SHOULD NOT</bcp14> use such Reports to establish IP forwarding state, andMAY<bcp14>MAY</bcp14> log an error if it receives such a message.</t> <sectiontitle="Receptionanchor="curr_state_recs" numbered="true" toc="default"> <name>Reception of Current StateRecords" anchor="curr_state_recs">Records</name> <t>When receiving Current State Records, a router updates both its Filter Timer and its source timers. In some circumstances, the reception of a type of multicast address record will cause the Router Filter Mode for that multicast address to change. <xreftarget="rcvd-csr"/>target="rcvd-csr" format="default"/> describes the actions, with respect to state and timers, that occur 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 will use the notation INCLUDE (A), where A denotes the associated Include List. If the router is in EXCLUDE filter mode for a multicast address, we will use the notation EXCLUDE (X,Y), where X and Y denote the associated Requested List and ExcludeListList, respectively.</t> <t>Within the "Actions" section of the router state tables, we use the notation '(A)=J', which means thattheset A of the source records should have their source timers set to value J. 'Delete (A)' means thattheset A of the source records should be deleted. 'Filter Timer = J' means that the Filter Timer for the multicast address should be set to value J.</t> <tabletitle="Actionsalign="left" anchor="rcvd-csr"> <name>Actions for Received Current StateRecords" anchor="rcvd-csr">Records</name> <tbody><tr><th align="center">Router<tr> <th>Router State</th><th align="center">Report<th>Report Received</th><th align="center">New<th>New Router State</th><th align="center">Actions</th></tr> <tr><td>INCLUDE<th>Actions</th> </tr> <tr> <td>INCLUDE (A)</td> <td>IS_IN (B)</td> <td>INCLUDE (A+B)</td><td>(B)=MALI</td></tr> <tr><td>INCLUDE<td>(B)=MALI</td> </tr> <tr> <td>INCLUDE (A)</td> <td>IS_EX (B)</td> <td>EXCLUDE (A*B, B-A)</td><td><ul<td> <ul empty="true" bare="true"> <li>(B-A)=0</li> <li>Delete (A-B)</li> <li>FilterTimer=MALI</li></ul></td></tr> <tr><td>EXCLUDETimer=MALI</li> </ul> </td> </tr> <tr> <td>EXCLUDE (X,Y)</td> <td>IS_IN (A)</td> <td>EXCLUDE (X+A, Y-A)</td><td>(A)=MALI</td></tr> <tr><td>EXCLUDE<td>(A)=MALI</td> </tr> <tr> <td>EXCLUDE (X,Y)</td> <td>IS_EX (A)</td> <td>EXCLUDE (A-Y, Y*A)</td><td><ul<td> <ul empty="true" bare="true"> <li>(A-X-Y)=MALI</li> <li>Delete (X-A)</li> <li>Delete (Y-A)</li> <li>FilterTimer=MALI</li></ul></td></tr>Timer=MALI</li> </ul> </td> </tr> </tbody> </table> </section> <sectiontitle="Receptionanchor="fm_chg" numbered="true" toc="default"> <name>Reception of Filter Mode Change and Source List ChangeRecords" anchor="fm_chg">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 Mode Change Record for that multicast address. As with Current State Records, routers must act upon these records and possibly change their own state to reflect the new listening state of the link.</t> <t>The Querier must query sources or multicast addresses that are requested to be no longer forwarded. When a router queries or 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 Time milliseconds. If multicast address records are received in response to the querieswhichthat express interest in listening to the queried sources, the corresponding timers are updated.</t> <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 case a received Multicast Address Record motivates this action. The Filter Timer for that multicast address is lowered to a small interval of Last Listener Query Time milliseconds. If any multicast address records that express EXCLUDE mode interest in the multicast address are received within this interval, the Filter Timer is updated and the suggestion to the routing protocol to forward the multicast address stands without any interruption. If not, the router will switch to INCLUDE filter mode for that multicast address.</t> <t>During the query period (i.e., Last Listener Query Timemilliseconds)milliseconds), the MLD component in the router continues to suggest to the routing protocol to forward traffic from the multicast addresses or sources 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 the queried multicast address or sources that the router may prune the multicast address or sources from the link.</t> <t><xreftarget="mr-state-trans"/>target="mr-state-trans" format="default"/> describes the changes in multicast address state and the action(s) taken when receiving either Filter Mode Change or Source List Change Records. <xreftarget="mr-state-trans"/>target="mr-state-trans" format="default"/> also describes the querieswhichthat are sent by the Querier when a particular report is received.</t> <t>We use the following notationfor describingto describe the queries that are sent. We use the notation 'Q(MA)' to describe a Multicast Address Specific Query to the MA multicast address. We use the notation '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 null as a result of the action (e.g. A*B), then no query is sent as a result of the operation.</t> <t>In order to maintain protocol robustness, queries defined in the Actions column of <xreftarget="mr-state-trans"/>target="mr-state-trans" format="default"/> need to be transmitted [Last Listener Query Count] times, once every [Last Listener Query Interval] period.</t> <t>If while scheduling newqueries,queries there are already pending queries to be retransmitted for the same multicast address, the new and pending queries have to be merged. In addition, received host reports for a multicast address with pending queries may affect the contents of those queries. <xref target="spec_qry"/>format="default"/> describes the process of building and maintaining the state of pending queries.</t> <tabletitle="Multicastalign="left" anchor="mr-state-trans"> <name>Multicast Router StateTransitions" anchor="mr-state-trans">Transitions</name> <tbody><tr><th align="center">Router<tr> <th>Router State</th><th align="center">Report<th>Report Received</th><th align="center">New<th>New Router State</th><th align="center">Actions</th></tr> <tr><td>INCLUDE (A)</td><td>ALLOW (B)</td><td>INCLUDE(A+B)</td><td>(B)=MALI</td></tr> <tr><td>INCLUDE (A)</td><td>BLOCK (B)</td><td>INCLUDE(A)</td><td>Send Q(MA,A*B)</td></tr> <tr><td>INCLUDE (A)</td><td>TO_EX (B)</td><td>EXCLUDE(A*B,B-A)</td><td>(B-A)=0,<th>Actions</th> </tr> <tr> <td>INCLUDE (A)</td> <td>ALLOW (B)</td> <td>INCLUDE(A+B)</td> <td>(B)=MALI</td> </tr> <tr> <td>INCLUDE (A)</td> <td>BLOCK (B)</td> <td>INCLUDE(A)</td> <td>Send Q(MA,A*B)</td> </tr> <tr> <td>INCLUDE (A)</td> <td>TO_EX (B)</td> <td>EXCLUDE(A*B,B-A)</td> <td>(B-A)=0, Delete (A-B), Send Q(MA,A*B), FilterTimer=MALI</td></tr> <tr><td>INCLUDE (A)</td><td>TO_IN (B)</td><td>INCLUDE(A+B)</td><td>(B)=MALI,Timer=MALI</td> </tr> <tr> <td>INCLUDE (A)</td> <td>TO_IN (B)</td> <td>INCLUDE(A+B)</td> <td>(B)=MALI, SendQ(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)=FilterQ(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, SendQ(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)=FilterQ(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), FilterTimer=MALI</td></tr> <tr><td>EXCLUDE (X,Y)</td><td>TO_IN (A)</td><td>EXCLUDE(X+A,Y-A)</td><td>(A)=MALI,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), SendQ(MA)</td></tr>Q(MA)</td> </tr> </tbody> </table> </section> </section> <sectiontitle="Switchinganchor="rtr_mode" numbered="true" toc="default"> <name>Switching Router FilterModes" anchor="rtr_mode">Modes</name> <t>The Filter Timer is used as a mechanism for transitioning the Router Filter Mode from EXCLUDE to INCLUDE.</t> <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 EXCLUDE present on the attached link. Thus, the router transitions to INCLUDE filter mode for the multicast address.</t> <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 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 address is EXCLUDE(X,Y) and the Filter Timer expires for that multicast address, the router switches to filter mode of INCLUDE with state INCLUDE(X). If at the moment of the switch the Requested List (X) is empty, the multicast address record is deleted from the router.</t> </section> <sectiontitle="Actionnumbered="true" toc="default"> <name>Action on Reception ofQueries">Queries</name> <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 address, if the Hop Limit is set to 1, and if the Router Alert option is present in theHop-By-HopHop-by-Hop Options header of the IPv6 packet. If any of these checksfails,fail, the packet is dropped.</t> <t>If the validity of the MLD message is verified, the router starts to process the Query.</t> <sectiontitle="Timer Updates">numbered="true" toc="default"> <name>Timer Updates</name> <t>MLDv2 uses theSuppress Router-Side ProcessingS flag to ensure robustness, as explained in <xref target="build_state"/>.format="default"/>. When a router sends or receives a query with a clearSuppress Router-Side ProcessingS flag, it must update its timers to reflect the correct timeout values for the multicast address or sources being queried. The following table describes the timer actions when sending or receiving a Multicast Address Specific or Multicast Address and Source Specific Query with theSuppress Router-Side ProcessingS flag not set.</t><figure> <artwork><![CDATA[ Query Action ----- ------ Q(MA,A) Source<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 toLLQT Q(MA)LLQT.</td> </tr> <tr> <td>Q(MA)</td> <td>The Filter Timer is lowered toLLQT ]]></artwork> </figure>LLQT.</td> </tr> </tbody> </table> <t>When a router sends or receives a query with theSuppress Router-Side ProcessingS flag set, it will not update its timers.</t> </section> <sectiontitle="Querier Election" anchor="elect">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 queriesMUST<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> <sectiontitle="Buildinganchor="spec_qry" numbered="true" toc="default"> <name>Building and Sending SpecificQueries" anchor="spec_qry">Queries</name> <sectiontitle="Buildingnumbered="true" toc="default"> <name>Building and Sending Multicast Address SpecificQueries">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 Multicast Address SpecificqueryQuery as well as schedule [Last Listener Query Count - 1] query retransmissions to be sent every [Last Listener Query Interval], over [Last Listener Query Time].</t> <t>When transmitting a Multicast Address Specific Query, if the Filter Timer is larger than LLQT, the "Suppress Router-Side Processing" bit is set in the query message.</t> </section> <sectiontitle="Buildingnumbered="true" toc="default"> <name>Building and Sending Multicast Address and Source SpecificQueries"> <t>WhenQueries</name> <!-- [rfced] We see "Send Q(MA,X-A)" not "Send Q(MA,X)" in Table 8. Is this variance okay or is an update needed? 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: 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"/>), 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:<list style="bullets"> <t>Lower</t> <ul spacing="normal"> <li> <t>lower source timer to LLQT;</t><t>Add</li> <li> <t>add the sources to the RetransmissionList;</t> <t>SetList; and</t> </li> <li> <t>set the Source Retransmission Counter for each source to [Last Listener Query Count].</t></list></t></li> </ul> <t>The Querier must then immediately send a Multicast Address and Source Specific Query as well as schedule [Last Listener Query Count -1] query retransmissions to be sent every [Last Listener Query Interval], over [Last Listener Query Time]. The contents of these queries are calculated as follows.</t> <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. The first one has the "Suppress Router-Side Processing" bit set and contains all the sources with retransmission state (i.e., sources from the Retransmission List of that multicastaddress),address) and timers greater than LLQT. The second has the "Suppress Router-Side Processing" bit clear and contains all the sources with retransmission state and timers lower or equal to LLQT. If either of the two calculated messages does not contain any sources, then its transmission is suppressed.</t> <t>Note: If a Multicast Address SpecificqueryQuery is scheduled to be transmitted at the same time as a Multicast Address and Sourcespecific querySpecific Query for the same multicast address, then transmission of the Multicast Address and Source Specific message with the "Suppress Router-Side Processing" bit set may be suppressed.</t> </section> </section> </section> </section> <sectiontitle="Interoperationanchor="interop" numbered="true" toc="default"> <name>Interoperation withMLDv1" anchor="interop">MLDv1</name> <t>MLD version 2 hosts and routers interoperate with hosts and routers that have not yet been upgraded to MLDv2. This compatibility is maintained by hosts and routers taking appropriate actions depending on the versions of MLD operating on hosts and routers within a network.</t> <sectiontitle="Querynumbered="true" toc="default"> <name>Query VersionDistinctions">Distinctions</name> <t>The MLD version of a Multicast Listener Query message is determined as follows:<list style="empty"></t> <ul spacing="normal"> <li> <t>MLDv1 Query: length = 24 octets</t> </li> <li> <t>MLDv2 Query: length>=>= 28 octets</t></list></t></li> </ul> <t>Query messages that do not match any of the above conditions (e.g., a Query of length 26 octets)MUST<bcp14>MUST</bcp14> be silently ignored.</t> </section> <sectiontitle="Multicastnumbered="true" toc="default"> <name>Multicast Address ListenerBehavior">Behavior</name> <sectiontitle="Innumbered="true" toc="default"> <name>In the Presence of MLDv1Routers">Routers</name> <t>In order to be compatible with MLDv1 routers, MLDv2 hostsMUST<bcp14>MUST</bcp14> operate in version 1 compatibility mode. MLDv2 hostsMUST<bcp14>MUST</bcp14> keep state per local interface regarding the compatibility mode of each attached link. A host's compatibility mode is determined from the Host Compatibility Mode variablewhichthat can be in one of the two states: MLDv1 or MLDv2.</t> <t>The Host Compatibility Mode of an interface is set to MLDv1 whenever an MLDv1 Multicast Address Listener General Query is received on that interface. At the same time, the Older Version Querier Present timer for the interface is set to Older Version Querier Present Timeout seconds. The timer isre-setreset whenever a new MLDv1 General Query is received on that interface. If the Older Version Querier Present timer 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 protocol on that interface. When Host Compatibility Mode is MLDv1, a host acts in MLDv1 compatibility mode, using only the MLDv1 protocol, on that interface.</t> <t>An MLDv1 Querier will send General Queries with the Maximum Response Code set to the desired Maximum Response Delay, i.e., the full range of this field is linear and the exponential algorithm described in <xref target="mrcode"/>.format="default"/>. is not used.</t> <t>Whenever a host changes its compatibility mode, it cancels all its pending responses and retransmission timers.</t> <t>An SSM-aware host that receives an MLDv1 General Query or MLDv1 Group Specific Query for a multicast address in the SSM address rangeSHOULD<bcp14>SHOULD</bcp14> log an error. It isRECOMMENDED<bcp14>RECOMMENDED</bcp14> thatimplementionsimplementations provide a configuration option to disable the use of Host Compatibility Mode to allow networks to operate only in SSM mode. This configuration optionSHOULD<bcp14>SHOULD</bcp14> be disabled by default.</t> </section> <sectiontitle="Innumbered="true" toc="default"> <name>In the Presence of MLDv1 Multicast AddressListeners">Listeners</name> <t>An MLDv2 host may be placed on a link where there are MLDv1 hosts. A hostMAY<bcp14>MAY</bcp14> allow its MLDv2 Multicast Listener Report to be suppressed by a Version 1 Multicast Listener Report.</t> </section> </section> <sectiontitle="Multicastnumbered="true" toc="default"> <name>Multicast RouterBehavior">Behavior</name> <sectiontitle="Innumbered="true" toc="default"> <name>In the Presence of MLDv1Routers">Routers</name> <t>MLDv2 routers may be placed on a network where there is at least one MLDv1 router. The following requirements apply:<list style="bullets"></t> <ul spacing="normal"> <li> <t>If an MLDv1 router is present on the link, the QuerierMUST<bcp14>MUST</bcp14> use the lowest version of MLD present on the network. This must be administratively assured. Routers that desire to be compatible with MLDv1MUST<bcp14>MUST</bcp14> have a configuration option to act in MLDv1 mode; if an MLDv1 router is present on the link, the system administrator must explicitly configure all MLDv2 routers to act in MLDv1 mode. When in MLDv1 mode, the QuerierMUST<bcp14>MUST</bcp14> send periodic General Queries truncated at the Multicast Address field (i.e., 24 byteslong),long) andSHOULD<bcp14>SHOULD</bcp14> also warn about receiving an MLDv2 Query (such warningsMUST<bcp14>MUST</bcp14> be rate-limited). The QuerierMUST<bcp14>MUST</bcp14> also fill in the Maximum Response Delay in the Maximum Response Code field, i.e., the exponential algorithm described in <xref target="mrcode"/>format="default"/> is not used.</t> </li> <li> <t>If a router is not explicitly configured to use MLDv1 and receives an MLDv1 General Query, itSHOULD<bcp14>SHOULD</bcp14> log a warning. These warningsMUST<bcp14>MUST</bcp14> be rate-limited.</t> </li> <li> <t>It isRECOMMENDED<bcp14>RECOMMENDED</bcp14> thatimplementionsimplementations provide a configuration option to disable use of compatibility mode to allow networks to operate only in SSM mode. This configuration optionSHOULD<bcp14>SHOULD</bcp14> be disabled by default.</t></list></t></li> </ul> </section> <sectiontitle="Innumbered="true" toc="default"> <name>In the Presence of MLDv1 Multicast AddressListeners">Listeners</name> <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 MLDv1 hosts, MLDv2 routersMUST<bcp14>MUST</bcp14> operate in version 1 compatibility mode. MLDv2 routers keep a compatibility mode per multicast address record. The compatibility mode of a multicast address is determined from the Multicast Address Compatibility Mode variable, which can be in one of the two following states: MLDv1 or MLDv2.</t> <t>The Multicast Address Compatibility Mode of a multicast address record is set to MLDv1 whenever an MLDv1 Multicast Listener Report is 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 Timeout seconds. The timer isre-setreset whenever a new MLDv1 Report is received for that multicast address. If the Older Version Host Present timer expires, the router switches back to the Multicast Address Compatibility Mode of MLDv2 for that multicast address.</t> <t>Note that when a router switches back to MLDv2 Multicast Address Compatibility Mode for a multicast address, it takes some time to regain source-specific state information. Source-specific information will be learned during the next General Query, but sources that should be blocked will not be blocked until [Multicast Address Listening Interval] after that.</t> <t>When Multicast Address Compatibility Mode is MLDv2, a router acts using the MLDv2 protocol for that multicast address. When Multicast Address Compatibility Mode is MLDv1, a router internally translates the following MLDv1 messages for that multicast address to their MLDv2 equivalents (<xreftarget="msg-xlate"/>).</t>target="msg-xlate" format="default"/>).</t> <tabletitle="MLD Message Translation"anchor="msg-xlate"> <name>MLD Message Translation</name> <tbody><tr><th align="center">MLDv1<tr> <th align="left">MLDv1 Message</th> <thalign="center">MLDv2 Equivalent</th></tr> <tr><td>Report</td><td>IS_EX(align="left">MLDv2 Equivalent</th> </tr> <tr> <td>Report</td> <td>IS_EX( {})</td></tr> <tr><td>Done</td><td>TO_IN()</td> </tr> <tr> <td>Done</td> <td>TO_IN( {})</td></tr>)</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 the other hand, the Querier continues to send MLDv2 queries, regardless of its Multicast Address Compatibility Mode.</t> </section> </section> </section> <sectiontitle="Listanchor="timers" numbered="true" toc="default"> <name>List of Timers, Counters, andtheirTheir DefaultValues" anchor="timers">Values</name> <t>Most of these timers are configurable. If non-default settings are used, theyMUST<bcp14>MUST</bcp14> be consistent among all nodes on a single link. Note that parentheses are used to group expressions to make the algebra clear.</t> <sectiontitle="Robustness Variable" anchor="robust">anchor="robust" numbered="true" toc="default"> <name>Robustness Variable</name> <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 Robustness Variable may be increased. MLD is robust to [Robustness Variable] - 1 packet losses. The value of the Robustness VariableMUST NOT<bcp14>MUST NOT</bcp14> bezero,zero andSHOULD NOT<bcp14>SHOULD NOT</bcp14> be one. Default value: 2.</t> </section> <sectiontitle="Query Interval" anchor="qry_int">anchor="qry_int" numbered="true" toc="default"> <name>Query Interval</name> <t>The Query Interval variable denotes the interval between General Queries sent by the Querier. Default value: 125 seconds.</t> <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 sent less often.</t> </section> <sectiontitle="Querynumbered="true" toc="default"> <name>Query ResponseInterval">Interval</name> <t>The Query Response Interval is the Maximum Response Delay used to calculate the Maximum Response Code that is inserted into the periodic General Queries. Default value: 10000 (10 seconds)</t> <t>By varying the [Query Response Interval], an administrator may tune the burstiness of MLD messages on the link; larger values make the traffic less bursty, as host responses are spread out over a larger interval. The number of seconds represented by the [Query Response Interval] must be less than the [Query Interval].</t> </section> <sectiontitle="Multicastnumbered="true" toc="default"> <name>Multicast Address ListeningInterval">Interval</name> <t>The Multicast Address Listening Interval (MALI) is the amount of time that must pass before a multicast router decides there are no more listeners of a multicast address or a particular source on a link. This valueMUST<bcp14>MUST</bcp14> be ([Robustness Variable] times [Query Interval]) plus 2 times [Query Response Interval].</t> </section> <sectiontitle="Othernumbered="true" toc="default"> <name>Other Querier PresentTimeout">Timeout</name> <t>The Other Querier Present Timeout is the length of time that must pass before a multicast router decides that there is no longer another multicast routerwhichthat should be the Querier. This valueMUST<bcp14>MUST</bcp14> be ([Robustness Variable] times ([Query Interval]) plus (one half of [Query Response Interval]).</t> </section> <sectiontitle="Startupanchor="start_qry_int" numbered="true" toc="default"> <name>Startup QueryInterval" anchor="start_qry_int">Interval</name> <t>The Startup Query Interval is the interval between General Queries sent by a Querier on startup. Default value: 1/4 the [Query Interval].</t> </section> <sectiontitle="Startupanchor="start_qry_cnt" numbered="true" toc="default"> <name>Startup QueryCount" anchor="start_qry_cnt">Count</name> <t>The Startup Query Count is the number of Queries sent out on startup, separated by the Startup Query Interval. Default value: [Robustness Variable].</t> </section> <sectiontitle="Lastnumbered="true" toc="default"> <name>Last Listener QueryInterval">Interval</name> <t>The Last Listener Query Interval (LLQI) is the Maximum Response Delay used to calculate the Maximum Response Code inserted into Multicast Address Specific Queries sent in response to Version 1 Multicast Listener Done messages. It is also the Maximum Response Delay used to calculate the Maximum Response Code inserted into Multicast Address and Source Specific Query messages. Default value: 1000 (1 second).</t> <t>Note that for values of LLQI greater than 32.768 seconds, a limited set of values can be represented, corresponding to sequential values of Maximum Response Code. When converting a configured time to a 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 exactly representable.</t> <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 last listener for a multicast address or source.</t> </section> <sectiontitle="Lastnumbered="true" toc="default"> <name>Last Listener QueryCount">Count</name> <t>The Last Listener Query Count is the number of Multicast Address Specific Queries sent before the router assumes there are no local listeners. The Last Listener Query Count is also the number of Multicast Address and Source Specific Queries sent before the router assumes there are no listeners for a particular source. Default value: [Robustness Variable].</t> </section> <sectiontitle="Lastnumbered="true" toc="default"> <name>Last Listener QueryTime">Time</name> <t>The Last Listener Query Time is the time value represented by the Last Listener Query Interval, multiplied by [Last Listener Query Count]. It is not a tunable value, but it may be tuned by changing its components.</t> </section> <sectiontitle="Unsolicitednumbered="true" toc="default"> <name>Unsolicited ReportInterval">Interval</name> <t>The Unsolicited Report Interval is the time between repetitions of a node's initial report of interest in a multicast address. Default value: 1 second.</t> </section> <sectiontitle="Oldernumbered="true" toc="default"> <name>Older Version Querier PresentTimeout">Timeout</name> <t>The Older Version Querier Present Timeout is thetime-outtimeout for transitioning a host back to MLDv2 Host Compatibility Mode. When an MLDv1 query is received, MLDv2 hosts set their Older Version Querier Present Timer to [Older Version Querier Present Timeout].</t> <t>This valueMUST<bcp14>MUST</bcp14> be ([Robustness Variable] times (the [Query Interval] in the last Query received)) plus ([Query Response Interval]).</t> </section> <sectiontitle="Oldernumbered="true" toc="default"> <name>Older Version Host PresentTimeout">Timeout</name> <t>The Older Version Host Present Timeout is thetime-outtimeout for transitioning a router back to MLDv2 Multicast Address Compatibility Mode for a specific multicast address. When an MLDv1 report is received for that multicast address, routers set their Older Version Host Present Timer to [Older Version Host Present Timeout].</t> <t>This valueMUST<bcp14>MUST</bcp14> be ([Robustness Variable] times [Query Interval]) plus ([Query Response Interval]).</t> </section> <sectiontitle="Configuring timers">numbered="true" toc="default"> <name>Configuring Timers</name> <t>This section is meant to provide advice to network administrators on how to tune these settings to their network. Ambitious router implementations might tune these settings dynamically based upon changing characteristics of the network.</t> <sectiontitle="Robustness Variable">numbered="true" toc="default"> <name>Robustness Variable</name> <t>The Robustness Variable tunes MLD to expected losses on a link. 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 robust to a single packet loss but may operate imperfectly if more losses occur. On lossy links, the value of the Robustness Variable should be increased to allow for the expected level of packet loss. However, increasing the value of the Robustness Variable increases the leave latency of the link (the time between when the last listener stops listening to a source or multicast address and when the traffic stops flowing).</t> </section> <sectiontitle="Query Interval">numbered="true" toc="default"> <name>Query Interval</name> <t>The overall level of periodic MLD traffic is inversely proportional to the Query Interval. A longer Query Interval results in a lower overall level of MLD traffic. The value of the Query IntervalMUST<bcp14>MUST</bcp14> be equal to or greater than the Maximum Response Delay used to calculate the Maximum Response Code inserted in General Query messages.</t> </section> <sectiontitle="Maximumnumbered="true" toc="default"> <name>Maximum ResponseDelay">Delay</name> <t>The burstiness of MLD traffic is inversely proportional to the Maximum Response Delay. A longer Maximum Response Delay will spread Report messages over a longer interval. However, a longer Maximum Response Delay in Multicast Address Specific and Multicast AddressAndand Source Specific Queries extends the leave latency (the time between when the last listener stops listening to a source or multicast address and when the traffic stops flowing.) The expected rate of Report messages can be calculated by dividing the expected number of Reporters by the Maximum Response Delay. The Maximum Response Delay may be dynamically calculated(shown(as shown in <xreftarget="mrd-calc"/>)target="mrd-calc" format="default"/>) per Query by using the expected number of Reporters for that Query.</t> <tabletitle="Maximumanchor="mrd-calc"> <name>Maximum Response DelayCalculation" anchor="mrd-calc">Calculation</name> <tbody><tr><th align="center">Query<tr> <th align="left">Query Type</th> <thalign="center">Expectedalign="left">Expected Number ofReporters</th></tr> <tr><td>General Query</td><td>AllReporters</th> </tr> <tr> <td>General Query</td> <td>All nodes onlink</td></tr> <tr><td>Multicastthe link.</td> </tr> <tr> <td>Multicast Address SpecificQuery</td><td>AllQuery</td> <td>All nodes on the link that had expressed interest in the multicastaddress</td></tr> <tr><td>Multicastaddress.</td> </tr> <tr> <td>Multicast Address and Source SpecificQuery</td><td>AllQuery</td> <td>All nodes on the link that had expressed interest in the source and multicastaddress</td></tr>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> </section> </section> </section> <sectiontitle="Security Considerations">numbered="true" toc="default"> <name>Security Considerations</name> <t>MLD does not contain any cryptographicprotectionprotection, thus its messages are not authenticated, the message contents are not confidential, and any message can be replayed. The ability to replay messages does not affect the behavior of the protocol itself.</t> <t>Replaying messages can lead to multicast forwarding state to remain active beyond the needs of group members on a link. Excessive retention of multicast state may lead to resource exhaustion in some devices.</t> <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 issue as some multicast content may be sensitive.</t> <t>The lack of authentication allows for the creation of forged messages. Note that before processing an MLD message, nodes verify if the source 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 Alert option is present in theHop-By-HopHop-by-Hop Options header of the IPv6 packet. If any of these checks fails, the packet is dropped. This defends the MLDv2 nodes from acting on forged MLD messages originated off-link. Therefore,in the followingwe discuss only the effects of on-linkforgery.</t>forgery in the following section.</t> <sectiontitle="Query Message">numbered="true" toc="default"> <name>Query Message</name> <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 forger. If the forger then sends no more Query messages, other routers' Other Querier Present timer will time out and one will resume the role of Querier. During this time, if the forger ignores Multicast Listener DoneMessages,messages, traffic might flow to multicast addresses with no listeners for up to [Multicast Address Listener Interval].</t> <t>A forged Version 1 Query message will put MLDv2 listeners on that link in MLDv1 Host Compatibility Mode. This scenario can be avoided by providing MLDv2 hosts with a configuration option to ignore Version 1 messages completely.</t> <t>A DoS attack on a node could be staged through forged Multicast Address and Source Specific Queries. The attacker can find out about the listening state of a specific node with a general query. Afterthatthat, it could send a large number of Multicast Address and Source Specific Queries, each with a large source list and/or long Maximum 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 delayed response. This would consume both memory and CPU cycles in order to augment the recorded sources with the source lists included in the successive queries.</t> <t>To protect against such a DoS attack, a node stack implementation could restrict the number of Multicast Address and Source Specific Queries per multicast address within thisinterval,interval and/or record only a limited number of sources.</t> </section> <sectiontitle="Currentnumbered="true" toc="default"> <name>Current State Reportmessages">Messages</name> <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. Nevertheless, since listening to a multicast address on a host is generally an unprivileged operation, a local user may trivially gain the same result without forging any messages. If a large number of forged Report messages are generated, a multicast router may consume significant resources maintaining multicast forwarding state.</t> <t>A forged Version 1 Report Message may put a router into MLDv1 Multicast Address Compatibility Mode for a particular multicast address, meaning that the router will ignore MLDv2source specificsource-specific state messages. This can cause traffic to flow from unwanted sources for up to [Multicast Address Listener Interval]. This can be solved by providing routers with a configuration switch to ignore Version 1 messages completely. This breaks automatic compatibility with Version 1 hosts, so it should only be used in situations where source filtering is critical.</t> </section> <sectiontitle="Statenumbered="true" toc="default"> <name>State Change Reportmessages">Messages</name> <t>A forged State Change Report message will cause the Querier to send out Multicast Address Specific or Multicast Address and Source Specific Queries for the multicast address in question. This causes extra processing on each router and on each listener of the multicast address, but it cannot cause loss of desired traffic.</t> </section> </section> <sectiontitle="IANA Considerations" anchor="iana">anchor="iana" numbered="true" toc="default"> <name>IANA Considerations</name> <t>IANA has assigned the IPv6 link-local multicast address ff02::16, called "all MLDv2-capable routers", as described in <xref target="dest_addr"/>.format="default"/>. Version 2 Multicast Listener Reports will be sent to this specialaddress. The reference for this assignment should be changed to this document upon publication as an RFC.</t>address.</t> <t>In addition, IANA has assigned the ICMPv6 messagetypeType value of 143 for Version 2 Multicast Listener Report messages, as specified in <xref target="node_state"/>. The referenceformat="default"/>.</t> </section> </middle> <back> <references> <name>References</name> <references> <name>Normative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8200.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4443.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4604.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2464.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2710.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2711.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4291.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4607.xml"/> <!-- [I-D.ietf-pim-3228bis] companion document RFC 9778--> <reference anchor="RFC9778" target="https://www.rfc-editor.org/info/rfc9778"> <front> <title>IANA Considerations forthis assignment should be changed toInternet Group Management Protocols</title> <author initials="B." surname="Haberman" fullname="Brian Haberman" role="editor"> <organization>Johns Hopkins University Applied Physics Lab</organization> </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> </references> <references> <name>Informative References</name> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4861.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4862.xml"/> <!-- Because this documentupon publicationwill likey be published at the same time asan RFC.</t> </section> <section title="Contributors"> <t>Roland Vida, Luis Henrique Maciel Kosmalski Costa, Serge Fdida, Steve Deering, Bill Fenner, and Isidor Kouvelas are3376bis, we have updated theauthors ofreference to refer to RFC3810, which makes up the majority of the content in this document.</t> <t>Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe and Tim Winters have contributed valuable content9776. Please let us know if any corrections are needed. Please consider whether it is appropriate tothis version of the specification.</t> </section> <section title="Acknowledgments"> <t>We would likerefer tothank Hitoshi Asaeda, Randy Bush, Francis Dupont, Ted Hardie, Russ Housley, Konstantin Kabassanov, Erik Nordmark, Shinsuke Suzuki, Margaret Wasserman, Bert Wijnen, and Remi Zara for their valuable comments and suggestions on this document.</t> <t>Stig Venaas, Hitoshi Asaeda,[BCP57] andMike McBride have provided valuable feedback on this version of[STD100], or if referring to thespecification and we thank them for their input.</t> </section> </middle> <back> <references title="Normative References"> <?rfc include="reference.RFC.2119" ?> <?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" ?>specific RFCs is preferred. --> <!-- <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.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> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3569.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3678.xml"/> <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.3810.xml"/> </references><references title="Informative References"> <?rfc include="reference.RFC.4861" ?> <?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> <sectiontitle="Design Rationale"> <section title="Thenumbered="true" toc="default"> <name>Design Rationale</name> <section anchor="state_change" numbered="true" toc="default"> <name>The Need for State ChangeMessages" anchor="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 need for both these types of Reports.</t> <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 change in the per-interface state. Multicast Listener Reports that are sent in response to Multicast Address Listener Queries are used mainly to refresh the existing state at the router; they typically do not cause transitions in state at the router. Multicast Listener Reports that are sent in response to changes in the per-interface state require the router to take some action in response to the received report (see <xref target="rcv_rpt"/>).</t>format="default"/>).</t> <t>The inability to distinguish between the two types of reports would force a router to treat all Multicast Listener Reports as potential changes in state and could result in increased processing at the router as well as an increase in MLD traffic on the link.</t> </section> <sectiontitle="Host Suppression" anchor="host_suppress">anchor="host_suppress" numbered="true" toc="default"> <name>Host Suppression</name> <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 MLDv2, the suppression of multicast listener reports has been 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 interface. This would allow routers to implement fast leaves (e.g., for layered multicast congestion controlschemes),schemes) as well as track listener status for possible security or accounting purposes. The present specification does not require routers to implement per-host tracking. Nevertheless, the lack of host suppression in MLDv2 makes it possible to implement either proprietary or future standard behavior of multicast routers that would support per-host tracking, while being fully interoperable with MLDv2 listeners and routers that implement the exact behavior described in this specification.</t> </li> <li> <t>Multicast Listener Report suppression does not work well on bridged LANs. Many bridges andLayer2/Layer3Layer 2 / Layer 3 switches that implement MLD snooping do not forward MLD messages across LAN segments in order to prevent multicast listener report suppression.</t> </li> <li> <t>By eliminating multicast listener report suppression, hosts have fewer messages to process; this leads to a simpler state machine implementation.</t> </li> <li> <t>In MLDv2, a single multicast listener report now bundles multiple multicast address records to decrease the number of packets sent. In comparison, the previous version of MLD required that each multicast address be reported in a separate message.</t></list></t></li> </ol> </section> <sectiontitle="Switching router filter modesanchor="mode_switch" numbered="true" toc="default"> <name>Switching Router Filter Modes from EXCLUDE toINCLUDE" anchor="mode_switch">INCLUDE</name> <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 (seesection 7.2.1).<xref target="def-router-filter-mode" format="default"/>). In EXCLUDE mode, a router forwards traffic from 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 the router to switch back to INCLUDE mode seamlessly, without interrupting the flow of traffic to existing listeners.</t> <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 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 EXCLUDE mode on the link(otherwise(otherwise, a multicast listener report from that node would have refreshed the Filter Timer). The router can then switch to INCLUDE mode seamlessly; sources from the Requested List are moved to the Include List, while sources from the Exclude List are deleted.</t> </section> </section> <sectiontitle="Summary of Changes"> <section title="MLDv1">numbered="true" toc="default"> <name>Summary of Changes</name> <section numbered="true" toc="default"> <name>MLDv1</name> <t>The following is a summary of changes from MLDv1, specified in <xref target="RFC2710"/>. <list style="bullets">format="default"/>. </t> <ul spacing="normal"> <li> <t>MLDv2 introduces source filtering.</t> </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> </li> <li> <t>An MLDv2 node keeps per-socket and per-interface multicast listening states that include a filter mode and a source list for each multicast address. This enables packet filtering based on a socket's multicast reception state.</t> </li> <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 listeners on the link. MLDv1 routers kept only the list of multicast addresses.</t> </li> <li> <t>Queries include additional fields (<xref target="qry_msg"/>).</t>format="default"/>).</t> </li> <li> <t>The S flag(Suppress Router-Side Processing)is included in queries in order to fix robustness issues.</t> </li> <li> <t>The Querier's Robustness Variable and Query Interval Code are included in Queries in order to synchronize all MLDv2 routers connected to the same link.</t> </li> <li> <t>A new Query type (Multicast Address and Source Specific Query) is introduced.</t> </li> <li> <t>The Maximum Response Delay is not directly included in the Query anymore. Instead, an exponential algorithm is used to calculate its value, based on the Maximum Response Code included in the Query. The maximum value is increased from 65535 milliseconds to about 140 minutes.</t> </li> <li> <t>Reports include Multicast Address Records. Information on the listening state for several different multicast addresses can be included in the same Report message.</t> </li> <li> <t>Reports are sent to the "all MLDv2-capable multicast routers" address, instead of the multicast address the host listens to, as in MLDv1. This facilitates the operation oflayer-2Layer 2 snooping switches.</t> </li> <li> <t>There is no "host suppression", as in MLDv1. All nodes send Report messages.</t> </li> <li> <t>Unsolicited Reports, announcing changes in receiver listening state, are sent [Robustness Variable] times.RFC 2710<xref target="RFC2710"/> is less explicit.</t> </li> <li> <t>There are no Done messages.</t> </li> <li> <t>Interoperability with MLDv1 systems is achieved by MLDv2 state operations.</t> </li> <li> <t>In order to ensure interoperability, hosts maintain a Host Compatibility Mode variable and an Older Version Querier Present timer per interface. Routers maintain a Multicast Address Compatibility Mode variable and an Older Version Host Present timer per multicast address.</t></list></t></li> </ul> </section> <sectionanchor="3810-changes" title="Changesanchor="_810-changes" numbered="true" toc="default"> <name>Changes since RFC3810">3810</name> <t>The following summarizes the changes made since <xreftarget="RFC3810"/>. <list style="bullets">target="RFC3810" 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 sending of MLD messages to address Erratum 5977.</t> </li> <li> <!-- [rfced] Erratum 6725 is for RFC 3376, not RFC 3810. Should the text that references Erratum 6725 be removed from this document and perhaps added to RFC 9776? Current: The following summarizes the changes made since [RFC3810]. ... * Added text to clarify the Group Membership Interval timer changes per Erratum 6725. --> <t>Added text to clarify the Group Membership Interval timer changesfromper Erratum 6725.</t> </li> <li> <t>ChangedReserved field"Reserved field" to "Flags field" in messages toFlags field tofacilitate use of an IANA-managed registry for future bit allocations.</t></list></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>