reporting different sources each time.
6. Protocol Description for Multicast Address Listeners
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 MLD messages, as well as to those of its
neighbors.) The multicast router part of MLDv2 is described in
section 7.
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.
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 Compatibility Mode, and the behavior if its
value is set to MLDv1, are described in section 8.
The link-scope all-nodes multicast address, (FF02::1), is handled as
a special case. On all nodes -- that is all hosts and 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).
There are three types of events that trigger MLDv2 protocol actions
on an interface:
o a change of the per-interface listening state, caused by a local
invocation of IPv6MulticastListen;
o the firing of a specific timer;
o the reception of a Query.
(Received MLD messages of types other than Query are silently
ignored, except as required for interoperation with nodes that
implement MLDv1.)
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 section 9.
6.1. Action on Change of Per-Interface State
An invocation of IPv6MulticastListen may cause the multicast
listening state of an interface to change, according to the rules in
section 4.2. Each such change affects the per-interface entry for a
single multicast address.
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
the table below. 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.
Old State New State State Change Record Sent
--------- --------- ------------------------
INCLUDE (A) INCLUDE (B) ALLOW (B-A), BLOCK (A-B)
EXCLUDE (A) EXCLUDE (B) ALLOW (A-B), BLOCK (B-A)
INCLUDE (A) EXCLUDE (B) TO_EX (B)
EXCLUDE (A) INCLUDE (B) TO_IN (B)
If the computed source list for either an ALLOW or a BLOCK State
Change Record is empty, that record is omitted from the Report.
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]).
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.
The contents of the new Report are calculated as follows:
o As for the first Report, the per-interface state for the affected
multicast address before and after the latest change is compared.
o 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.
The transmission of the merged State Change Report terminates
retransmissions of the earlier State Change Reports for the same
multicast 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.
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 a per 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 is sent the counter is decreased by one unit.
When the counter reaches zero, the source is deleted from the
Retransmission List for that multicast address.
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 a per 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.
Each time a per-interface listening state change triggers the
Immediate 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; otherwise 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 to the table below.
Record Sources included
------ ----------------
TO_IN All in the current per-interface state that must be
forwarded
TO_EX All in the current per-interface state that must be
blocked
ALLOW All with retransmission state (i.e., all sources from the
Retransmission List) that must be forwarded
BLOCK All with retransmission state that must be blocked
If the computed source list for either an ALLOW or a BLOCK record is
empty, that record is omitted from the State Change Report.
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).
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 section 6.3.
6.2. Action on Reception of a Query
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 the Hop-By-Hop Options header of the IPv6 packet. If
any of these checks fails, the packet is dropped.
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.
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:
o an Interface Timer for scheduling responses to General Queries;
o a Multicast Address Timer for scheduling responses to Multicast
Address (and Source) Specific Queries, for each multicast address
the node has to report on;
o a per-multicast-address list of sources to be reported in response
to a Multicast Address and Source Specific Query.
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 or not, and the type of Report to schedule.
(The rules are considered in order and only the first matching rule
is applied.)
1. If there is a pending response to a previous General Query
scheduled sooner than the selected delay, no additional response
needs to be scheduled.
2. 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.
3. 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 recorded to be used when
generating a response.
4. 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.
5. 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.
6.3. Action on Timer Expiration
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.
1. 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 section 4.2. The
Current State Record carries the multicast address and its
associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and
Source list. Multiple Current State Records are packed into
individual Report messages, to the extent possible.
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 implementation MUST
avoid the "ack-implosion" problem, i.e., MUST NOT send a Report
immediately upon reception of a General Query.
2. 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.
3. 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
the following table:
set of sources in the
per-interface state pending response record Current State Record
------------------- ----------------------- --------------------
INCLUDE (A) B IS_IN (A*B)
EXCLUDE (A) B IS_IN (B-A)
If the resulting Current State Record has an empty set of source
addresses, then no response is sent. After the required Report
messages have been generated, the source lists associated with any
reported multicast addresses are cleared.
4. 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.
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 the table below:
Record Sources included
------ ----------------
TO_IN All in the current per-interface state that must be
forwarded
TO_EX All in the current per-interface state that must be
blocked
ALLOW 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 multicast
address.
BLOCK 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 multicast
address.
If the computed source list for either an ALLOW or a BLOCK record
is empty, that record is omitted from the State Change Report.
7. Description of the Protocol for Multicast Routers
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.
This section describes the part of MLDv2 that is performed by
multicast routers. Multicast routers may themselves become multicast
address listeners, and therefore also perform the multicast listener
part of MLDv2, described in section 6.
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.
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 [RFC2464]; 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.
On each interface over which this protocol is being run, the router
MUST enable reception of the link-scope "all MLDv2-capable routers"
multicast address from all sources, and MUST perform the multicast
address listener part of MLDv2 for that address on that interface.
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 Appendix A2 item 1 for discussion.)
MLDv2 is backward compatible with the MLDv1 protocol. For a detailed
description of compatibility issues see section 8.
7.1. Conditions for MLD Queries
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
section 7.6.2) 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.
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.
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.
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.
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.
A Multicast Address and Source Specific Query is used to verify that
there are no nodes on a link which listen to traffic from a specific
set of sources. Multicast Address and Source Specific Queries list
sources for a particular multicast address which 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