rfc9777.original | rfc9777.txt | |||
---|---|---|---|---|
Network Working Group B. Haberman, Ed. | Internet Engineering Task Force (IETF) B. Haberman, Ed. | |||
Internet-Draft JHU APL | Request for Comments: 9777 JHU APL | |||
Obsoletes: 3810 (if approved) 27 August 2024 | STD: 101 March 2025 | |||
Updates: 2710 (if approved) | Obsoletes: 3810 | |||
Intended status: Standards Track | Updates: 2710 | |||
Expires: 28 February 2025 | Category: Standards Track | |||
ISSN: 2070-1721 | ||||
Multicast Listener Discovery Version 2 (MLDv2) for IPv6 | Multicast Listener Discovery Version 2 (MLDv2) for IPv6 | |||
draft-ietf-pim-3810bis-12 | ||||
Abstract | Abstract | |||
This document updates RFC 2710, and it specifies Version 2 of the | This document updates RFC 2710, and it specifies the Multicast | |||
Multicast Listener Discovery Protocol (MLDv2). MLD is used by an | Listener Discovery version 2 (MLDv2) protocol. MLD is used by an | |||
IPv6 router to discover the presence of multicast listeners on | IPv6 router to discover the presence of multicast listeners on | |||
directly attached links, and to discover which multicast addresses | directly attached links and to discover which multicast addresses are | |||
are of interest to those neighboring nodes. MLDv2 is designed to be | of interest to those neighboring nodes. MLDv2 is designed to be | |||
interoperable with MLDv1. MLDv2 adds the ability for a node to | interoperable with MLDv1. MLDv2 adds the ability for a node to | |||
report interest in listening to packets with a particular multicast | report interest in listening to packets with a particular multicast | |||
address only from specific source addresses or from all sources | address only from specific source addresses or from all sources | |||
except for specific source addresses. | except for specific source addresses. | |||
This document obsoletes RFC 3810. | This document obsoletes RFC 3810. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at https://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on 28 February 2025. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
https://www.rfc-editor.org/info/rfc9777. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2024 IETF Trust and the persons identified as the | Copyright (c) 2025 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents (https://trustee.ietf.org/ | Provisions Relating to IETF Documents | |||
license-info) in effect on the date of publication of this document. | (https://trustee.ietf.org/license-info) in effect on the date of | |||
Please review these documents carefully, as they describe your rights | publication of this document. Please review these documents | |||
and restrictions with respect to this document. Code Components | carefully, as they describe your rights and restrictions with respect | |||
extracted from this document must include Revised BSD License text as | to this document. Code Components extracted from this document must | |||
described in Section 4.e of the Trust Legal Provisions and are | include Revised BSD License text as described in Section 4.e of the | |||
provided without warranty as described in the Revised BSD License. | Trust Legal Provisions and are provided without warranty as described | |||
in the Revised BSD License. | ||||
This document may contain material from IETF Documents or IETF | This document may contain material from IETF Documents or IETF | |||
Contributions published or made publicly available before November | Contributions published or made publicly available before November | |||
10, 2008. The person(s) controlling the copyright in some of this | 10, 2008. The person(s) controlling the copyright in some of this | |||
material may not have granted the IETF Trust the right to allow | material may not have granted the IETF Trust the right to allow | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 5 | 1. Introduction | |||
1.1. Conventions Used in This Document . . . . . . . . . . . . 5 | 1.1. Conventions Used in This Document | |||
2. Protocol Overview . . . . . . . . . . . . . . . . . . . . . . 5 | 2. Protocol Overview | |||
2.1. Building Multicast Listening State on Multicast Address | 2.1. Building Multicast Listening State on Multicast Address | |||
Listeners . . . . . . . . . . . . . . . . . . . . . . . . 6 | Listeners | |||
2.2. Exchanging Messages between the Querier and the Listening | 2.2. Exchanging Messages between the Querier and the Listening | |||
Nodes . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | Nodes | |||
2.3. Building Multicast Address Listener State on Multicast | 2.3. Building Multicast Address Listener State on Multicast | |||
Routers . . . . . . . . . . . . . . . . . . . . . . . . . 9 | Routers | |||
3. The Service Interface for Requesting IP Multicast | 3. The Service Interface for Requesting IP Multicast Reception | |||
Reception . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4. Multicast Listening State Maintained by Nodes | |||
4. Multicast Listening State Maintained by Nodes . . . . . . . . 13 | 4.1. Per-Socket State | |||
4.1. Per-Socket State . . . . . . . . . . . . . . . . . . . . 13 | 4.2. Per-Interface State | |||
4.2. Per-Interface State . . . . . . . . . . . . . . . . . . . 14 | 5. Message Formats | |||
5. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 16 | 5.1. Multicast Listener Query Message | |||
5.1. Multicast Listener Query Message . . . . . . . . . . . . 17 | 5.1.1. Code | |||
5.1.1. Code . . . . . . . . . . . . . . . . . . . . . . . . 19 | 5.1.2. Checksum | |||
5.1.2. Checksum . . . . . . . . . . . . . . . . . . . . . . 19 | 5.1.3. Maximum Response Code | |||
5.1.3. Maximum Response Code . . . . . . . . . . . . . . . . 19 | 5.1.4. Reserved | |||
5.1.4. Reserved . . . . . . . . . . . . . . . . . . . . . . 19 | 5.1.5. Multicast Address | |||
5.1.5. Multicast Address . . . . . . . . . . . . . . . . . . 20 | 5.1.6. Flags | |||
5.1.6. Flags . . . . . . . . . . . . . . . . . . . . . . . . 20 | 5.1.7. S Flag (Suppress Router-Side Processing) | |||
5.1.7. S Flag (Suppress Router-Side Processing) . . . . . . 20 | 5.1.8. QRV (Querier's Robustness Variable) | |||
5.1.8. QRV (Querier's Robustness Variable) . . . . . . . . . 20 | 5.1.9. QQIC (Querier's Query Interval Code) | |||
5.1.9. QQIC (Querier's Query Interval Code) . . . . . . . . 20 | 5.1.10. Number of Sources (N) | |||
5.1.10. Number of Sources (N) . . . . . . . . . . . . . . . . 21 | 5.1.11. Source Address [i] | |||
5.1.11. Source Address [i] . . . . . . . . . . . . . . . . . 21 | 5.1.12. Additional Data | |||
5.1.12. Additional Data . . . . . . . . . . . . . . . . . . . 21 | 5.1.13. Query Variants | |||
5.1.13. Query Variants . . . . . . . . . . . . . . . . . . . 21 | 5.1.14. Source Addresses for Queries | |||
5.1.14. Source Addresses for Queries . . . . . . . . . . . . 22 | 5.1.15. Destination Addresses for Queries | |||
5.1.15. Destination Addresses for Queries . . . . . . . . . . 22 | 5.2. Version 2 Multicast Listener Report Message | |||
5.2. Version 2 Multicast Listener Report Message . . . . . . . 22 | 5.2.1. Reserved | |||
5.2.1. Reserved . . . . . . . . . . . . . . . . . . . . . . 25 | 5.2.2. Checksum | |||
5.2.2. Checksum . . . . . . . . . . . . . . . . . . . . . . 25 | 5.2.3. Flags | |||
5.2.3. Flags . . . . . . . . . . . . . . . . . . . . . . . . 25 | 5.2.4. Nr of Mcast Address Records (M) | |||
5.2.4. Nr of Mcast Address Records (M) . . . . . . . . . . . 25 | 5.2.5. Multicast Address Record | |||
5.2.5. Multicast Address Record . . . . . . . . . . . . . . 25 | 5.2.6. Record Type | |||
5.2.6. Record Type . . . . . . . . . . . . . . . . . . . . . 25 | 5.2.7. Aux Data Len | |||
5.2.7. Aux Data Len . . . . . . . . . . . . . . . . . . . . 25 | 5.2.8. Number of Sources (N) | |||
5.2.8. Number of Sources (N) . . . . . . . . . . . . . . . . 25 | 5.2.9. Multicast Address | |||
5.2.9. Multicast Address . . . . . . . . . . . . . . . . . . 26 | 5.2.10. Source Address [i] | |||
5.2.10. Source Address [i] . . . . . . . . . . . . . . . . . 26 | 5.2.11. Auxiliary Data | |||
5.2.11. Auxiliary Data . . . . . . . . . . . . . . . . . . . 26 | 5.2.12. Additional Data | |||
5.2.12. Additional Data . . . . . . . . . . . . . . . . . . . 26 | 5.2.13. Multicast Address Record Types | |||
5.2.13. Multicast Address Record Types . . . . . . . . . . . 26 | 5.2.14. Source Addresses for Reports | |||
5.2.14. Source Addresses for Reports . . . . . . . . . . . . 29 | 5.2.15. Destination Addresses for Reports | |||
5.2.15. Destination Addresses for Reports . . . . . . . . . . 29 | 5.2.16. Multicast Listener Report Size | |||
5.2.16. Multicast Listener Report Size . . . . . . . . . . . 30 | 6. Protocol Description for Multicast Address Listeners | |||
6. Protocol Description for Multicast Address Listeners . . . . 30 | 6.1. Action on Change of Per-Interface State | |||
6.1. Action on Change of Per-Interface State . . . . . . . . . 31 | 6.2. Action on Reception of a Query | |||
6.2. Action on Reception of a Query . . . . . . . . . . . . . 34 | 6.3. Action on Timer Expiration | |||
6.3. Action on Timer Expiration . . . . . . . . . . . . . . . 36 | 7. Description of the Protocol for Multicast Routers | |||
7. Description of the Protocol for Multicast Routers . . . . . . 38 | 7.1. Conditions for MLD Queries | |||
7.1. Conditions for MLD Queries . . . . . . . . . . . . . . . 39 | 7.2. MLD State Maintained by Multicast Routers | |||
7.2. MLD State Maintained by Multicast Routers . . . . . . . . 41 | 7.2.1. Definition of Router Filter Mode | |||
7.2.1. Definition of Router Filter Mode . . . . . . . . . . 41 | 7.2.2. Definition of Filter Timers | |||
7.2.2. Definition of Filter Timers . . . . . . . . . . . . . 42 | 7.2.3. Definition of Source Timers | |||
7.2.3. Definition of Source Timers . . . . . . . . . . . . . 43 | 7.3. MLDv2 Source-Specific Forwarding Rules | |||
7.3. MLDv2 Source Specific Forwarding Rules . . . . . . . . . 45 | 7.4. Action on Reception of Reports | |||
7.4. Action on Reception of Reports . . . . . . . . . . . . . 46 | 7.4.1. Reception of Current State Records | |||
7.4.1. Reception of Current State Records . . . . . . . . . 47 | ||||
7.4.2. Reception of Filter Mode Change and Source List Change | 7.4.2. Reception of Filter Mode Change and Source List Change | |||
Records . . . . . . . . . . . . . . . . . . . . . . . 48 | Records | |||
7.5. Switching Router Filter Modes . . . . . . . . . . . . . . 50 | 7.5. Switching Router Filter Modes | |||
7.6. Action on Reception of Queries . . . . . . . . . . . . . 51 | 7.6. Action on Reception of Queries | |||
7.6.1. Timer Updates . . . . . . . . . . . . . . . . . . . . 51 | 7.6.1. Timer Updates | |||
7.6.2. Querier Election . . . . . . . . . . . . . . . . . . 51 | 7.6.2. Querier Election | |||
7.6.3. Building and Sending Specific Queries . . . . . . . . 52 | 7.6.3. Building and Sending Specific Queries | |||
8. Interoperation with MLDv1 . . . . . . . . . . . . . . . . . . 53 | 8. Interoperation with MLDv1 | |||
8.1. Query Version Distinctions . . . . . . . . . . . . . . . 53 | 8.1. Query Version Distinctions | |||
8.2. Multicast Address Listener Behavior . . . . . . . . . . . 53 | 8.2. Multicast Address Listener Behavior | |||
8.2.1. In the Presence of MLDv1 Routers . . . . . . . . . . 53 | 8.2.1. In the Presence of MLDv1 Routers | |||
8.2.2. In the Presence of MLDv1 Multicast Address | 8.2.2. In the Presence of MLDv1 Multicast Address Listeners | |||
Listeners . . . . . . . . . . . . . . . . . . . . . . 54 | 8.3. Multicast Router Behavior | |||
8.3. Multicast Router Behavior . . . . . . . . . . . . . . . . 54 | 8.3.1. In the Presence of MLDv1 Routers | |||
8.3.1. In the Presence of MLDv1 Routers . . . . . . . . . . 54 | 8.3.2. In the Presence of MLDv1 Multicast Address Listeners | |||
8.3.2. In the Presence of MLDv1 Multicast Address | 9. List of Timers, Counters, and Their Default Values | |||
Listeners . . . . . . . . . . . . . . . . . . . . . . 55 | 9.1. Robustness Variable | |||
9. List of Timers, Counters, and their Default Values . . . . . 56 | 9.2. Query Interval | |||
9.1. Robustness Variable . . . . . . . . . . . . . . . . . . . 56 | 9.3. Query Response Interval | |||
9.2. Query Interval . . . . . . . . . . . . . . . . . . . . . 56 | 9.4. Multicast Address Listening Interval | |||
9.3. Query Response Interval . . . . . . . . . . . . . . . . . 57 | 9.5. Other Querier Present Timeout | |||
9.4. Multicast Address Listening Interval . . . . . . . . . . 57 | 9.6. Startup Query Interval | |||
9.5. Other Querier Present Timeout . . . . . . . . . . . . . . 57 | 9.7. Startup Query Count | |||
9.6. Startup Query Interval . . . . . . . . . . . . . . . . . 57 | 9.8. Last Listener Query Interval | |||
9.7. Startup Query Count . . . . . . . . . . . . . . . . . . . 57 | 9.9. Last Listener Query Count | |||
9.8. Last Listener Query Interval . . . . . . . . . . . . . . 57 | 9.10. Last Listener Query Time | |||
9.9. Last Listener Query Count . . . . . . . . . . . . . . . . 58 | 9.11. Unsolicited Report Interval | |||
9.10. Last Listener Query Time . . . . . . . . . . . . . . . . 58 | 9.12. Older Version Querier Present Timeout | |||
9.11. Unsolicited Report Interval . . . . . . . . . . . . . . . 58 | 9.13. Older Version Host Present Timeout | |||
9.12. Older Version Querier Present Timeout . . . . . . . . . . 58 | 9.14. Configuring Timers | |||
9.13. Older Version Host Present Timeout . . . . . . . . . . . 59 | 9.14.1. Robustness Variable | |||
9.14. Configuring timers . . . . . . . . . . . . . . . . . . . 59 | 9.14.2. Query Interval | |||
9.14.1. Robustness Variable . . . . . . . . . . . . . . . . 59 | 9.14.3. Maximum Response Delay | |||
9.14.2. Query Interval . . . . . . . . . . . . . . . . . . . 59 | 10. Security Considerations | |||
9.14.3. Maximum Response Delay . . . . . . . . . . . . . . . 59 | 10.1. Query Message | |||
10. Security Considerations . . . . . . . . . . . . . . . . . . . 60 | 10.2. Current State Report Messages | |||
10.1. Query Message . . . . . . . . . . . . . . . . . . . . . 61 | 10.3. State Change Report Messages | |||
10.2. Current State Report messages . . . . . . . . . . . . . 62 | 11. IANA Considerations | |||
10.3. State Change Report messages . . . . . . . . . . . . . . 62 | 12. References | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 62 | 12.1. Normative References | |||
12. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 62 | 12.2. Informative References | |||
13. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 63 | Appendix A. Design Rationale | |||
14. References . . . . . . . . . . . . . . . . . . . . . . . . . 63 | A.1. The Need for State Change Messages | |||
14.1. Normative References . . . . . . . . . . . . . . . . . . 63 | A.2. Host Suppression | |||
14.2. Informative References . . . . . . . . . . . . . . . . . 64 | A.3. Switching Router Filter Modes from EXCLUDE to INCLUDE | |||
Appendix A. Design Rationale . . . . . . . . . . . . . . . . . . 65 | Appendix B. Summary of Changes | |||
A.1. The Need for State Change Messages . . . . . . . . . . . 65 | B.1. MLDv1 | |||
A.2. Host Suppression . . . . . . . . . . . . . . . . . . . . 65 | B.2. Changes since RFC 3810 | |||
A.3. Switching router filter modes from EXCLUDE to INCLUDE . . 66 | Acknowledgments | |||
Appendix B. Summary of Changes . . . . . . . . . . . . . . . . . 66 | Contributors | |||
B.1. MLDv1 . . . . . . . . . . . . . . . . . . . . . . . . . . 66 | Author's Address | |||
B.2. Changes since RFC 3810 . . . . . . . . . . . . . . . . . 68 | ||||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 68 | ||||
1. Introduction | 1. Introduction | |||
The Multicast Listener Discovery Protocol (MLD) is used by IPv6 | The Multicast Listener Discovery (MLD) protocol is used by IPv6 | |||
routers to discover the presence of multicast listeners (i.e., nodes | routers to discover the presence of multicast listeners (i.e., nodes | |||
that wish to receive multicast packets) on their directly attached | that wish to receive multicast packets) on their directly attached | |||
links, and to discover specifically which multicast addresses are of | links and to discover specifically which multicast addresses are of | |||
interest to those neighboring nodes. Note that a multicast router | interest to those neighboring nodes. Note that a multicast router | |||
may itself be a listener of one or more multicast addresses; in this | may itself be a listener of one or more multicast addresses; in this | |||
case it performs both the "multicast router part" and the "multicast | case, it performs both the "multicast router part" and the "multicast | |||
address listener part" of the protocol, to collect the multicast | address listener part" of the protocol, to collect the multicast | |||
listener information needed by its multicast routing protocol on the | listener information needed by its multicast routing protocol on the | |||
one hand, and to inform itself and other neighboring multicast | one hand, and to inform itself and other neighboring multicast | |||
routers of its listening state on the other hand. | routers of its listening state on the other hand. | |||
This document specifies Version 2 of MLD. The previous version of | This document specifies version 2 of MLD. The previous version of | |||
MLD is specified in [RFC2710]. In this document we will refer to it | MLD is specified in [RFC2710]; in this document, we will refer to it | |||
as MLDv1. MLDv2 is a translation of the IGMPv3 protocol [RFC3376] | as "MLDv1". MLDv2 is a translation of IGMPv3 [RFC9776] for IPv6 | |||
for IPv6 semantics. | semantics. | |||
The MLDv2 protocol, when compared to MLDv1, adds support for "source | The MLDv2 protocol, when compared to MLDv1, adds support for "source | |||
filtering", i.e., the ability for a node to report interest in | filtering", i.e., the ability for a node to report interest in | |||
listening to packets only from specific source addresses, as required | listening to packets only from specific source addresses, as required | |||
to support Source-Specific Multicast [RFC3569], or from *all but* | to support Source-Specific Multicast (SSM) [RFC3569], or from *all | |||
specific source addresses, sent to a particular multicast address. | but* specific source addresses, sent to a particular multicast | |||
MLDv2 is designed to be interoperable with MLDv1. | address. MLDv2 is designed to be interoperable with MLDv1. | |||
This document uses SSM-aware to refer to systems that support Source- | This document uses "SSM-aware" to refer to systems that support SSM | |||
Specific Multicast (SSM) as defined in [RFC4607]. | as defined in [RFC4607]. | |||
This document obsoletes [RFC3810]. Appendix B.2 lists the main | This document obsoletes [RFC3810]. Appendix B.2 lists the main | |||
changes from [RFC3810]. | changes from [RFC3810]. | |||
1.1. Conventions Used in This Document | 1.1. Conventions Used in This Document | |||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and | |||
"OPTIONAL" in this document are to be interpreted as described in BCP | "OPTIONAL" in this document are to be interpreted as described in | |||
14 [RFC2119][RFC8174] when, and only when, they appear in all | BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. Protocol Overview | 2. Protocol Overview | |||
This section gives a brief description of the protocol operation. | This section gives a brief description of the protocol operation. | |||
The following sections present the protocol details. | The following sections present the protocol details. | |||
MLD is an asymmetric protocol; it specifies separate behaviors for | MLD is an asymmetric protocol; it specifies separate behaviors for | |||
multicast address listeners (i.e., hosts or routers that listen to | multicast address listeners (i.e., hosts or routers that listen to | |||
multicast packets) and multicast routers. The purpose of MLD is to | multicast packets) and multicast routers. The purpose of MLD is to | |||
skipping to change at page 6, line 15 ¶ | skipping to change at line 240 ¶ | |||
attached links, which multicast addresses and which sources have | attached links, which multicast addresses and which sources have | |||
interested listeners on that link. The information gathered by MLD | interested listeners on that link. The information gathered by MLD | |||
is provided to whichever multicast routing protocol is used by the | is provided to whichever multicast routing protocol is used by the | |||
router, in order to ensure that multicast packets are delivered to | router, in order to ensure that multicast packets are delivered to | |||
all links where there are listeners interested in such packets. | all links where there are listeners interested in such packets. | |||
Multicast routers only need to know that at least one node on an | Multicast routers only need to know that at least one node on an | |||
attached link is listening to packets for a particular multicast | attached link is listening to packets for a particular multicast | |||
address, from a particular source; a multicast router is not required | address, from a particular source; a multicast router is not required | |||
to individually keep track of the interests of each neighboring node. | to individually keep track of the interests of each neighboring node. | |||
(Nevertheless, see Appendix A.2 item 1 for discussion.) | (Nevertheless, see Appendix A.2, item 1 for discussion.) | |||
A multicast router performs the router part of the MLDv2 protocol | A multicast router performs the router part of the MLDv2 protocol | |||
(described in details in Section 7) on each of its directly attached | (described in detail in Section 7) on each of its directly attached | |||
links. If a multicast router has more than one interface connected | links. If a multicast router has more than one interface connected | |||
to the same link, it only needs to operate the protocol on one of | to the same link, it only needs to operate the protocol on one of | |||
those interfaces. The router behavior depends on whether there are | those interfaces. The router behavior depends on whether there are | |||
several multicast routers on the same subnet, or not. If that is the | several multicast routers on the same subnet, or not. If that is the | |||
case, a querier election mechanism (described in Section 7.6.2) is | case, a querier election mechanism (described in Section 7.6.2) is | |||
used to elect a single multicast router to be in Querier state. This | used to elect a single multicast router to be in Querier state. This | |||
router is called the Querier. All multicast routers on the subnet | router is called the "Querier". All multicast routers on the subnet | |||
listen to the messages sent by multicast address listeners, and | listen to the messages sent by multicast address listeners, and | |||
maintain the same multicast listening information state, so that they | maintain the same multicast listening information state, so that they | |||
can take over the querier role, should the present Querier fail. | can take over the querier role, should the present Querier fail. | |||
Nevertheless, only the Querier sends periodical or triggered query | Nevertheless, only the Querier sends periodical or triggered query | |||
messages on the subnet, as described in Section 7.1. | messages on the subnet, as described in Section 7.1. | |||
A multicast address listener performs the listener part of the MLDv2 | A multicast address listener performs the listener part of the MLDv2 | |||
protocol (described in details in Section 6) on all interfaces on | protocol (described in detail in Section 6) on all interfaces on | |||
which multicast reception is supported, even if more than one of | which multicast reception is supported, even if more than one of | |||
those interfaces are connected to the same link. | those interfaces are connected to the same link. | |||
2.1. Building Multicast Listening State on Multicast Address Listeners | 2.1. Building Multicast Listening State on Multicast Address Listeners | |||
Upper-layer protocols and applications that run on a multicast | Upper-layer protocols and applications that run on a multicast | |||
address listener node use specific service interface calls (described | address listener node use specific service interface calls (described | |||
in Section 3) to ask the IP layer to enable or disable reception of | in Section 3) to ask the IP layer to enable or disable reception of | |||
packets sent to specific multicast addresses. The node keeps | packets sent to specific multicast addresses. The node keeps | |||
Multicast Address Listening state for each socket on which the | Multicast Address Listening state for each socket on which the | |||
skipping to change at page 7, line 8 ¶ | skipping to change at line 281 ¶ | |||
maintain or compute multicast listening state for each of its | maintain or compute multicast listening state for each of its | |||
interfaces (Section 4.2). Conceptually, that state consists of a set | interfaces (Section 4.2). Conceptually, that state consists of a set | |||
of records, with each record containing an IPv6 multicast address, a | of records, with each record containing an IPv6 multicast address, a | |||
filter mode, and a source list. The filter mode may be either | filter mode, and a source list. The filter mode may be either | |||
INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to | INCLUDE or EXCLUDE. In INCLUDE mode, reception of packets sent to | |||
the specified multicast address is enabled only from the source | the specified multicast address is enabled only from the source | |||
addresses listed in the source list. In EXCLUDE mode, reception of | addresses listed in the source list. In EXCLUDE mode, reception of | |||
packets sent to the given multicast address is enabled from all | packets sent to the given multicast address is enabled from all | |||
source addresses except those listed in the source list. | source addresses except those listed in the source list. | |||
At most one record per multicast address exists for a given | At most, one record per multicast address exists for a given | |||
interface. This per-interface state is derived from the per-socket | interface. This per-interface state is derived from the per-socket | |||
state, but may differ from it when different sockets have differing | state, but it may differ from the per-socket state when different | |||
filter modes and/or source lists for the same multicast address and | sockets have differing filter modes and/or source lists for the same | |||
interface. After a multicast packet has been accepted from an | multicast address and interface. After a multicast packet has been | |||
interface by the IP layer, its subsequent delivery to the application | accepted from an interface by the IP layer, its subsequent delivery | |||
connected to a particular socket depends on the multicast listening | to the application connected to a particular socket depends on the | |||
state of that socket (and possibly also on other conditions, such as | multicast listening state of that socket (and possibly also on other | |||
what transport-layer port the socket is bound to). Note that MLDv2 | conditions, such as what transport-layer port the socket is bound | |||
messages are not subject to source filtering and must always be | to). Note that MLDv2 messages are not subject to source filtering | |||
processed by hosts and routers. | and must always be processed by hosts and routers. | |||
2.2. Exchanging Messages between the Querier and the Listening Nodes | 2.2. Exchanging Messages between the Querier and the Listening Nodes | |||
There are three types of MLDv2 query messages: General Queries, | There are three types of MLDv2 query messages: General Queries, | |||
Multicast Address Specific Queries, and Multicast Address and Source | Multicast Address Specific Queries, and Multicast Address and Source | |||
Specific Queries. The Querier periodically sends General Queries, to | Specific Queries. The Querier periodically sends General Queries, to | |||
learn multicast address listener information from an attached link. | learn multicast address listener information from an attached link. | |||
These queries are used to build and refresh the Multicast Address | These queries are used to build and refresh the Multicast Address | |||
Listener state inside all multicast routers on the link. | Listener state inside all multicast routers on the link. | |||
Nodes respond to these queries by reporting their per-interface | Nodes respond to these queries by reporting their per-interface | |||
Multicast Address Listening state, through Current State Report | Multicast Address Listening state through Current State Report | |||
messages sent to a specific multicast address all MLDv2 routers on | messages sent to a specific multicast address that all MLDv2 routers | |||
the link listen to. On the other hand, if the listening state of a | on the link listen to. On the other hand, if the listening state of | |||
node changes, the node immediately reports these changes through a | a node changes, the node immediately reports these changes through a | |||
State Change Report message. The State Change Report contains either | State Change Report message. The State Change Report contains either | |||
Filter Mode Change records, Source List Change records, or records of | Filter Mode Change Records, Source List Change Records, or records of | |||
both types. A detailed description of the report messages is | both types. A detailed description of the report messages is | |||
presented in Section 5.2.13. | presented in Section 5.2.13. | |||
Both router and listener state changes are mainly triggered by the | Both router and listener state changes are mainly triggered by the | |||
expiration of a specific timer, or the reception of an MLD message | expiration of a specific timer or the reception of an MLD message | |||
(listener state change can be also triggered by the invocation of a | (listener state change can be also triggered by the invocation of a | |||
service interface call). Therefore, to enhance protocol robustness, | service interface call). Therefore, to enhance protocol robustness, | |||
in spite of the possible unreliability of message exchanges, messages | in spite of the possible unreliability of message exchanges, messages | |||
are retransmitted several times. Furthermore, timers are set so as | are retransmitted several times. Furthermore, timers are set so as | |||
to take into account the possible message losses, and to wait for | to take into account the possible message losses and to wait for | |||
retransmissions. | retransmissions. | |||
Periodical General Queries and Current State Reports do not apply | Periodical General Queries and Current State Reports do not apply | |||
this rule, in order not to overload the link; it is assumed that in | this rule, in order to not overload the link; it is assumed that in | |||
general these messages do not generate state changes, their main | general, these messages do not generate state changes as their main | |||
purpose being to refresh existing state. Thus, even if one such | purpose is to refresh existing state. Thus, even if one such message | |||
message is lost, the corresponding state will be refreshed during the | is lost, the corresponding state will be refreshed during the next | |||
next reporting period. | reporting period. | |||
As opposed to Current State Reports, State Change Reports are | As opposed to Current State Reports, State Change Reports are | |||
retransmitted several times, in order to avoid them being missed by | retransmitted several times, in order to avoid them being missed by | |||
one or more multicast routers. The number of retransmissions depends | one or more multicast routers. The number of retransmissions depends | |||
on the so-called Robustness Variable. This variable allows tuning | on the so-called Robustness Variable. This variable allows tuning | |||
the protocol according to the expected packet loss on a link. If a | the protocol according to the expected packet loss on a link. If a | |||
link is expected to be lossy (e.g., a wireless connection), the value | link is expected to be lossy (e.g., a wireless connection), the value | |||
of the Robustness Variable may be increased. MLD is robust to | of the Robustness Variable may be increased. MLD is robust to | |||
[Robustness Variable]-1 packet losses. This document recommends a | [Robustness Variable]-1 packet losses. This document recommends a | |||
default value of 2 for the Robustness Variable (see Section 9.1). | default value of 2 for the Robustness Variable (see Section 9.1). | |||
skipping to change at page 8, line 51 ¶ | skipping to change at line 367 ¶ | |||
specific set of sources, or not. Section 5.1.13 describes each query | specific set of sources, or not. Section 5.1.13 describes each query | |||
in more detail. | in more detail. | |||
Both Multicast Address Specific Queries and Multicast Address and | Both Multicast Address Specific Queries and Multicast Address and | |||
Source Specific Queries are only sent in response to State Change | Source Specific Queries are only sent in response to State Change | |||
Reports, never in response to Current State Reports. This | Reports, never in response to Current State Reports. This | |||
distinction between the two types of reports is needed to avoid the | distinction between the two types of reports is needed to avoid the | |||
router treating all Multicast Listener Reports as potential changes | router treating all Multicast Listener Reports as potential changes | |||
in state. By doing so, the fast leave mechanism of MLDv2, described | in state. By doing so, the fast leave mechanism of MLDv2, described | |||
in more detail in Section 2.3, might not be effective if a State | in more detail in Section 2.3, might not be effective if a State | |||
Change Report is lost, and only the following Current State Report is | Change Report is lost and only the following Current State Report is | |||
received by the router. Nevertheless, it avoids an increased | received by the router. Nevertheless, it avoids an increased | |||
processing at the router and it reduces the MLD traffic on the link. | processing at the router, and it reduces the MLD traffic on the link. | |||
More details on the necessity of distinguishing between the two | More details on the necessity of distinguishing between the two | |||
report types can be found in Appendix A.1. | report types can be found in Appendix A.1. | |||
Nodes respond to the above queries through Current State Reports, | Nodes respond to the above queries through Current State Reports that | |||
that contain their per-interface Multicast Address Listening state | contain their per-interface Multicast Address Listening state only | |||
only for the multicast addresses (or sources) being queried. | for the multicast addresses (or sources) being queried. | |||
As stated earlier, in order to ensure protocol robustness, all the | As stated earlier, in order to ensure protocol robustness, all the | |||
queries, except the periodical General Queries, are retransmitted | queries, except the periodical General Queries, are retransmitted | |||
several times within a given time interval. The number of | several times within a given time interval. The number of | |||
retransmissions depends on the Robustness Variable. If, while | retransmissions depends on the Robustness Variable. If, while | |||
scheduling new queries, there are pending queries to be retransmitted | scheduling new queries, there are pending queries to be retransmitted | |||
for the same multicast address, the new queries and the pending | for the same multicast address, the new queries and the pending | |||
queries have to be merged. In addition, host reports received for a | queries have to be merged. In addition, host reports received for a | |||
multicast address with pending queries may affect the contents of | multicast address with pending queries may affect the contents of | |||
those queries. The process of building and maintaining the state of | those queries. The process of building and maintaining the state of | |||
pending queries is presented in Section 7.6.3. | pending queries is presented in Section 7.6.3. | |||
Protocol robustness is also enhanced through the use of the S flag | Protocol robustness is also enhanced through the use of the S flag | |||
(Suppress Router-Side Processing). As described above, when a | (Suppress Router-Side Processing). As described above, when a | |||
Multicast Address Specific or a Multicast Address and Source Specific | Multicast Address Specific or a Multicast Address and Source Specific | |||
Query is sent by the Querier, a number of retransmissions of the | Query is sent by the Querier, a number of retransmissions of the | |||
query are scheduled. In the original (first) query the S flag is | query are scheduled. In the original (first) query, the S flag is | |||
clear. When the Querier sends this query, it lowers the timers for | clear. When the Querier sends this query, it lowers the timers for | |||
the concerned multicast address (or source) to a given value; | the concerned multicast address (or source) to a given value; | |||
similarly, any non-querier multicast router that receives the query | similarly, any non-querier multicast router that receives the query | |||
lowers its timers in the same way. Nevertheless, while waiting for | lowers its timers in the same way. Nevertheless, while waiting for | |||
the next scheduled queries to be sent, the Querier may receive a | the next scheduled queries to be sent, the Querier may receive a | |||
report that updates the timers. The scheduled queries still have to | report that updates the timers. The scheduled queries still have to | |||
be sent, in order to ensure that a non-querier router keeps its state | be sent, in order to ensure that a non-querier router keeps its state | |||
synchronized with the current Querier (the non-querier router might | synchronized with the current Querier (the non-querier router might | |||
have missed the first query). Nevertheless, the timers should not be | have missed the first query). Nevertheless, the timers should not be | |||
lowered again, as a valid answer was already received. Therefore, in | lowered again, as a valid answer was already received. Therefore, in | |||
subsequent queries the Querier sets the S flag. | subsequent queries, the Querier sets the S flag. | |||
2.3. Building Multicast Address Listener State on Multicast Routers | 2.3. Building Multicast Address Listener State on Multicast Routers | |||
Multicast routers that implement MLDv2 (whether they are in Querier | Multicast routers that implement MLDv2 (whether they are in Querier | |||
state or not) keep state per multicast address per attached link. | state or not) keep state per multicast address per attached link. | |||
This multicast address listener state consists of a Filter Mode, a | This multicast address listener state consists of a Filter Mode, a | |||
Filter Timer, and a Source List, with a timer associated to each | Filter Timer, and a Source List, with a timer associated to each | |||
source from the list. The Filter Mode is used to summarize the total | source from the list. The Filter Mode is used to summarize the total | |||
listening state of a multicast address to a minimum set, such that | listening state of a multicast address to a minimum set, such that | |||
all nodes' listening states are respected. The Filter Mode may | all nodes' listening states are respected. The Filter Mode may | |||
change in response to the reception of particular types of report | change in response to the reception of particular types of report | |||
messages, or when certain timer conditions occur. | messages or when certain timer conditions occur. | |||
A router is in INCLUDE mode for a specific multicast address on a | A router is in INCLUDE mode for a specific multicast address on a | |||
given interface if all the listeners on the link interested in that | given interface if all the listeners on the link interested in that | |||
address are in INCLUDE mode. The router state is represented through | address are in INCLUDE mode. The router state is represented through | |||
the notation INCLUDE (A), where A is a list of sources, called the | the notation INCLUDE (A), where A is a list of sources, called the | |||
"Include List". The Include List is the set of sources that one or | "Include List". The Include List is the set of sources that one or | |||
more listeners on the link have requested to receive. All the | more listeners on the link have requested to receive. All the | |||
sources from the Include List will be forwarded by the router. Any | sources from the Include List will be forwarded by the router. Any | |||
other source that is not in the Include List will be blocked by the | other source that is not in the Include List will be blocked by the | |||
router. | router. | |||
skipping to change at page 10, line 34 ¶ | skipping to change at line 446 ¶ | |||
scheme in MLDv2; it is also based on the use of source timers. When | scheme in MLDv2; it is also based on the use of source timers. When | |||
a node in INCLUDE mode expresses its desire to stop listening to a | a node in INCLUDE mode expresses its desire to stop listening to a | |||
specific source, all the multicast routers on the link lower their | specific source, all the multicast routers on the link lower their | |||
timers for that source to a given value. The Querier then sends a | timers for that source to a given value. The Querier then sends a | |||
Multicast Address and Source Specific Query, to verify whether there | Multicast Address and Source Specific Query, to verify whether there | |||
are other listeners for that source on the link, or not. If a report | are other listeners for that source on the link, or not. If a report | |||
that includes this source is received before the timer expiration, | that includes this source is received before the timer expiration, | |||
all the multicast routers on the link update the source timer. If | all the multicast routers on the link update the source timer. If | |||
not, the source is deleted from the Include List. The handling of | not, the source is deleted from the Include List. The handling of | |||
the Include List, according to the received reports, is detailed in | the Include List, according to the received reports, is detailed in | |||
Section 7.4.1 and Section 7.4.2. | Sections 7.4.1 and 7.4.2. | |||
A router is in EXCLUDE mode for a specific multicast address on a | A router is in EXCLUDE mode for a specific multicast address on a | |||
given interface if there is at least one listener in EXCLUDE mode for | given interface if there is at least one listener in EXCLUDE mode for | |||
that address on the link. When the first report is received from | that address on the link. When the first report is received from | |||
such a listener, the router sets the Filter Timer that corresponds to | such a listener, the router sets the Filter Timer that corresponds to | |||
that address. This timer is reset each time an EXCLUDE mode listener | that address. This timer is reset each time an EXCLUDE mode listener | |||
confirms its listening state through a Current State Report. The | confirms its listening state through a Current State Report. The | |||
timer is also updated when a listener, formerly in INCLUDE mode, | timer is also updated when a listener, formerly in INCLUDE mode, | |||
announces its filter mode change through a State Change Report | announces its filter mode change through a State Change Report | |||
message. If the Filter Timer expires, it means that there are no | message. If the Filter Timer expires, it means that there are no | |||
more listeners in EXCLUDE mode on the link. In this case, the router | more listeners in EXCLUDE mode on the link. In this case, the router | |||
switches back to INCLUDE mode for that multicast address. | switches back to INCLUDE mode for that multicast address. | |||
When the router is in EXCLUDE mode, the router state is represented | When the router is in EXCLUDE mode, the router state is represented | |||
by the notation EXCLUDE (X,Y), where X is called the "Requested List" | by the notation EXCLUDE (X,Y), where X is called the "Requested List" | |||
and Y is called the "Exclude List". All sources, except those from | and Y is called the "Exclude List". All sources, except those from | |||
the Exclude List, will be forwarded by the router. The Requested | the Exclude List, will be forwarded by the router. The Requested | |||
List has no effect on forwarding. Nevertheless, the router has to | List has no effect on forwarding. Nevertheless, the router has to | |||
maintain the Requested List for two reasons: | maintain the Requested List for two reasons: | |||
* To keep track of sources that listeners in INCLUDE mode listen to. | 1. To keep track of sources that listeners in INCLUDE mode listen | |||
This is necessary to assure a seamless transition of the router to | to. This is necessary to assure a seamless transition of the | |||
INCLUDE mode, when there is no listener in EXCLUDE mode left. | router to INCLUDE mode, when there is no listener in EXCLUDE mode | |||
This transition should not interrupt the flow of traffic to | left. This transition should not interrupt the flow of traffic | |||
listeners in INCLUDE mode for that multicast address. Therefore, | to listeners in INCLUDE mode for that multicast address. | |||
at the time of the transition, the Requested List should contain | Therefore, at the time of the transition, the Requested List | |||
the set of sources that nodes in INCLUDE mode have explicitly | should contain the set of sources that nodes in INCLUDE mode have | |||
requested. | explicitly requested. | |||
When the router switches to INCLUDE mode, the sources in the | When the router switches to INCLUDE mode, the sources in the | |||
Requested List are moved to the Include List, and the Exclude List | Requested List are moved to the Include List, and the Exclude | |||
is deleted. Before switching, the Requested List can contain an | List is deleted. Before switching, the Requested List can | |||
inexact guess of the sources listeners in INCLUDE mode listen to - | contain an inexact guess of the sources listeners in INCLUDE mode | |||
might be too large or too small. These inexactitudes are due to | listen to, which might be too large or too small. These | |||
the fact that the Requested List is also used for fast blocking | inexactitudes are due to the fact that the Requested List is also | |||
purposes, as described below. If such a fast blocking is | used for fast blocking purposes, as described below. If such a | |||
required, some sources may be deleted from the Requested List (as | fast blocking is required, some sources may be deleted from the | |||
shown in Section 7.4.1 and Section 7.4.2) in order to reduce | Requested List (as shown in Sections 7.4.1 and 7.4.2) in order to | |||
router state. Nevertheless, in each such case the Filter Timer is | reduce router state. Nevertheless, in each such case, the Filter | |||
updated as well. Therefore, listeners in INCLUDE mode will have | Timer is updated as well. Therefore, listeners in INCLUDE mode | |||
enough time, before an eventual switching, to reconfirm their | will have enough time, before an eventual switching, to reconfirm | |||
interest in the eliminated source(s), and rebuild the Requested | their interest in the eliminated source(s) and rebuild the | |||
List accordingly. The protocol ensures that when a switch to | Requested List accordingly. The protocol ensures that when a | |||
INCLUDE mode occurs, the Requested List will be accurate. Details | switch to INCLUDE mode occurs, the Requested List will be | |||
about the transition of the router to INCLUDE mode are presented | accurate. Details about the transition of the router to INCLUDE | |||
in Appendix A.3. | mode are presented in Appendix A.3. | |||
* To allow the fast blocking of previously unblocked sources. If | 2. To allow the fast blocking of previously unblocked sources. If | |||
the router receives a report that contains such a request, the | the router receives a report that contains such a request, the | |||
concerned sources are added to the Requested List. Their timers | concerned sources are added to the Requested List. Their timers | |||
are set to a given small value, and a Multicast Address and Source | are set to a given small value, and a Multicast Address and | |||
Specific Query is sent by the Querier, to check whether there are | Source Specific Query is sent by the Querier, to check whether | |||
nodes on the link still interested in those sources, or not. If | there are nodes on the link still interested in those sources, or | |||
no node announces its interest in receiving those specific source, | not. If no node announces its interest in receiving those | |||
the timers of those sources expire. Then, the sources are moved | specific sources, the timers of those sources expire. Then, the | |||
from the Requested List to the Exclude List. From then on, the | sources are moved from the Requested List to the Exclude List. | |||
sources will be blocked by the router. | From then on, the sources will be blocked by the router. | |||
The handling of the EXCLUDE mode router state, according to the | The handling of the EXCLUDE mode router state, according to the | |||
received reports, is detailed in Section 7.4.1 and Section 7.4.2. | received reports, is detailed in Sections 7.4.1 and 7.4.2. | |||
Both the MLDv2 router and listener behaviors described in this | Both the MLDv2 router and listener behaviors described in this | |||
document were defined to ensure backward interoperability with MLDv1 | document were defined to ensure backward interoperability with MLDv1 | |||
hosts and routers. Interoperability issues are detailed in | hosts and routers. Interoperability issues are detailed in | |||
Section 8. | Section 8. | |||
3. The Service Interface for Requesting IP Multicast Reception | 3. The Service Interface for Requesting IP Multicast Reception | |||
Within an IP system, there is (at least conceptually) a service | Within an IP system, there is (at least conceptually) a service | |||
interface used by upper-layer protocols or application programs to | interface used by upper-layer protocols or application programs to | |||
skipping to change at page 12, line 25 ¶ | skipping to change at line 528 ¶ | |||
specific IP multicast addresses. In order to take full advantage of | specific IP multicast addresses. In order to take full advantage of | |||
the capabilities of MLDv2, a node's IP service interface must support | the capabilities of MLDv2, a node's IP service interface must support | |||
the following operation: | the following operation: | |||
IPv6MulticastListen ( socket, interface, IPv6 multicast-address, | IPv6MulticastListen ( socket, interface, IPv6 multicast-address, | |||
filter-mode, source-list ) | filter-mode, source-list ) | |||
where: | where: | |||
* "socket" is an implementation-specific parameter used to | * "socket" is an implementation-specific parameter used to | |||
distinguish among different requesting entities (e.g., programs, | distinguish among different requesting entities (e.g., programs | |||
processes) within the node; the socket parameter of BSD Unix | and processes) within the node; the socket parameter of BSD Unix | |||
system calls is a specific example. | system calls is a specific example. | |||
* "interface" is a local identifier of the network interface on | * "interface" is a local identifier of the network interface on | |||
which reception of the specified multicast address is to be | which reception of the specified multicast address is to be | |||
enabled or disabled. Interfaces may be physical (e.g., an | enabled or disabled. Interfaces may be physical (e.g., an | |||
Ethernet interface) or virtual (e.g., the endpoint of a Frame | Ethernet interface) or virtual (e.g., the endpoint of a Frame | |||
Relay virtual circuit or an IP-in-IP "tunnel"). An implementation | Relay virtual circuit or an IP-in-IP "tunnel"). An implementation | |||
may allow a special "unspecified" value to be passed as the | may allow a special "unspecified" value to be passed as the | |||
interface parameter, in which case the request would apply to the | interface parameter, in which case the request would apply to the | |||
"primary" or "default" interface of the node (perhaps established | "primary" or "default" interface of the node (perhaps established | |||
skipping to change at page 13, line 20 ¶ | skipping to change at line 571 ¶ | |||
interface SHOULD return an error. | interface SHOULD return an error. | |||
For a given combination of socket, interface, and IPv6 multicast | For a given combination of socket, interface, and IPv6 multicast | |||
address, only a single filter mode and source list can be in effect | address, only a single filter mode and source list can be in effect | |||
at any one time. Nevertheless, either the filter mode or the source | at any one time. Nevertheless, either the filter mode or the source | |||
list, or both, may be changed by subsequent IPv6MulticastListen | list, or both, may be changed by subsequent IPv6MulticastListen | |||
requests that specify the same socket, interface, and IPv6 multicast | requests that specify the same socket, interface, and IPv6 multicast | |||
address. Each subsequent request completely replaces any earlier | address. Each subsequent request completely replaces any earlier | |||
request for the given socket, interface, and multicast address. | request for the given socket, interface, and multicast address. | |||
The MLDv1 protocol did not support source filters, and had a simpler | The MLDv1 protocol did not support source filters and had a simpler | |||
service interface; it consisted of Start Listening and Stop Listening | service interface; it consisted of Start Listening and Stop Listening | |||
operations to enable and disable listening to a given multicast | operations to enable and disable listening to a given multicast | |||
address (from all sources) on a given interface. The equivalent | address (from all sources) on a given interface. The equivalent | |||
operations in the new service interface are as follows: | operations in the new service interface are as follows. | |||
The Start Listening operation is equivalent to: | The Start Listening operation is equivalent to: | |||
IPv6MulticastListen ( socket, interface, IPv6 multicast address, | IPv6MulticastListen ( socket, interface, IPv6 multicast address, | |||
EXCLUDE, {} ) | EXCLUDE, {} ) | |||
and the Stop Listening operation is equivalent to: | and the Stop Listening operation is equivalent to: | |||
IPv6MulticastListen ( socket, interface, IPv6 multicast address, | IPv6MulticastListen ( socket, interface, IPv6 multicast address, | |||
INCLUDE, {} ) | INCLUDE, {} ) | |||
skipping to change at page 14, line 26 ¶ | skipping to change at line 626 ¶ | |||
4.2. Per-Interface State | 4.2. Per-Interface State | |||
In addition to the per-socket multicast listening state, a node must | In addition to the per-socket multicast listening state, a node must | |||
also maintain or compute multicast listening state for each of its | also maintain or compute multicast listening state for each of its | |||
interfaces. That state conceptually consists of a set of records of | interfaces. That state conceptually consists of a set of records of | |||
the form: | the form: | |||
(IPv6 multicast address, filter mode, source list) | (IPv6 multicast address, filter mode, source list) | |||
At most one record per multicast address exists for a given | At most, one record per multicast address exists for a given | |||
interface. This per-interface state is derived from the per-socket | interface. This per-interface state is derived from the per-socket | |||
state, but may differ from it when different sockets have differing | state, but it may differ from the per-socket state when different | |||
filter modes and/or source lists for the same multicast address and | sockets have differing filter modes and/or source lists for the same | |||
interface. For example, suppose one application or process invokes | multicast address and interface. For example, suppose one | |||
the following operation on socket s1: | application or process invokes the following operation on socket s1: | |||
IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c} ) | IPv6MulticastListen ( s1, i, m, INCLUDE, {a, b, c} ) | |||
requesting reception on interface i of packets sent to multicast | requesting reception on interface i of packets sent to multicast | |||
address m, only if they come from the sources a, b, or c. Suppose | address m, only if they come from the sources a, b, or c. Suppose | |||
another application or process invokes the following operation on | another application or process invokes the following operation on | |||
socket s2: | socket s2: | |||
IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d} ) | IPv6MulticastListen ( s2, i, m, INCLUDE, {b, c, d} ) | |||
skipping to change at page 15, line 34 ¶ | skipping to change at line 683 ¶ | |||
interface. Considering all socket records that contain the same | interface. Considering all socket records that contain the same | |||
(interface, IPv6 multicast address) pair, | (interface, IPv6 multicast address) pair, | |||
* if any such record has a filter mode of EXCLUDE, then the filter | * 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 | mode of the interface record is EXCLUDE, and the source list of | |||
the interface record is the intersection of the source lists of | the interface record is the intersection of the source lists of | |||
all socket records in EXCLUDE mode, minus those source addresses | all socket records in EXCLUDE mode, minus those source addresses | |||
that appear in any socket record in INCLUDE mode. For example, if | that appear in any socket record in INCLUDE mode. For example, if | |||
the socket records for multicast address m on interface i are: | the socket records for multicast address m on interface i are: | |||
from socket s1: ( i, m, EXCLUDE, {a, b, c, d} ) | - from socket s1: ( i, m, EXCLUDE, {a, b, c, d} ) | |||
from socket s2: ( i, m, EXCLUDE, {b, c, d, e} ) | - from socket s2: ( i, m, EXCLUDE, {b, c, d, e} ) | |||
from socket s3: ( i, m, INCLUDE, {d, e, f} ) | - from socket s3: ( i, m, INCLUDE, {d, e, f} ) | |||
then the corresponding interface record on interface i is: | then the corresponding interface record on interface i is: | |||
( m, EXCLUDE, {b, c} ) | - ( m, EXCLUDE, {b, c} ) | |||
If a fourth socket is added, such as: | If a fourth socket is added, such as: | |||
From socket s4: ( i, m, EXCLUDE, {} ) | - From socket s4: ( i, m, EXCLUDE, {} ) | |||
then the interface record becomes: | then the interface record becomes: | |||
( m, EXCLUDE, {} ) | - ( m, EXCLUDE, {} ) | |||
* if all such records have a filter mode of INCLUDE, then the filter | * 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 | 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 | the interface record is the union of the source lists of all the | |||
socket records. For example, if the socket records for multicast | socket records. For example, if the socket records for multicast | |||
address m on interface i are: | address m on interface i are: | |||
from socket s1: ( i, m, INCLUDE, {a, b, c} ) | - from socket s1: ( i, m, INCLUDE, {a, b, c} ) | |||
from socket s2: ( i, m, INCLUDE, {b, c, d} ) | - from socket s2: ( i, m, INCLUDE, {b, c, d} ) | |||
from socket s3: ( i, m, INCLUDE, {e, f} ) | - from socket s3: ( i, m, INCLUDE, {e, f} ) | |||
then the corresponding interface record on interface i is: | then the corresponding interface record on interface i is: | |||
( m, INCLUDE, {a, b, c, d, e, f} ) | - ( m, INCLUDE, {a, b, c, d, e, f} ) | |||
An implementation MUST NOT use an EXCLUDE interface record for a | An implementation MUST NOT use an EXCLUDE interface record for a | |||
multicast address if all sockets for this multicast address are in | multicast address if all sockets for this multicast address are in | |||
INCLUDE state. If system resource limits are reached when a per- | INCLUDE state. If system resource limits are reached when a per- | |||
interface state source list is calculated, an error MUST be | interface state source list is calculated, an error MUST be | |||
returned to the application which requested the operation. | returned to the application which requested the operation. | |||
The above rules for deriving the per-interface state are | The above rules for deriving the per-interface state are | |||
(re)evaluated whenever an IPv6MulticastListen invocation modifies the | (re)evaluated whenever an IPv6MulticastListen invocation modifies the | |||
per-socket state by adding, deleting, or modifying a per-socket state | per-socket state by adding, deleting, or modifying a per-socket state | |||
skipping to change at page 16, line 46 ¶ | skipping to change at line 742 ¶ | |||
subset of ICMPv6 messages, and MLDv2 messages are identified in IPv6 | subset of ICMPv6 messages, and MLDv2 messages are identified in IPv6 | |||
packets by a preceding Next Header value of 58. All MLDv2 messages | packets by a preceding Next Header value of 58. All MLDv2 messages | |||
described in this document MUST be sent with a link-local IPv6 Source | described in this document MUST be sent with a link-local IPv6 Source | |||
Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option | Address, an IPv6 Hop Limit of 1, and an IPv6 Router Alert option | |||
[RFC2711] in a Hop-by-Hop Options header. (The Router Alert option | [RFC2711] in a Hop-by-Hop Options header. (The Router Alert option | |||
is necessary to cause routers to examine MLDv2 messages sent to IPv6 | is necessary to cause routers to examine MLDv2 messages sent to IPv6 | |||
multicast addresses in which the routers themselves have no | multicast addresses in which the routers themselves have no | |||
interest.) MLDv2 Reports can be sent with the source address set to | interest.) MLDv2 Reports can be sent with the source address set to | |||
the unspecified address [RFC4291], if a valid link-local IPv6 source | the unspecified address [RFC4291], if a valid link-local IPv6 source | |||
address has not been acquired yet for the sending interface. (See | address has not been acquired yet for the sending interface. (See | |||
Section 5.2.14. for details.) | Section 5.2.14 for details.) | |||
There are two MLD message types of concern to the MLDv2 protocol | There are two MLD message types of concern to the MLDv2 protocol | |||
described in this document: | described in this document: | |||
* Multicast Listener Query (Type = decimal 130) | * Multicast Listener Query (Type = decimal 130) | |||
* Version 2 Multicast Listener Report (Type = decimal 143). See | * Version 2 Multicast Listener Report (Type = decimal 143). See | |||
Section 11 for IANA considerations. | Section 11 for IANA considerations. | |||
To assure the interoperability with nodes that implement MLDv1 (see | To assure the interoperability with nodes that implement MLDv1 (see | |||
Section 8), an implementation of MLDv2 must also support the | Section 8), an implementation of MLDv2 must also support the | |||
following two message types: | following two message types: | |||
* Version 1 Multicast Listener Report (Type = decimal 131) [RFC2710] | * Version 1 Multicast Listener Report (Type = decimal 131) [RFC2710] | |||
* Version 1 Multicast Listener Done (Type = decimal 132) [RFC2710] | * Version 1 Multicast Listener Done (Type = decimal 132) [RFC2710] | |||
skipping to change at page 17, line 26 ¶ | skipping to change at line 771 ¶ | |||
types may be used by newer versions or extensions of MLD, by | types may be used by newer versions or extensions of MLD, by | |||
multicast routing protocols, or for other uses. | multicast routing protocols, or for other uses. | |||
In this document, unless otherwise qualified, the capitalized words | In this document, unless otherwise qualified, the capitalized words | |||
"Query" and "Report" refer to MLD Multicast Listener Queries and MLD | "Query" and "Report" refer to MLD Multicast Listener Queries and MLD | |||
Version 2 Multicast Listener Reports, respectively. | Version 2 Multicast Listener Reports, respectively. | |||
5.1. Multicast Listener Query Message | 5.1. Multicast Listener Query Message | |||
Multicast Listener Queries are sent by multicast routers in Querier | Multicast Listener Queries are sent by multicast routers in Querier | |||
State to query the multicast listening state of neighboring | state to query the multicast listening state of neighboring | |||
interfaces. Queries have the following format: | interfaces. Queries have the following format: | |||
0 1 2 3 | 0 1 2 3 | |||
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Type = 130 | Code | Checksum | | | Type = 130 | Code | Checksum | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| Maximum Response Code | Reserved | | | Maximum Response Code | Reserved | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
skipping to change at page 19, line 7 ¶ | skipping to change at line 821 ¶ | |||
* * | * * | |||
| | | | | | |||
* Source Address [N] * | * Source Address [N] * | |||
| | | | | | |||
* * | * * | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
5.1.1. Code | 5.1.1. Code | |||
Initialized to zero by the sender; ignored by receivers. | The Code field is initialized to zero by the sender and ignored by | |||
receivers. | ||||
5.1.2. Checksum | 5.1.2. Checksum | |||
The standard ICMPv6 checksum; it covers the entire MLDv2 message, | The Checksum field is the standard ICMPv6 checksum; it covers the | |||
plus a "pseudo-header" of IPv6 header fields [RFC4443]. For | entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields | |||
computing the checksum, the Checksum field is set to zero. When a | [RFC4443]. For computing the checksum, the Checksum field is set to | |||
packet is received, the checksum MUST be verified before processing | zero. When a packet is received, the checksum MUST be verified | |||
it. | before processing it. | |||
5.1.3. Maximum Response Code | 5.1.3. Maximum Response Code | |||
The Maximum Response Code field specifies the maximum time allowed | The Maximum Response Code field specifies the maximum time allowed | |||
before sending a responding Report. The actual time allowed, called | before sending a responding Report. The actual time allowed, called | |||
the Maximum Response Delay, is represented in units of milliseconds, | the "Maximum Response Delay", is represented in units of milliseconds | |||
and is derived from the Maximum Response Code as follows: | and is derived from the Maximum Response Code as follows: | |||
If Maximum Response Code < 32768, Maximum Response Delay = Maximum | * If Maximum Response Code < 32768, Maximum Response Delay = Maximum | |||
Response Code | Response Code. | |||
If Maximum Response Code >=32768, Maximum Response Code represents a | * If Maximum Response Code >=32768, Maximum Response Code represents | |||
floating-point value as follows: | a floating-point value as follows: | |||
0 1 2 3 4 5 6 7 8 9 A B C D E F | 0 1 2 3 4 5 6 7 8 9 A B C D E F | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
|1| exp | mant | | |1| exp | mant | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Maximum Response Delay = (mant | 0x1000) << (exp+3) | Maximum Response Delay = (mant | 0x1000) << (exp+3) | |||
Small values of Maximum Response Delay allow MLDv2 routers to tune | Small values of Maximum Response Delay allow MLDv2 routers to tune | |||
the "leave latency" (the time between the moment the last node on a | 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 | link ceases to listen to a specific multicast address and the moment | |||
the routing protocol is notified that there are no more listeners for | the routing protocol is notified that there are no more listeners for | |||
that address). Larger values, especially in the exponential range, | that address). Larger values, especially in the exponential range, | |||
allow the tuning of the burstiness of MLD traffic on a link. | allow the tuning of the burstiness of MLD traffic on a link. | |||
5.1.4. Reserved | 5.1.4. Reserved | |||
The Reserved field is set to zero on transmission, and ignored on | The Reserved field is set to zero on transmission and ignored on | |||
reception. | reception. | |||
5.1.5. Multicast Address | 5.1.5. Multicast Address | |||
For a General Query, the Multicast Address field is set to zero. For | For a General Query, the Multicast Address field is set to zero. For | |||
a Multicast Address Specific Query or Multicast Address and Source | a Multicast Address Specific Query or Multicast Address and Source | |||
Specific Query, it is set to the multicast address being queried (see | Specific Query, it is set to the multicast address being queried (see | |||
Section 5.1.10, below). | Section 5.1.10, below). | |||
5.1.6. Flags | 5.1.6. Flags | |||
Allocation of individual bits within the Flags field is described in | Allocation of individual bits within the Flags field is described in | |||
Section 2.2 of [I-D.ietf-pim-3228bis]. Future specifications will | Section 2.2 of [RFC9778]. Future specifications will define the | |||
define the associated meaning tied to any such allocation. | associated meaning tied to any such allocation. | |||
5.1.7. S Flag (Suppress Router-Side Processing) | 5.1.7. S Flag (Suppress Router-Side Processing) | |||
When set to one, the S Flag indicates to any receiving multicast | When set to one, the S flag indicates to any receiving multicast | |||
routers that they have to suppress the normal timer updates they | routers that they have to suppress the normal timer updates they | |||
perform upon hearing a Query. Nevertheless, it does not suppress the | perform upon hearing a Query. Nevertheless, it does not suppress the | |||
querier election or the normal "host-side" processing of a Query that | querier election or the normal "host-side" processing of a Query that | |||
a router may be required to perform as a consequence of itself being | a router may be required to perform as a consequence of itself being | |||
a multicast listener. | a multicast listener. | |||
5.1.8. QRV (Querier's Robustness Variable) | 5.1.8. QRV (Querier's Robustness Variable) | |||
If non-zero, the QRV field contains the [Robustness Variable] value | If non-zero, the QRV field contains the [Robustness Variable] value | |||
used by the Querier. If the Querier's [Robustness Variable] exceeds | used by the Querier. If the Querier's [Robustness Variable] exceeds | |||
7 (the maximum value of the QRV field), the QRV field is set to zero. | 7 (the maximum value of the QRV field), the QRV field is set to zero. | |||
Routers adopt the QRV value from the most recently received Query as | Routers adopt the QRV value from the most recently received Query as | |||
their own [Robustness Variable] value, unless that most recently | their own [Robustness Variable] value, unless that most recently | |||
received QRV was zero, in which case they use the default [Robustness | received QRV was zero, in which case they use the default [Robustness | |||
Variable] value specified in Section 9.1, or a statically configured | Variable] value specified in Section 9.1 or a statically configured | |||
value. | value. | |||
5.1.9. QQIC (Querier's Query Interval Code) | 5.1.9. QQIC (Querier's Query Interval Code) | |||
The Querier's Query Interval Code field specifies the [Query | The QQIC field specifies the [Query Interval] used by the Querier. | |||
Interval] used by the Querier. The actual interval, called the | The actual interval, called the "Querier's Query Interval (QQI)", is | |||
Querier's Query Interval (QQI), is represented in units of seconds, | represented in units of seconds and is derived from the QQIC as | |||
and is derived from the Querier's Query Interval Code as follows: | follows: | |||
If QQIC < 128, QQI = QQIC | * If QQIC < 128, QQI = QQIC | |||
If QQIC >= 128, QQIC represents a floating-point value as follows: | * If QQIC >= 128, QQIC represents a floating-point value as follows: | |||
0 1 2 3 4 5 6 7 | 0 1 2 3 4 5 6 7 | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
|1| exp | mant | | |1| exp | mant | | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
QQI = (mant | 0x10) << (exp + 3) | QQI = (mant | 0x10) << (exp + 3) | |||
Multicast routers that are not the current Querier adopt the QQI | Multicast routers that are not the current Querier adopt the QQI | |||
value from the most recently received Query as their own [Query | value from the most recently received Query as their own [Query | |||
Interval] value, unless that most recently received QQI was zero, in | Interval] value, unless that most recently received QQI was zero, in | |||
which case the receiving routers use the default [Query Interval] | which case the receiving routers use the default [Query Interval] | |||
value specified in Section 9.2. | value specified in Section 9.2. | |||
5.1.10. Number of Sources (N) | 5.1.10. Number of Sources (N) | |||
The Number of Sources (N) field specifies how many source addresses | The Number of Sources (N) field specifies how many source addresses | |||
are present in the Query. This number is zero in a General Query or | are present in the Query. This number is zero in a General Query or | |||
a Multicast Address Specific Query, and non-zero in a Multicast | a Multicast Address Specific Query and non-zero in a Multicast | |||
Address and Source Specific Query. This number is limited by the MTU | Address and Source Specific Query. This number is limited by the MTU | |||
of the link over which the Query is transmitted. For example, on an | of the link over which the Query is transmitted. For example, on an | |||
Ethernet link with an MTU of 1500 octets, the IPv6 header (40 octets) | Ethernet link with an MTU of 1500 octets, the IPv6 header (40 octets) | |||
together with the Hop-By-Hop Extension Header (8 octets) that | together with the Hop-by-Hop Extension Header (8 octets) that | |||
includes the Router Alert option consume 48 octets; the MLD fields up | includes the Router Alert option consume 48 octets; the MLD fields up | |||
to the Number of Sources (N) field consume 28 octets; thus, there are | to the Number of Sources (N) field consume 28 octets; thus, there are | |||
1424 octets left for source addresses, which limits the number of | 1424 octets left for source addresses, which limits the number of | |||
source addresses to 89 (1424/16). | source addresses to 89 (1424/16). | |||
5.1.11. Source Address [i] | 5.1.11. Source Address [i] | |||
The Source Address [i] fields are a vector of n unicast addresses, | The Source Address [i] fields are a vector of n unicast addresses, | |||
where n is the value in the Number of Sources (N) field. | where n is the value in the Number of Sources (N) field. | |||
skipping to change at page 25, line 7 ¶ | skipping to change at line 1080 ¶ | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
| | | | | | |||
. . | . . | |||
. Auxiliary Data . | . Auxiliary Data . | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
5.2.1. Reserved | 5.2.1. Reserved | |||
The Reserved field is set to zero on transmission, and ignored on | The Reserved field is set to zero on transmission and ignored on | |||
reception. | reception. | |||
5.2.2. Checksum | 5.2.2. Checksum | |||
The standard ICMPv6 checksum; it covers the entire MLDv2 message, | The Checksum Field is the standard ICMPv6 checksum; it covers the | |||
plus a "pseudo-header" of IPv6 header fields [RFC8200][RFC4443]. In | entire MLDv2 message, plus a "pseudo-header" of IPv6 header fields | |||
order to compute the checksum, the Checksum field is set to zero. | [RFC8200] [RFC4443]. In order to compute the checksum, the Checksum | |||
When a packet is received, the checksum MUST be verified before | field is set to zero. When a packet is received, the checksum MUST | |||
processing it. | be verified before processing it. | |||
5.2.3. Flags | 5.2.3. Flags | |||
Allocation of individual bits within the Flags field is described in | Allocation of individual bits within the Flags field is described in | |||
Section 2.3 of [I-D.ietf-pim-3228bis]. Future specifications will | Section 2.3 of [RFC9778]. Future specifications will define the | |||
define the associated meaning tied to any such allocation. | associated meaning tied to any such allocation. | |||
5.2.4. Nr of Mcast Address Records (M) | 5.2.4. Nr of Mcast Address Records (M) | |||
The Nr of Mcast Address Records (M) field specifies how many | The Nr of the Mcast Address Records (M) field specifies how many | |||
Multicast Address Records are present in this Report. | Multicast Address Records are present in this Report. | |||
5.2.5. Multicast Address Record | 5.2.5. Multicast Address Record | |||
Each Multicast Address Record is a block of fields that contain | Each Multicast Address Record is a block of fields that contain | |||
information on the sender listening to a single multicast address on | information on the sender listening to a single multicast address on | |||
the interface from which the Report is sent. | the interface from which the Report is sent. | |||
5.2.6. Record Type | 5.2.6. Record Type | |||
It specifies the type of the Multicast Address Record. See | The Record Type field specifies the type of the Multicast Address | |||
Section 5.2.13 for a detailed description of the different possible | Record. See Section 5.2.13 for a detailed description of the | |||
Record Types. | different possible Record Types. | |||
5.2.7. Aux Data Len | 5.2.7. Aux Data Len | |||
The Aux Data Len field contains the length of the Auxiliary Data | The Aux Data Len field contains the length of the Auxiliary Data | |||
Field in this Multicast Address Record, in units of 32-bit words. It | field in this Multicast Address Record, in units of 32-bit words. It | |||
may contain zero, to indicate the absence of any auxiliary data. | may contain zero, to indicate the absence of any auxiliary data. | |||
5.2.8. Number of Sources (N) | 5.2.8. Number of Sources (N) | |||
The Number of Sources (N) field specifies how many source addresses | The Number of Sources (N) field specifies how many source addresses | |||
are present in this Multicast Address Record. | are present in this Multicast Address Record. | |||
5.2.9. Multicast Address | 5.2.9. Multicast Address | |||
The Multicast Address field contains the multicast address to which | The Multicast Address field contains the multicast address to which | |||
this Multicast Address Record pertains. | this Multicast Address Record pertains. | |||
5.2.10. Source Address [i] | 5.2.10. Source Address [i] | |||
The Source Address [i] fields are a vector of n unicast addresses, | 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. | where n is the value in this record's Number of Sources (N) field. | |||
5.2.11. Auxiliary Data | 5.2.11. Auxiliary Data | |||
The Auxiliary Data field, if present, contains additional information | The Auxiliary Data field, if present, contains additional information | |||
that pertain to this Multicast Address Record. The protocol | that pertains to this Multicast Address Record. The protocol | |||
specified in this document, MLDv2, does not define any auxiliary | specified in this document, MLDv2, does not define any auxiliary | |||
data. Therefore, implementations of MLDv2 MUST NOT include any | data. Therefore, implementations of MLDv2 MUST NOT include any | |||
auxiliary data (i.e., MUST set the Aux Data Len field to zero) in any | auxiliary data (i.e., MUST set the Aux Data Len field to zero) in any | |||
transmitted Multicast Address Record, and MUST ignore any such data | transmitted Multicast Address Record and MUST ignore any such data | |||
present in any received Multicast Address Record. The semantics and | present in any received Multicast Address Record. The semantics and | |||
the internal encoding of the Auxiliary Data field are to be defined | the internal encoding of the Auxiliary Data field are to be defined | |||
by any future version or extension of MLD that uses this field. | by any future version or extension of MLD that uses this field. | |||
5.2.12. Additional Data | 5.2.12. Additional Data | |||
If the Payload Length field in the IPv6 header of a received Report | If the Payload Length field in the IPv6 header of a received Report | |||
indicates that there are additional octets of data present, beyond | indicates that there are additional octets of data present, beyond | |||
the last Multicast Address Record, MLDv2 implementations MUST include | the last Multicast Address Record, MLDv2 implementations MUST include | |||
those octets in the computation to verify the received MLD Checksum, | those octets in the computation to verify the received MLD Checksum, | |||
skipping to change at page 27, line 5 ¶ | skipping to change at line 1168 ¶ | |||
There are a number of different types of Multicast Address Records | There are a number of different types of Multicast Address Records | |||
that may be included in a Report message: | that may be included in a Report message: | |||
* A "Current State Record" is sent by a node in response to a Query | * A "Current State Record" is sent by a node in response to a Query | |||
received on an interface. It reports the current listening state | received on an interface. It reports the current listening state | |||
of that interface, with respect to a single multicast address. | of that interface, with respect to a single multicast address. | |||
The Record Type of a Current State Record may be one of the | The Record Type of a Current State Record may be one of the | |||
following two values: | following two values: | |||
1 - MODE_IS_INCLUDE - indicates that the interface has a filter | 1. MODE_IS_INCLUDE - indicates that the interface has a filter | |||
mode of INCLUDE for the specified multicast address. The | mode of INCLUDE for the specified multicast address. The | |||
Source Address [i] fields in this Multicast Address Record | Source Address [i] fields in this Multicast Address Record | |||
contain the interface's source list for the specified | contain the interface's source list for the specified | |||
multicast address. A MODE_IS_INCLUDE Record is never sent | multicast address. A MODE_IS_INCLUDE Record is never sent | |||
with an empty source list. | with an empty source list. | |||
2 - MODE_IS_EXCLUDE - indicates that the interface has a filter | 2. MODE_IS_EXCLUDE - indicates that the interface has a filter | |||
mode of EXCLUDE for the specified multicast address. The | mode of EXCLUDE for the specified multicast address. The | |||
Source Address [i] fields in this Multicast Address Record | Source Address [i] fields in this Multicast Address Record | |||
contain the interface's source list for the specified | contain the interface's source list for the specified | |||
multicast address, if it is non-empty. An SSM-aware host | multicast address, if it is non-empty. An SSM-aware host | |||
SHOULD NOT send a MODE_IS_EXCLUDE record type for multicast | SHOULD NOT send a MODE_IS_EXCLUDE record type for multicast | |||
addresses that fall within the SSM address range as they will | addresses that fall within the SSM address range as they will | |||
be ignored by SSM-aware routers [RFC4604]. | be ignored by SSM-aware routers [RFC4604]. | |||
* A "Filter Mode Change Record" is sent by a node whenever a local | * A "Filter Mode Change Record" is sent by a node whenever a local | |||
invocation of IPv6MulticastListen causes a change of the filter | invocation of IPv6MulticastListen causes a change of the filter | |||
mode (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to | mode (i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to | |||
INCLUDE) of the interface-level state entry for a particular | INCLUDE) of the interface-level state entry for a particular | |||
multicast address, whether the source list changes at the same | multicast address, whether the source list changes at the same | |||
time or not. The Record is included in a Report sent from the | time or not. The Record is included in a Report sent from the | |||
interface on which the change occurred. The Record Type of a | interface on which the change occurred. The Record Type of a | |||
Filter Mode Change Record may be one of the following two values: | Filter Mode Change Record may be one of the following two values: | |||
3 - CHANGE_TO_INCLUDE_MODE - indicates that the interface has | 3. CHANGE_TO_INCLUDE_MODE - indicates that the interface has | |||
changed to INCLUDE filter mode for the specified multicast | changed to INCLUDE filter mode for the specified multicast | |||
address. The Source Address [i] fields in this Multicast | address. The Source Address [i] fields in this Multicast | |||
Address Record contain the interface's new source list for | Address Record contain the interface's new source list for the | |||
the specified multicast address, if it is non-empty. | specified multicast address, if it is non-empty. | |||
4 - CHANGE_TO_EXCLUDE_MODE - indicates that the interface has | 4. CHANGE_TO_EXCLUDE_MODE - indicates that the interface has | |||
changed to EXCLUDE filter mode for the specified multicast | changed to EXCLUDE filter mode for the specified multicast | |||
address. The Source Address [i] fields in this Multicast | address. The Source Address [i] fields in this Multicast | |||
Address Record contain the interface's new source list for | Address Record contain the interface's new source list for the | |||
the specified multicast address, if it is non-empty. An SSM- | specified multicast address, if it is non-empty. An SSM-aware | |||
aware host SHOULD NOT send a CHANGE_TO_EXCLUDE_MODE record | host SHOULD NOT send a CHANGE_TO_EXCLUDE_MODE record type for | |||
type for multicast addresses that fall within the SSM address | multicast addresses that fall within the SSM address range. | |||
range. | ||||
* A "Source List Change Record" is sent by a node whenever a local | * A "Source List Change Record" is sent by a node whenever a local | |||
invocation of IPv6MulticastListen causes a change of source list | invocation of IPv6MulticastListen causes a change of source list | |||
that is not coincident with a change of filter mode, of the | that is not coincident with a change of filter mode, of the | |||
interface-level state entry for a particular multicast address. | interface-level state entry for a particular multicast address. | |||
The Record is included in a Report sent from the interface on | The Record is included in a Report sent from the interface on | |||
which the change occurred. The Record Type of a Source List | which the change occurred. The Record Type of a Source List | |||
Change Record may be one of the following two values: | Change Record may be one of the following two values: | |||
5 - ALLOW_NEW_SOURCES - indicates that the Source Address [i] | 5. ALLOW_NEW_SOURCES - indicates that the Source Address [i] | |||
fields in this Multicast Address Record contain a list of the | fields in this Multicast Address Record contain a list of the | |||
additional sources that the node wishes to listen to, for | additional sources that the node wishes to listen to, for | |||
packets sent to the specified multicast address. If the | packets sent to the specified multicast address. If the | |||
change was to an INCLUDE source list, these are the addresses | change was to an INCLUDE source list, these are the addresses | |||
that were added to the list; if the change was to an EXCLUDE | that were added to the list; if the change was to an EXCLUDE | |||
source list, these are the addresses that were deleted from | source list, these are the addresses that were deleted from | |||
the list. | the list. | |||
6 - BLOCK_OLD_SOURCES - indicates that the Source Address [i] | 6. BLOCK_OLD_SOURCES - indicates that the Source Address [i] | |||
fields in this Multicast Address Record contain a list of the | fields in this Multicast Address Record contain a list of the | |||
sources that the node no longer wishes to listen to, for | sources that the node no longer wishes to listen to, for | |||
packets sent to the specified multicast address. If the | packets sent to the specified multicast address. If the | |||
change was to an INCLUDE source list, these are the addresses | change was to an INCLUDE source list, these are the addresses | |||
that were deleted from the list; if the change was to an | that were deleted from the list; if the change was to an | |||
EXCLUDE source list, these are the addresses that were added | EXCLUDE source list, these are the addresses that were added | |||
to the list. | to the list. | |||
If a change of source list results in both allowing new sources and | If a change of source list results in both allowing new sources and | |||
blocking old sources, then two Multicast Address Records are sent for | blocking old sources, then two Multicast Address Records are sent for | |||
the same multicast address, one of type ALLOW_NEW_SOURCES and one of | the same multicast address, one of type ALLOW_NEW_SOURCES and one of | |||
type BLOCK_OLD_SOURCES. | type BLOCK_OLD_SOURCES. | |||
We use the term "State Change Record" to refer to either a Filter | We use the term "State Change Record" to refer to either a Filter | |||
Mode Change Record or a Source List Change Record. | Mode Change Record or a Source List Change Record. | |||
Multicast Address Records with an unrecognized Record Type value MUST | Multicast Address Records with an unrecognized Record Type value MUST | |||
be silently ignored, with the rest of the report being processed. | be silently ignored, with the rest of the report being processed. | |||
In the rest of this document, we use the following notation to | In the rest of this document, we use the following notation to | |||
describe the contents of a Multicast Address Record that pertains to | describe the contents of a Multicast Address Record that pertains to | |||
a particular multicast address: | a particular multicast address: | |||
IS_IN ( x ) - Type MODE_IS_INCLUDE, source addresses x | IS_IN ( x ) - Type MODE_IS_INCLUDE, source addresses x | |||
IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x | IS_EX ( x ) - Type MODE_IS_EXCLUDE, source addresses x | |||
TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x | TO_IN ( x ) - Type CHANGE_TO_INCLUDE_MODE, source addresses x | |||
TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x | TO_EX ( x ) - Type CHANGE_TO_EXCLUDE_MODE, source addresses x | |||
ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x | ALLOW ( x ) - Type ALLOW_NEW_SOURCES, source addresses x | |||
BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x | BLOCK ( x ) - Type BLOCK_OLD_SOURCES, source addresses x | |||
where x is either: | where x is either: | |||
* a capital letter (e.g., "A") to represent the set of source | * a capital letter (e.g., "A") to represent the set of source | |||
addresses, or | addresses or | |||
* a set expression (e.g., "A+B"), where "A+B" means the union of | * a set expression (e.g., "A+B"), where "A+B" means the union of | |||
sets A and B, "A*B" means the intersection of sets A and B, and | sets A and B, "A*B" means the intersection of sets A and B, and | |||
"A-B" means the removal of all elements of set B from set A. | "A-B" means the removal of all elements of set B from set A. | |||
5.2.14. Source Addresses for Reports | 5.2.14. Source Addresses for Reports | |||
An MLDv2 Report MUST be sent with a valid IPv6 link-local source | An MLDv2 Report MUST be sent with a valid IPv6 link-local source | |||
address, or the unspecified address (::), if the sending interface | address, or the unspecified address (::), if the sending interface | |||
has not acquired a valid link-local address yet. Sending reports | has not acquired a valid link-local address yet. Sending reports | |||
skipping to change at page 30, line 19 ¶ | skipping to change at line 1322 ¶ | |||
by the MTU of the link on which it will be sent), the Multicast | by the MTU of the link on which it will be sent), the Multicast | |||
Address Records are sent in as many Report messages as needed to | Address Records are sent in as many Report messages as needed to | |||
report the entire set. | report the entire set. | |||
If a single Multicast Address Record contains so many source | If a single Multicast Address Record contains so many source | |||
addresses that it does not fit within the size limit of a single | addresses that it does not fit within the size limit of a single | |||
Report message, then: | Report message, then: | |||
* if its Type is not IS_EX or TO_EX, it is split into multiple | * if its Type is not IS_EX or TO_EX, it is split into multiple | |||
Multicast Address Records; each such record contains a different | Multicast Address Records; each such record contains a different | |||
subset of the source addresses, and is sent in a separate Report. | subset of the source addresses and is sent in a separate Report. | |||
* if its Type is IS_EX or TO_EX, a single Multicast Address Record | * 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 | is sent, with as many source addresses as can fit; the remaining | |||
source addresses are not reported. Although the choice of which | source addresses are not reported. Although the choice of which | |||
sources to report is arbitrary, it is preferable to report the | sources to report is arbitrary, it is preferable to report the | |||
same set of sources in each subsequent report, rather than | same set of sources in each subsequent report, rather than | |||
reporting different sources each time. | reporting different sources each time. | |||
6. Protocol Description for Multicast Address Listeners | 6. Protocol Description for Multicast Address Listeners | |||
MLD is an asymmetric protocol, as it specifies separate behaviors for | MLD is an asymmetric protocol, as it specifies separate behaviors for | |||
multicast address listeners -- that is, hosts or routers that listen | multicast address listeners -- that is, hosts or routers that listen | |||
to multicast packets -- and multicast routers. This section | to multicast packets -- and multicast routers. This section | |||
describes the part of MLDv2 that applies to all multicast address | describes the part of MLDv2 that applies to all multicast address | |||
listeners. (Note that a multicast router that is also a multicast | listeners. (Note that a multicast router that is also a multicast | |||
address listener performs both parts of MLDv2; it receives and it | address listener performs both parts of MLDv2; it receives and it | |||
responds to its own MLD messages, as well as to those of its | responds to its own MLD messages as well as to those of its | |||
neighbors.) The multicast router part of MLDv2 is described in | neighbors.) The multicast router part of MLDv2 is described in | |||
Section 7. | Section 7. | |||
A node performs the protocol described in this section over all | A node performs the protocol described in this section over all | |||
interfaces on which multicast reception is supported, even if more | interfaces on which multicast reception is supported, even if more | |||
than one of those interfaces are connected to the same link. | than one of those interfaces are connected to the same link. | |||
For interoperability with multicast routers that run the MLDv1 | For interoperability with multicast routers that run the MLDv1 | |||
protocol, nodes maintain a Host Compatibility Mode variable for each | protocol, nodes maintain a Host Compatibility Mode variable for each | |||
interface on which multicast reception is supported. This section | interface on which multicast reception is supported. This section | |||
describes the behavior of multicast address listener nodes on | describes the behavior of multicast address listener nodes on | |||
interfaces for which Host Compatibility Mode = MLDv2. The algorithm | interfaces for which Host Compatibility Mode = MLDv2. The algorithm | |||
for determining Host Compatibility Mode, and the behavior if its | for determining Host Compatibility Mode and the behavior if its value | |||
value is set to MLDv1, are described in Section 8. | is set to MLDv1 are described in Section 8. | |||
The link-scope all-nodes multicast address, (ff02::1), is handled as | The link-scope all-nodes multicast address, (ff02::1), is handled as | |||
a special case. On all nodes -- that is all hosts and routers, | a special case. On all nodes -- that is, all hosts and routers | |||
including multicast routers -- listening to packets destined to the | including multicast routers -- listening to packets destined to the | |||
all-nodes multicast address, from all sources, is permanently enabled | all-nodes multicast address, from all sources, is permanently enabled | |||
on all interfaces on which multicast listening is supported. No MLD | on all interfaces on which multicast listening is supported. No MLD | |||
messages are ever sent regarding neither the link-scope all-nodes | messages are ever sent regarding neither the link-scope all-nodes | |||
multicast address, nor any multicast address of scope 0 (reserved) or | multicast address, nor any multicast address of scope 0 (reserved) or | |||
1 (node-local). Multicast listeners MUST send MLD messages for all | 1 (node-local). Multicast listeners MUST send MLD messages for all | |||
multicast addresses except for the link-scope all-nodes multicast | multicast addresses except for the link-scope all-nodes multicast | |||
address and any multicast addresses of scope less than 2. | address and any multicast addresses of scope less than 2. | |||
There are three types of events that trigger MLDv2 protocol actions | There are three types of events that trigger MLDv2 protocol actions | |||
on an interface: | on an interface: | |||
* a change of the per-interface listening state, caused by a local | * a change of the per-interface listening state, caused by a local | |||
invocation of IPv6MulticastListen; | invocation of IPv6MulticastListen; | |||
* the firing of a specific timer; | * the firing of a specific timer; and | |||
* the reception of a Query. | * the reception of a Query. | |||
(Received MLD messages of types other than Query are silently | (Received MLD messages of types other than Query are silently | |||
ignored, except as required for interoperation with nodes that | ignored, except as required for interoperation with nodes that | |||
implement MLDv1.) | implement MLDv1.) | |||
The following subsections describe the actions to be taken for each | The following subsections describe the actions to be taken for each | |||
case. Timer and counter names appear in square brackets. Default | case. Timer and counter names appear in square brackets. Default | |||
values for those timers and counters are specified in Section 9. | values for those timers and counters are specified in Section 9. | |||
skipping to change at page 32, line 5 ¶ | skipping to change at line 1403 ¶ | |||
contents of the Multicast Address Record(s) in that Report are | contents of the Multicast Address Record(s) in that Report are | |||
determined by comparing the filter mode and source list for the | determined by comparing the filter mode and source list for the | |||
affected multicast address before and after the change, according to | affected multicast address before and after the change, according to | |||
Table 1. If no per-interface state existed for that multicast | Table 1. If no per-interface state existed for that multicast | |||
address before the change (i.e., the change consisted of creating a | address before the change (i.e., the change consisted of creating a | |||
new per-interface record), or if no state exists after the change | new per-interface record), or if no state exists after the change | |||
(i.e., the change consisted of deleting a per-interface record), then | (i.e., the change consisted of deleting a per-interface record), then | |||
the "non-existent" state is considered to have an INCLUDE filter mode | the "non-existent" state is considered to have an INCLUDE filter mode | |||
and an empty source list. | and an empty source list. | |||
+=============+=============+==========================+ | +=============+=============+==========================+ | |||
| Old State | New State | State Change Record Sent | | | Old State | New State | State Change Record Sent | | |||
+=============+=============+==========================+ | +=============+=============+==========================+ | |||
| INCLUDE (A) | INCLUDE (B) | ALLOW (B-A), BLOCK (A-B) | | | INCLUDE (A) | INCLUDE (B) | ALLOW (B-A), BLOCK (A-B) | | |||
+-------------+-------------+--------------------------+ | +-------------+-------------+--------------------------+ | |||
| EXCLUDE (A) | EXCLUDE (B) | ALLOW (A-B), BLOCK (B-A) | | | EXCLUDE (A) | EXCLUDE (B) | ALLOW (A-B), BLOCK (B-A) | | |||
+-------------+-------------+--------------------------+ | +-------------+-------------+--------------------------+ | |||
| INCLUDE (A) | EXCLUDE (B) | TO_EX (B) | | | INCLUDE (A) | EXCLUDE (B) | TO_EX (B) | | |||
+-------------+-------------+--------------------------+ | +-------------+-------------+--------------------------+ | |||
| EXCLUDE (A) | INCLUDE (B) | TO_IN (B) | | | EXCLUDE (A) | INCLUDE (B) | TO_IN (B) | | |||
+-------------+-------------+--------------------------+ | +-------------+-------------+--------------------------+ | |||
Table 1: State Change Record Transmission Logic | Table 1: State Change Record Transmission Logic | |||
If the computed source list for either an ALLOW or a BLOCK State | If the computed source list for either an ALLOW or a BLOCK State | |||
Change Record is empty, that record is omitted from the Report. | Change Record is empty, that record is omitted from the Report. | |||
To cover the possibility of the State Change Report being missed by | To cover the possibility of the State Change Report being missed by | |||
one or more multicast routers, [Robustness Variable] - 1 | one or more multicast routers, [Robustness Variable] - 1 | |||
retransmissions are scheduled, through a Retransmission Timer, at | retransmissions are scheduled, through a Retransmission Timer, at | |||
intervals chosen at random from the range (0, [Unsolicited Report | intervals chosen at random from the range (0, [Unsolicited Report | |||
Interval]). | Interval]). | |||
skipping to change at page 32, line 46 ¶ | skipping to change at line 1444 ¶ | |||
multicast address before and after the latest change is compared. | multicast address before and after the latest change is compared. | |||
* The records that express the difference are built according to the | * The records that express the difference are built according to the | |||
table above. Nevertheless, these records are not transmitted in a | table above. Nevertheless, these records are not transmitted in a | |||
separate message, but they are instead merged with the contents of | separate message, but they are instead merged with the contents of | |||
the pending report, to create the new State Change Report. The | the pending report, to create the new State Change Report. The | |||
rules for calculating this merged report are described below. | rules for calculating this merged report are described below. | |||
The transmission of the merged State Change Report terminates | The transmission of the merged State Change Report terminates | |||
retransmissions of the earlier State Change Reports for the same | retransmissions of the earlier State Change Reports for the same | |||
multicast address, and becomes the first of [Robustness Variable] | multicast address and becomes the first of [Robustness Variable] | |||
transmissions of the new State Change Reports. These transmissions | transmissions of the new State Change Reports. These transmissions | |||
are necessary in order to ensure that each instance of state change | are necessary in order to ensure that each instance of state change | |||
is transmitted at least [Robustness Variable] times. | is transmitted at least [Robustness Variable] times. | |||
Each time a source is included in the difference report calculated | Each time a source is included in the difference report calculated | |||
above, retransmission state for that source needs to be maintained | above, retransmission state for that source needs to be maintained | |||
until [Robustness Variable] State Change Reports have been sent by | until [Robustness Variable] State Change Reports have been sent by | |||
the node. This is done in order to ensure that a series of | the node. This is done in order to ensure that a series of | |||
successive state changes do not break the protocol robustness. | successive state changes do not break the protocol robustness. | |||
Sources in retransmission state can be kept in a per multicast | Sources in retransmission state can be kept in a per-multicast- | |||
address Retransmission List, with a Source Retransmission Counter | address Retransmission List, with a Source Retransmission Counter | |||
associated to each source in the list. When a source is included in | associated to each source in the list. When a source is included in | |||
the list, its counter is set to [Robustness Variable]. Each time a | the list, its counter is set to [Robustness Variable]. Each time a | |||
State Change Report is sent the counter is decreased by one unit. | State Change Report is sent, the counter is decreased by one unit. | |||
When the counter reaches zero, the source is deleted from the | When the counter reaches zero, the source is deleted from the | |||
Retransmission List for that multicast address. | Retransmission List for that multicast address. | |||
If the per-interface listening change that triggers the new report is | If the per-interface listening change that triggers the new report is | |||
a filter mode change, then the next [Robustness Variable] State | a filter mode change, then the next [Robustness Variable] State | |||
Change Reports will include a Filter Mode Change Record. This | Change Reports will include a Filter Mode Change Record. This | |||
applies even if any number of source list changes occur in that | applies even if any number of source list changes occur in that | |||
period. The node has to maintain retransmission state for the | period. The node has to maintain retransmission state for the | |||
multicast address until the [Robustness Variable] State Change | multicast address until the [Robustness Variable] State Change | |||
Reports have been sent. This can be done through a per multicast | Reports have been sent. This can be done through a per-multicast- | |||
address Filter Mode Retransmission Counter. When the filter mode | address Filter Mode Retransmission Counter. When the filter mode | |||
changes, the counter is set to [Robustness Variable]. Each time a | changes, the counter is set to [Robustness Variable]. Each time a | |||
State Change Report is sent the counter is decreased by one unit. | State Change Report is sent the counter is decreased by one unit. | |||
When the counter reaches zero, i.e., [Robustness Variable] State | When the counter reaches zero, i.e., [Robustness Variable] State | |||
Change Reports with Filter Mode Change Records have been transmitted | Change Reports with Filter Mode Change Records have been transmitted | |||
after the last filter mode change, and if source list changes have | after the last filter mode change, and if source list changes have | |||
resulted in additional reports being scheduled, then the next State | resulted in additional reports being scheduled, then the next State | |||
Change Report will include Source List Change Records. | Change Report will include Source List Change Records. | |||
Each time a per-interface listening state change triggers the | Each time a per-interface listening state change triggers the | |||
Immediate transmission of a new State Change Report, its contents are | immediate transmission of a new State Change Report, its contents are | |||
determined as follows. If the report should contain a Filter Mode | determined as follows. If the report should contain a Filter Mode | |||
Change Record, i.e., the Filter Mode Retransmission Counter for that | Change Record, i.e., the Filter Mode Retransmission Counter for that | |||
multicast address has a value higher than zero, then, if the current | multicast address has a value higher than zero, then, if the current | |||
filter mode of the interface is INCLUDE, a TO_IN record is included | filter mode of the interface is INCLUDE, a TO_IN record is included | |||
in the report; otherwise a TO_EX record is included. If instead the | in the report; otherwise, a TO_EX record is included. If instead the | |||
report should contain Source List Change Records, i.e., the Filter | report should contain Source List Change Records, i.e., the Filter | |||
Mode Retransmission Counter for that multicast address is zero, an | Mode Retransmission Counter for that multicast address is zero, an | |||
ALLOW and a BLOCK record is included. The contents of these records | ALLOW and a BLOCK record is included. The contents of these records | |||
are built according Table 2. | are built according Table 2. | |||
+========+======================================================+ | +========+=======================================================+ | |||
| Record | Sources Included | | | Record | Sources Included | | |||
+========+======================================================+ | +========+=======================================================+ | |||
| TO_IN | All in the current per-interface state that must be | | | TO_IN | All in the current per-interface state that must be | | |||
| | forwarded | | | | forwarded. | | |||
+--------+------------------------------------------------------+ | +--------+-------------------------------------------------------+ | |||
| TO_EX | All in the current per-interface state that must be | | | TO_EX | All in the current per-interface state that must be | | |||
| | blocked | | | | blocked. | | |||
+--------+------------------------------------------------------+ | +--------+-------------------------------------------------------+ | |||
| ALLOW | All with retransmission state (i.e., all sources | | | ALLOW | All with retransmission state (i.e., all sources from | | |||
| | from the Retransmission List) that must be forwarded | | | | the Retransmission List) that must be forwarded. | | |||
+--------+------------------------------------------------------+ | +--------+-------------------------------------------------------+ | |||
| BLOCK | All with retransmission state that must be blocked | | | BLOCK | All with retransmission state that must be blocked. | | |||
+--------+------------------------------------------------------+ | +--------+-------------------------------------------------------+ | |||
Table 2: Per-Interface State Change Report Contents | Table 2: Per-Interface State Change Report Contents | |||
If the computed source list for either an ALLOW or a BLOCK record is | If the computed source list for either an ALLOW or a BLOCK record is | |||
empty, that record is omitted from the State Change Report. | empty, that record is omitted from the State Change Report. | |||
Note: When the first State Change Report is sent, the non-existent | Note: When the first State Change Report is sent, the non-existent | |||
pending report to merge with can be treated as a Source Change Report | pending report to merge with can be treated as a Source Change Report | |||
with empty ALLOW and BLOCK records (no sources have retransmission | with empty ALLOW and BLOCK records (no sources have retransmission | |||
state). | state). | |||
The building of a scheduled State Change Report, triggered by the | The building of a scheduled State Change Report, triggered by the | |||
firing of a Retransmission Timer, instead of a per-interface | firing of a Retransmission Timer, instead of a per-interface | |||
listening state change, is described in Section 6.3. | listening state change, is described in Section 6.3. | |||
6.2. Action on Reception of a Query | 6.2. Action on Reception of a Query | |||
Upon reception of an MLD message that contains a Query, the node | Upon reception of an MLD message that contains a Query, the node | |||
checks if the source address of the message is a valid link-local | checks if the source address of the message is a valid link-local | |||
address, if the Hop Limit is set to 1, and if the Router Alert option | address, if the Hop Limit is set to 1, and if the Router Alert option | |||
is present in the Hop-By-Hop Options header of the IPv6 packet. If | is present in the Hop-by-Hop Options header of the IPv6 packet. If | |||
any of these checks fails, the packet is dropped. | any of these checks fail, the packet is dropped. | |||
If the validity of the MLD message is verified, the node starts to | If the validity of the MLD message is verified, the node starts to | |||
process the Query. Instead of responding immediately, the node | process the Query. Instead of responding immediately, the node | |||
delays its response by a random amount of time, bounded by the | delays its response by a random amount of time, bounded by the | |||
Maximum Response Delay value derived from the Maximum Response Code | Maximum Response Delay value derived from the Maximum Response Code | |||
in the received Query message. A node may receive a variety of | in the received Query message. A node may receive a variety of | |||
Queries on different interfaces and of different kinds (e.g., General | Queries on different interfaces and of different kinds (e.g., General | |||
Queries, Multicast Address Specific Queries, and Multicast Address | Queries, Multicast Address Specific Queries, and Multicast Address | |||
and Source Specific Queries), each of which may require its own | and Source Specific Queries), each of which may require its own | |||
delayed response. | delayed response. | |||
skipping to change at page 35, line 15 ¶ | skipping to change at line 1547 ¶ | |||
Before scheduling a response to a Query, the node must first consider | Before scheduling a response to a Query, the node must first consider | |||
previously scheduled pending responses and, in many cases, schedule a | previously scheduled pending responses and, in many cases, schedule a | |||
combined response. Therefore, for each of its interfaces on which it | combined response. Therefore, for each of its interfaces on which it | |||
operates the listener part of the MLDv2 protocol, the node must be | operates the listener part of the MLDv2 protocol, the node must be | |||
able to maintain the following state: | able to maintain the following state: | |||
* an Interface Timer for scheduling responses to General Queries; | * an Interface Timer for scheduling responses to General Queries; | |||
* a Multicast Address Timer for scheduling responses to Multicast | * a Multicast Address Timer for scheduling responses to Multicast | |||
Address (and Source) Specific Queries, for each multicast address | Address (and Source) Specific Queries, for each multicast address | |||
the node has to report on; | the node has to report on; and | |||
* a per-multicast-address list of sources to be reported in response | * a per-multicast-address list of sources to be reported in response | |||
to a Multicast Address and Source Specific Query. | to a Multicast Address and Source Specific Query. | |||
When a new valid General Query arrives on an interface, the node | When a new valid General Query arrives on an interface, the node | |||
checks whether it has any per-interface listening state record to | checks whether it has any per-interface listening state record to | |||
report on, or not. Similarly, when a new valid Multicast Address | report on, or not. Similarly, when a new valid Multicast Address | |||
(and Source) Specific Query arrives on an interface, the node checks | (and Source) Specific Query arrives on an interface, the node checks | |||
whether it has a per-interface listening state record that | whether it has a per-interface listening state record that | |||
corresponds to the queried multicast address (and source), or not. | corresponds to the queried multicast address (and source), or not. | |||
If it does, a delay for a response is randomly selected in the range | If it does, a delay for a response is randomly selected in the range | |||
(0, [Maximum Response Delay]), where Maximum Response Delay is | (0, [Maximum Response Delay]), where Maximum Response Delay is | |||
derived from the Maximum Response Code inserted in the received Query | derived from the Maximum Response Code inserted in the received Query | |||
message. The following rules are then used to determine if a Report | message. The following rules are then used to determine if a Report | |||
needs to be scheduled or not, and the type of Report to schedule. | needs to be scheduled or not and the type of Report to schedule. | |||
(The rules are considered in order and only the first matching rule | (The rules are considered in order and only the first matching rule | |||
is applied.) | is applied.) | |||
1. If there is a pending response to a previous General Query | 1. If there is a pending response to a previous General Query | |||
scheduled sooner than the selected delay, no additional response | scheduled sooner than the selected delay, no additional response | |||
needs to be scheduled. | needs to be scheduled. | |||
2. If the received Query is a General Query, the Interface Timer is | 2. If the received Query is a General Query, the Interface Timer is | |||
used to schedule a response to the General Query after the | used to schedule a response to the General Query after the | |||
selected delay. Any previously pending response to a General | selected delay. Any previously pending response to a General | |||
Query is canceled. | Query is canceled. | |||
3. If the received Query is a Multicast Address Specific Query or a | 3. If the received Query is a Multicast Address Specific Query or a | |||
Multicast Address and Source Specific Query and there is no | Multicast Address and Source Specific Query and there is no | |||
pending response to a previous Query for this multicast address, | pending response to a previous Query for this multicast address, | |||
then the Multicast Address Timer is used to schedule a report. | then the Multicast Address Timer is used to schedule a report. | |||
If the received Query is a Multicast Address and Source Specific | If the received Query is a Multicast Address and Source Specific | |||
Query, the list of queried sources is recorded to be used when | Query, the list of queried sources is recorded for use when | |||
generating a response. | generating a response. | |||
4. If there is already a pending response to a previous Query | 4. If there is already a pending response to a previous Query | |||
scheduled for this multicast address, and either the new Query is | scheduled for this multicast address, and either the new Query is | |||
a Multicast Address Specific Query or the recorded source list | a Multicast Address Specific Query or the recorded source list | |||
associated with the multicast address is empty, then the | associated with the multicast address is empty, then the | |||
multicast address source list is cleared and a single response is | multicast address source list is cleared and a single response is | |||
scheduled, using the Multicast Address Timer. The new response | scheduled, using the Multicast Address Timer. The new response | |||
is scheduled to be sent at the earliest of the remaining time for | is scheduled to be sent at the earliest of the remaining time for | |||
the pending report and the selected delay. | the pending report and the selected delay. | |||
skipping to change at page 36, line 35 ¶ | skipping to change at line 1613 ¶ | |||
There are several timers that, upon expiration, trigger protocol | There are several timers that, upon expiration, trigger protocol | |||
actions on an MLDv2 Multicast Address Listener node. All these | actions on an MLDv2 Multicast Address Listener node. All these | |||
actions are related to pending reports scheduled by the node. | actions are related to pending reports scheduled by the node. | |||
1. If the expired timer is the Interface Timer (i.e., there is a | 1. If the expired timer is the Interface Timer (i.e., there is a | |||
pending response to a General Query), then one Current State | pending response to a General Query), then one Current State | |||
Record is sent for each multicast address for which the specified | Record is sent for each multicast address for which the specified | |||
interface has listening state, as described in Section 4.2. The | interface has listening state, as described in Section 4.2. The | |||
Current State Record carries the multicast address and its | Current State Record carries the multicast address and its | |||
associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and | associated filter mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and | |||
Source list. Multiple Current State Records are packed into | source list. Multiple Current State Records are packed into | |||
individual Report messages, to the extent possible. | individual Report messages, to the extent possible. | |||
This naive algorithm may result in bursts of packets when a node | This naive algorithm may result in bursts of packets when a node | |||
listens to a large number of multicast addresses. Instead of | listens to a large number of multicast addresses. Instead of | |||
using a single Interface Timer, implementations are recommended | using a single Interface Timer, implementations are recommended | |||
to spread transmission of such Report messages over the interval | to spread transmission of such Report messages over the interval | |||
(0, [Maximum Response Delay]). Note that any such implementation | (0, [Maximum Response Delay]). Note that any such implementation | |||
MUST avoid the "ack-implosion" problem, i.e., MUST NOT send a | MUST avoid the "ack-implosion" problem, i.e., MUST NOT send a | |||
Report immediately upon reception of a General Query. | Report immediately upon reception of a General Query. | |||
skipping to change at page 37, line 23 ¶ | skipping to change at line 1642 ¶ | |||
3. If the expired timer is a Multicast Address Timer and the list of | 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., | recorded sources for that multicast address is non-empty (i.e., | |||
there is a pending response to a Multicast Address and Source | there is a pending response to a Multicast Address and Source | |||
Specific Query), then if, and only if, the interface has | Specific Query), then if, and only if, the interface has | |||
listening state for that multicast address, the contents of the | listening state for that multicast address, the contents of the | |||
corresponding Current State Record are determined from the per- | corresponding Current State Record are determined from the per- | |||
interface state and the pending response record, as specified in | interface state and the pending response record, as specified in | |||
Table 3. | Table 3. | |||
+=====================+=========================+==============+ | +=====================+=========================+==============+ | |||
| Per-Interface State | Set of Sources in the | Current | | | Per-Interface State | Set of Sources in the | Current | | |||
| | Pending Response Record | State Record | | | | Pending Response Record | State Record | | |||
+=====================+=========================+==============+ | +=====================+=========================+==============+ | |||
| INCLUDE (A) | B | IS_IN (A*B) | | | INCLUDE (A) | B | IS_IN (A*B) | | |||
+---------------------+-------------------------+--------------+ | +---------------------+-------------------------+--------------+ | |||
| EXCLUDE (A) | B | IS_IN (B-A) | | | EXCLUDE (A) | B | IS_IN (B-A) | | |||
+---------------------+-------------------------+--------------+ | +---------------------+-------------------------+--------------+ | |||
Table 3: Determining Contents of Current State Record | Table 3: Determining Contents of Current State Record | |||
If the resulting Current State Record has an empty set of source | If the resulting Current State Record has an empty set of source | |||
addresses, then no response is sent. After the required Report | addresses, then no response is sent. After the required Report | |||
messages have been generated, the source lists associated with any | messages have been generated, the source lists associated with | |||
reported multicast addresses are cleared. | any reported multicast addresses are cleared. | |||
4. If the expired timer is a Retransmission Timer for a multicast | 4. If the expired timer is a Retransmission Timer for a multicast | |||
address (i.e., there is a pending State Change Report for that | address (i.e., there is a pending State Change Report for that | |||
multicast address), the contents of the report are determined as | multicast address), the contents of the report are determined as | |||
follows. If the report should contain a Filter Mode Change | follows. If the report should contain a Filter Mode Change | |||
Record, i.e., the Filter Mode Retransmission Counter for that | Record, i.e., the Filter Mode Retransmission Counter for that | |||
multicast address has a value higher than zero, then, if the | multicast address has a value higher than zero, then, if the | |||
current filter mode of the interface is INCLUDE, a TO_IN record | current filter mode of the interface is INCLUDE, a TO_IN record | |||
is included in the report; otherwise a TO_EX record is included. | is included in the report; otherwise a TO_EX record is included. | |||
In both cases, the Filter Mode Retransmission Counter for that | In both cases, the Filter Mode Retransmission Counter for that | |||
multicast address is decremented by one unit after the | multicast address is decremented by one unit after the | |||
transmission of the report. | transmission of the report. | |||
If instead the report should contain Source List Change Records, | If instead the report should contain Source List Change Records, | |||
i.e., the Filter Mode Retransmission Counter for that multicast | i.e., the Filter Mode Retransmission Counter for that multicast | |||
address is zero, an ALLOW and a BLOCK record is included. The | address is zero, an ALLOW and a BLOCK record is included. The | |||
contents of these records are built according to Table 4. | contents of these records are built according to Table 4. | |||
+========+=====================================================+ | +========+=====================================================+ | |||
| Record | Sources included | | | Record | Sources Included | | |||
+========+=====================================================+ | +========+=====================================================+ | |||
| TO_IN | All in the current per-interface state that must be | | | TO_IN | All in the current per-interface state that must be | | |||
| | forwarded | | | | forwarded. | | |||
+--------+-----------------------------------------------------+ | +--------+-----------------------------------------------------+ | |||
| TO_EX | All in the current per-interface state that must be | | | TO_EX | All in the current per-interface state that must be | | |||
| | blocked | | | | blocked. | | |||
+--------+-----------------------------------------------------+ | +--------+-----------------------------------------------------+ | |||
| ALLOW | All with retransmission state (i.e., all sources | | | ALLOW | All with retransmission state (i.e., all sources | | |||
| | from the Retransmission List) that must be | | | | from the Retransmission List) that must be | | |||
| | forwarded. For each included source, its Source | | | | forwarded. For each included source, its Source | | |||
| | Retransmission Counter is decreased with one unit | | | | Retransmission Counter is decreased with one unit | | |||
| | after the transmission of the report. If the | | | | after the transmission of the report. If the | | |||
| | counter reaches zero, the source is deleted from | | | | counter reaches zero, the source is deleted from | | |||
| | the Retransmission List for that multicast address. | | | | the Retransmission List for that multicast address. | | |||
+--------+-----------------------------------------------------+ | +--------+-----------------------------------------------------+ | |||
| BLOCK | All with retransmission state (i.e., all sources | | | BLOCK | All with retransmission state (i.e., all sources | | |||
| | from the Retransmission List) that must be blocked. | | | | from the Retransmission List) that must be blocked. | | |||
| | For each included source, its Source Retransmission | | | | For each included source, its Source Retransmission | | |||
| | Counter is decreased with one unit after the | | | | Counter is decreased with one unit after the | | |||
| | transmission of the report. If the counter reaches | | | | transmission of the report. If the counter reaches | | |||
| | zero, the source is deleted from the Retransmission | | | | zero, the source is deleted from the Retransmission | | |||
| | List for that multicast address. | | | | List for that multicast address. | | |||
+--------+-----------------------------------------------------+ | +--------+-----------------------------------------------------+ | |||
Table 4: Determining Contents of Source List Change Records | Table 4: Determining Contents of Source List Change Records | |||
If the computed source list for either an ALLOW or a BLOCK record is | If the computed source list for either an ALLOW or a BLOCK record | |||
empty, that record is omitted from the State Change Report. | is empty, that record is omitted from the State Change Report. | |||
7. Description of the Protocol for Multicast Routers | 7. Description of the Protocol for Multicast Routers | |||
The purpose of MLD is to enable each multicast router to learn, for | The purpose of MLD is to enable each multicast router to learn, for | |||
each of its directly attached links, which multicast addresses have | each of its directly attached links, which multicast addresses have | |||
listeners on that link. MLD version 2 adds the capability for a | listeners on that link. MLD version 2 adds the capability for a | |||
multicast router to also learn which sources have listeners among the | multicast router to also learn which sources have listeners among the | |||
neighboring nodes, for packets sent to any particular multicast | neighboring nodes, for packets sent to any particular multicast | |||
address. The information gathered by MLD is provided to whichever | address. The information gathered by MLD is provided to whichever | |||
multicast routing protocol is used by the router, in order to ensure | multicast routing protocol is used by the router, in order to ensure | |||
that multicast packets are delivered to all links where there are | that multicast packets are delivered to all links where there are | |||
interested listeners. | interested listeners. | |||
This section describes the part of MLDv2 that is performed by | This section describes the part of MLDv2 that is performed by | |||
multicast routers. Multicast routers may themselves become multicast | multicast routers. Multicast routers may themselves become multicast | |||
address listeners, and therefore also perform the multicast listener | address listeners and therefore also perform the multicast listener | |||
part of MLDv2, described in Section 6. | part of MLDv2, as described in Section 6. | |||
A multicast router performs the protocol described in this section | A multicast router performs the protocol described in this section | |||
over each of its directly attached links. If a multicast router has | over each of its directly attached links. If a multicast router has | |||
more than one interface to the same link, it only needs to operate | more than one interface to the same link, it only needs to operate | |||
this protocol over one of those interfaces. | this protocol over one of those interfaces. | |||
For each interface over which the router operates the MLD protocol, | For each interface over which the router operates the MLD protocol, | |||
the router must configure that interface to listen to all link-layer | the router must configure that interface to listen to all link-layer | |||
multicast addresses that can be generated by IPv6 multicasts. For | multicast addresses that can be generated by IPv6 multicasts. For | |||
example, an Ethernet-attached router must set its Ethernet address | example, an Ethernet-attached router must set its Ethernet address | |||
reception filter to accept all Ethernet multicast addresses that | reception filter to accept all Ethernet multicast addresses that | |||
start with the hexadecimal value 3333 [RFC2464]; in the case of an | start with the hexadecimal value 3333 [RFC2464]; in the case of an | |||
Ethernet interface that does not support the filtering of such a | Ethernet interface that does not support the filtering of such a | |||
multicast address range, it must be configured to accept ALL Ethernet | multicast address range, it must be configured to accept ALL Ethernet | |||
multicast addresses, in order to meet the requirements of MLD. | multicast addresses, in order to meet the requirements of MLD. | |||
On each interface over which this protocol is being run, the router | On each interface over which this protocol is being run, the router | |||
MUST enable reception of the link-scope "all MLDv2-capable routers" | MUST enable reception of the link-scope "all MLDv2-capable routers" | |||
multicast address from all sources, and MUST perform the multicast | multicast address from all sources and MUST perform the multicast | |||
address listener part of MLDv2 for that address on that interface. | address listener part of MLDv2 for that address on that interface. | |||
Multicast routers only need to know that at least one node on an | Multicast routers only need to know that at least one node on an | |||
attached link listens to packets for a particular multicast address | attached link listens to packets for a particular multicast address | |||
from a particular source; a multicast router is not required to | from a particular source; a multicast router is not required to | |||
individually keep track of the interests of each neighboring node. | individually keep track of the interests of each neighboring node. | |||
(Nevertheless, see Appendix A.2 item 1 for discussion.) | (Nevertheless, see Appendix A.2, item 1 for discussion.) | |||
MLDv2 is backward compatible with the MLDv1 protocol. For a detailed | MLDv2 is backward compatible with the MLDv1 protocol. For a detailed | |||
description of compatibility issues see Section 8. | description of compatibility issues, see Section 8. | |||
7.1. Conditions for MLD Queries | 7.1. Conditions for MLD Queries | |||
The behavior of a router that implements the MLDv2 protocol depends | The behavior of a router that implements the MLDv2 protocol depends | |||
on whether there are several multicast routers on the same subnet, or | on whether there are several multicast routers on the same subnet, or | |||
not. If it is the case, a querier election mechanism (described in | not. If it is the case, a querier election mechanism (described in | |||
Section 7.6.2) is used to elect a single multicast router to be 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 | Querier state. All the multicast routers on the subnet listen to the | |||
messages sent by multicast address listeners, and maintain the same | messages sent by multicast address listeners, and maintain the same | |||
multicast listening information state, so that they can quickly and | multicast listening information state, so that they can quickly and | |||
skipping to change at page 40, line 39 ¶ | skipping to change at line 1799 ¶ | |||
Address Specific Query is sent to verify that there are no nodes that | Address Specific Query is sent to verify that there are no nodes that | |||
listen to the specified multicast address or to "rebuild" the | listen to the specified multicast address or to "rebuild" the | |||
listening state for a particular multicast address. Multicast | listening state for a particular multicast address. Multicast | |||
Address Specific Queries are sent when the Querier receives a State | Address Specific Queries are sent when the Querier receives a State | |||
Change Record indicating that a node ceases to listen to a multicast | Change Record indicating that a node ceases to listen to a multicast | |||
address. They are also sent in order to enable a fast transition of | address. They are also sent in order to enable a fast transition of | |||
a router from EXCLUDE to INCLUDE mode, in case a received State | a router from EXCLUDE to INCLUDE mode, in case a received State | |||
Change Record motivates this action. | Change Record motivates this action. | |||
A Multicast Address and Source Specific Query is used to verify that | 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 | there are no nodes on a link that listen to traffic from a specific | |||
set of sources. Multicast Address and Source Specific Queries list | set of sources. Multicast Address and Source Specific Queries list | |||
sources for a particular multicast address which have been requested | sources for a particular multicast address that have been requested | |||
to no longer be forwarded. This query is sent by the Querier in | to no longer be forwarded. This query is sent by the Querier in | |||
order to learn if any node listens to packets sent to the specified | order to learn if any node listens to packets sent to the specified | |||
multicast address, from the specified source addresses. Multicast | multicast address, from the specified source addresses. Multicast | |||
Address and Source Specific Queries are only sent in response to | Address and Source Specific Queries are only sent in response to | |||
State Change Records and never in response to Current State Records. | State Change Records and never in response to Current State Records. | |||
Section 5.1.13 describes each query in more detail. | Section 5.1.13 describes each query in more detail. | |||
7.2. MLD State Maintained by Multicast Routers | 7.2. MLD State Maintained by Multicast Routers | |||
Multicast routers that implement the MLDv2 protocol keep state per | Multicast routers that implement the MLDv2 protocol keep state per | |||
skipping to change at page 42, line 11 ¶ | skipping to change at line 1864 ¶ | |||
given interface if there is at least one listener in EXCLUDE mode | given interface if there is at least one listener in EXCLUDE mode | |||
interested in that address on the link. Conceptually, when a | interested in that address on the link. Conceptually, when a | |||
Multicast Address Record is received, the Router Filter Mode for that | Multicast Address Record is received, the Router Filter Mode for that | |||
multicast address is updated to cover all the requested sources using | multicast address is updated to cover all the requested sources using | |||
the least amount of state. As a rule, once a Multicast Address | the least amount of state. As a rule, once a Multicast Address | |||
Record with a filter mode of EXCLUDE is received, the Router Filter | Record with a filter mode of EXCLUDE is received, the Router Filter | |||
Mode for that multicast address will be set to EXCLUDE. | Mode for that multicast address will be set to EXCLUDE. | |||
Nevertheless, if all nodes with a multicast address record having | Nevertheless, if all nodes with a multicast address record having | |||
filter mode set to EXCLUDE cease reporting, it is desirable for the | filter mode set to EXCLUDE cease reporting, it is desirable for the | |||
Router Filter Mode for that multicast address to transition back to | Router Filter Mode for that multicast address to transition back to | |||
INCLUDE mode. This transition occurs when the Filter Timer expires, | INCLUDE mode. This transition occurs when the Filter Timer expires; | |||
and is explained in detail in Section 7.5. | see Section 7.5 for more details. | |||
When the router is in EXCLUDE mode, the router state is represented | When the router is in EXCLUDE mode, the router state is represented | |||
through the notation EXCLUDE (X,Y), where X is called the "Requested | through the notation EXCLUDE (X,Y), where X is called the "Requested | |||
List" and Y is called the "Exclude List". All sources, except those | List" and Y is called the "Exclude List". All sources, except those | |||
from the Exclude List, will be forwarded by the router. The | from the Exclude List, will be forwarded by the router. The | |||
Requested List has no effect on forwarding. Nevertheless, it has to | Requested List has no effect on forwarding. Nevertheless, it has to | |||
be maintained for several reasons, as explained in Section 7.2.3. | be maintained for several reasons, as explained in Section 7.2.3. | |||
The exact handling of both the INCLUDE and EXCLUDE mode router state, | The exact handling of both the INCLUDE and EXCLUDE mode router state, | |||
according to the received reports, is presented in details in | according to the received reports, is presented in detail in Sections | |||
Section 7.4.1 and Section 7.4.2. | 7.4.1 and 7.4.2. | |||
7.2.2. Definition of Filter Timers | 7.2.2. Definition of Filter Timers | |||
The Filter Timer is only used when the router is in EXCLUDE mode for | 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 | a specific multicast address, and it represents the time for the | |||
Router Filter Mode of the multicast address to expire and switch to | Router Filter Mode of the multicast address to expire and switch to | |||
INCLUDE mode. A Filter Timer is a decrementing timer with a lower | INCLUDE mode. A Filter Timer is a decrementing timer with a lower | |||
bound of zero. One Filter Timer exists per multicast address record. | bound of zero. One Filter Timer exists per multicast address record. | |||
Filter Timers are updated according to the types of Multicast Address | Filter Timers are updated according to the types of Multicast Address | |||
Records received. | Records received. | |||
skipping to change at page 42, line 46 ¶ | skipping to change at line 1899 ¶ | |||
multicast address being EXCLUDE, it means that there are no more | multicast address being EXCLUDE, it means that there are no more | |||
listeners in EXCLUDE mode on the attached link. At this point, the | listeners in EXCLUDE mode on the attached link. At this point, the | |||
router transitions to INCLUDE filter mode. Section 7.5 describes the | router transitions to INCLUDE filter mode. Section 7.5 describes the | |||
actions taken when a Filter Timer expires while in EXCLUDE mode. | actions taken when a Filter Timer expires while in EXCLUDE mode. | |||
Table 5 summarizes the role of the Filter Timer. Section 7.4 | Table 5 summarizes the role of the Filter Timer. Section 7.4 | |||
describes the details of setting the Filter Timer per type of | describes the details of setting the Filter Timer per type of | |||
Multicast Address Record received. | Multicast Address Record received. | |||
+=========+========+================================================+ | +=========+========+================================================+ | |||
| Router | Filter | Actions/Comments | | | Router | Filter | Actions/Comments | | |||
| Filter | Timer | | | | Filter | Timer | | | |||
| Mode | Value | | | | Mode | Value | | | |||
+=========+========+================================================+ | +=========+========+================================================+ | |||
| INCLUDE | Not | All listeners in INCLUDE mode. | | | INCLUDE | Not | All listeners in INCLUDE mode. | | |||
| | Used | | | | | Used | | | |||
+---------+--------+------------------------------------------------+ | +---------+--------+------------------------------------------------+ | |||
| EXCLUDE | Timer | At least one listener in EXCLUDE mode. | | | EXCLUDE | Timer | At least one listener in EXCLUDE mode. | | |||
| | > 0 | | | | | > 0 | | | |||
+---------+--------+------------------------------------------------+ | +---------+--------+------------------------------------------------+ | |||
| EXCLUDE | Timer | No more listeners in EXCLUDE mode for | | | EXCLUDE | Timer | No more listeners in EXCLUDE mode for | | |||
| | == 0 | the multicast address. If the Requested | | | | == 0 | the multicast address. If the Requested | | |||
| | | List is empty, delete Multicast Address | | | | | List is empty, delete Multicast Address | | |||
skipping to change at page 43, line 35 ¶ | skipping to change at line 1936 ¶ | |||
timers per type of Multicast Address Records received. | timers per type of Multicast Address Records received. | |||
In the following, abbreviations are used for several variables (all | In the following, abbreviations are used for several variables (all | |||
of which are described in detail in Section 9). The variable MALI | of which are described in detail in Section 9). The variable MALI | |||
stands for the Multicast Address Listening Interval, which is the | stands for the Multicast Address Listening Interval, which is the | |||
time in which multicast address listening state will time out. The | time in which multicast address listening state will time out. The | |||
variable LLQT is the Last Listener Query Time, which is the total | variable LLQT is the Last Listener Query Time, which is the total | |||
time the router should wait for a report, after the Querier has sent | time the router should wait for a report, after the Querier has sent | |||
the first query. During this time, the Querier should send [Last | the first query. During this time, the Querier should send [Last | |||
Member Query Count]-1 retransmissions of the query. LLQT represents | Member Query Count]-1 retransmissions of the query. LLQT represents | |||
the "leave latency", or the difference between the transmission of a | the "leave latency" or the difference between the transmission of a | |||
listener state change and the modification of the information passed | listener state change and the modification of the information passed | |||
to the routing protocol. | to the routing protocol. | |||
If the router is in INCLUDE filter mode, a source can be added to the | 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 | current Include List if a listener in INCLUDE mode sends a Current | |||
State or a State Change Report which includes that source. Each | State or a State Change Report that includes that source. Each | |||
source from the Include List is associated with a source timer that | source from the Include List is associated with a source timer that | |||
is updated whenever a listener in INCLUDE mode sends a report that | is updated whenever a listener in INCLUDE mode sends a report that | |||
confirms its interest in that specific source. If the timer of a | confirms its interest in that specific source. If the timer of a | |||
source from the Include List expires, the source is deleted from the | source from the Include List expires, the source is deleted from the | |||
Include List. If there are no more source records left, the | Include List. If there are no more source records left, the | |||
multicast address record is deleted from the router. | multicast address record is deleted from the router. | |||
Besides this "soft leave" mechanism, there is also a "fast leave" | Besides this "soft leave" mechanism, there is also a "fast leave" | |||
scheme in MLDv2; it is also based on the use of source timers. When | scheme in MLDv2; it is also based on the use of source timers. When | |||
a node in INCLUDE mode expresses its desire to stop listening to a | a node in INCLUDE mode expresses its desire to stop listening to a | |||
specific source, all the multicast routers on the link lower their | specific source, all the multicast routers on the link lower their | |||
timer for that source to a small interval of LLQT milliseconds. The | timer for that source to a small interval of LLQT milliseconds. The | |||
Querier then sends then a Multicast Address and Source Specific | Querier then sends then a Multicast Address and Source Specific | |||
Query, to verify whether there are other listeners for that source on | Query, to verify whether there are other listeners for that source on | |||
the link, or not. If a corresponding report is received before the | the link, or not. If a corresponding report is received before the | |||
timer expires, all the multicast routers on the link update their | timer expires, all the multicast routers on the link update their | |||
source timer. If not, the source is deleted from the Include List. | source timer. If not, the source is deleted from the Include List. | |||
The handling of the Include List, according to the received reports, | The handling of the Include List, according to the received reports, | |||
is detailed in Section 7.4.1 and Section 7.4.2. | is detailed in Sections 7.4.1 and 7.4.2. | |||
Source timers are treated differently when the Router Filter Mode for | Source timers are treated differently when the Router Filter Mode for | |||
a multicast address is EXCLUDE. For sources from the Requested List | a multicast address is EXCLUDE. For sources from the Requested List, | |||
the source timers have running values; these sources are forwarded by | the source timers have running values; these sources are forwarded by | |||
the router. For sources from the Exclude List the source timers are | the router. For sources from the Exclude List, the source timers are | |||
set to zero; these sources are blocked by the router. If the timer | set to zero; these sources are blocked by the router. If the timer | |||
of a source from the Requested List expires, the source is moved to | of a source from the Requested List expires, the source is moved to | |||
the Exclude List. The router informs then the routing protocol that | the Exclude List. Then, the router informs the routing protocol that | |||
there is no longer a listener on the link interested in traffic from | there is no longer a listener on the link interested in traffic from | |||
this source. | this source. | |||
The router has to maintain the Requested List for two reasons: | The router has to maintain the Requested List for two reasons: | |||
* To keep track of sources that listeners in INCLUDE mode listen to. | 1. To keep track of sources that listeners in INCLUDE mode listen | |||
This is necessary in order to assure a seamless transition of the | to. This is necessary in order to assure a seamless transition | |||
router to INCLUDE mode, when there will be no listener in EXCLUDE | of the router to INCLUDE mode, when there will be no listener in | |||
mode left. This transition should not interrupt the flow of | EXCLUDE mode left. This transition should not interrupt the flow | |||
traffic to the listeners in INCLUDE mode still interested in that | of traffic to the listeners in INCLUDE mode still interested in | |||
multicast address. Therefore, at the moment of the transition, | that multicast address. Therefore, at the moment of the | |||
the Requested List should represent the set of sources that nodes | transition, the Requested List should represent the set of | |||
in INCLUDE mode have explicitly requested. | sources that nodes in INCLUDE mode have explicitly requested. | |||
When the router switches to INCLUDE mode, the sources in the | When the router switches to INCLUDE mode, the sources in the | |||
Requested List are moved to the Include List, and the Exclude List | Requested List are moved to the Include List, and the Exclude | |||
is deleted. Before the switch, the Requested List can contain an | List is deleted. Before the switch, the Requested List can | |||
inexact guess at the sources that listeners in INCLUDE mode listen | contain an inexact guess at the sources that listeners in INCLUDE | |||
to - might be too large or too small. These inexactitudes are due | mode listen to, which might be too large or too small. These | |||
to the fact that the Requested List is also used for fast blocking | inexactitudes are due to the fact that the Requested List is also | |||
purposes, as described below. If such a fast blocking is | used for fast blocking purposes, as described below. If such a | |||
required, some sources may be deleted from the Requested List (as | fast blocking is required, some sources may be deleted from the | |||
shown in Section 7.4.1 and Section 7.4.2) in order to reduce | Requested List (as shown in Sections 7.4.1 and 7.4.2) in order to | |||
router state. Nevertheless, in each such case the Filter Timer is | reduce router state. Nevertheless, in each such case the Filter | |||
updated as well. Therefore, listeners in INCLUDE mode will have | Timer is updated as well. Therefore, listeners in INCLUDE mode | |||
enough time, before an eventual switching, to reconfirm their | will have enough time, before an eventual switching, to reconfirm | |||
interest in the eliminated source(s), and rebuild the Requested | their interest in the eliminated source(s), and rebuild the | |||
List accordingly. The protocol ensures that when a switch to | Requested List accordingly. The protocol ensures that when a | |||
INCLUDE mode occurs, the Requested List will be accurate. Details | switch to INCLUDE mode occurs, the Requested List will be | |||
about the transition of the router to INCLUDE mode are presented | accurate. Details about the transition of the router to INCLUDE | |||
in Appendix A.3. | mode are presented in Appendix A.3. | |||
* To allow a fast blocking of previously unblocked sources. If the | 2. To allow a fast blocking of previously unblocked sources. If the | |||
router receives a report that contains such a request, the | router receives a report that contains such a request, the | |||
concerned sources are added to the Requested List. Their timers | concerned sources are added to the Requested List. Their timers | |||
are set to a small interval of LLQT milliseconds, and a Multicast | are set to a small interval of LLQT milliseconds, and a Multicast | |||
Address and Source Specific Query is sent by the Querier, to check | Address and Source Specific Query is sent by the Querier, to | |||
whether there are nodes on the link still interested in those | check whether there are nodes on the link still interested in | |||
sources, or not. If no node confirms its interest in receiving a | those sources, or not. If no node confirms its interest in | |||
specific source, the timer of that source expires. Then, the | receiving a specific source, the timer of that source expires. | |||
source is moved from the Requested List to the Exclude List. From | Then, the source is moved from the Requested List to the Exclude | |||
then on, the source will be blocked by the router. | List. From then on, the source will be blocked by the router. | |||
The handling of the EXCLUDE mode router state, according to the | The handling of the EXCLUDE mode router state, according to the | |||
received reports, is detailed in Section 7.4.1 and Section 7.4.2. | received reports, is detailed in Sections 7.4.1 and 7.4.2. | |||
When the Router Filter Mode for a multicast address is EXCLUDE, | When the Router Filter Mode for a multicast address is EXCLUDE, | |||
source records are only deleted when the Filter Timer expires, or | source records are only deleted when the Filter Timer expires or when | |||
when newly received Multicast Address Records modify the source | newly received Multicast Address Records modify the source record | |||
record list of the router. | list of the router. | |||
7.3. MLDv2 Source Specific Forwarding Rules | 7.3. MLDv2 Source-Specific Forwarding Rules | |||
When a multicast router receives a datagram from a source destined to | When a multicast router receives a datagram from a source destined to | |||
a particular multicast address, a decision has to be made whether to | a particular multicast address, a decision has to be made whether to | |||
forward the datagram on an attached link or not. The multicast | forward the datagram on an attached link or not. The multicast | |||
routing protocol in use is in charge of this decision, and should use | routing protocol in use is in charge of this decision and should use | |||
the MLDv2 information to ensure that all sources/multicast addresses | the MLDv2 information to ensure that all sources/multicast addresses | |||
that have listeners on a link are forwarded to that link. MLDv2 | that have listeners on a link are forwarded to that link. MLDv2 | |||
information does not override multicast routing information; for | information does not override multicast routing information; for | |||
example, if the MLDv2 filter mode for a multicast address is EXCLUDE, | example, if the MLDv2 filter mode for a multicast address is EXCLUDE, | |||
a router may still forward packets for excluded sources to a transit | a router may still forward packets for excluded sources to a transit | |||
link. | link. | |||
To summarize, the following table describes the forwarding | To summarize, Table 6 below describes the forwarding suggestions made | |||
suggestions made by MLDv2 to the routing protocol for traffic | by MLDv2 to the routing protocol for traffic originating from a | |||
originating from a source destined to a multicast address. It also | source destined to a multicast address. It also summarizes the | |||
summarizes the actions taken upon the expiration of a source timer | actions taken upon the expiration of a source timer based on the | |||
based on the Router Filter Mode of the multicast address. | Router Filter Mode of the multicast address. | |||
+=========+=========+=======================================+ | +=========+=========+=========================================+ | |||
| Router | Source | Action | | | Router | Source | Action | | |||
| Filter | Timer | | | | Filter | Timer | | | |||
| Mode | Value | | | | Mode | Value | | | |||
+=========+=========+=======================================+ | +=========+=========+=========================================+ | |||
| INCLUDE | TIMER > | Suggest to forward traffic from | | | INCLUDE | TIMER > | Suggest to forward traffic from source. | | |||
| | 0 | source | | | | 0 | | | |||
+---------+---------+---------------------------------------+ | +---------+---------+-----------------------------------------+ | |||
| INCLUDE | TIMER | Suggest to stop forwarding traffic | | | INCLUDE | TIMER | Suggest to stop forwarding traffic from | | |||
| | == 0 | from source and remove source record. | | | | == 0 | source and remove the source record. | | |||
| | | If there are no more source records, | | | | | If there are no more source records, | | |||
| | | delete multicast address record | | | | | delete the multicast address record. | | |||
+---------+---------+---------------------------------------+ | +---------+---------+-----------------------------------------+ | |||
| EXCLUDE | TIMER > | Suggest to forward traffic from | | | EXCLUDE | TIMER > | Suggest to forward traffic from source. | | |||
| | 0 | source | | | | 0 | | | |||
+---------+---------+---------------------------------------+ | +---------+---------+-----------------------------------------+ | |||
| EXCLUDE | TIMER | Suggest to not forward traffic from | | | EXCLUDE | TIMER | Suggest to not forward traffic from | | |||
| | == 0 | source. Move the source from the | | | | == 0 | source. Move the source from the | | |||
| | | Requested List to the Exclude List | | | | | Requested List to the Exclude List (DO | | |||
| | | (DO NOT remove source record) | | | | | NOT remove the source record). | | |||
+---------+---------+---------------------------------------+ | +---------+---------+-----------------------------------------+ | |||
| EXCLUDE | No | Suggest to forward traffic from all | | | EXCLUDE | No | Suggest to forward traffic from all | | |||
| | Source | sources | | | | Source | sources. | | |||
| | Element | | | | | Element | | | |||
+---------+---------+---------------------------------------+ | +---------+---------+-----------------------------------------+ | |||
Table 6 | Table 6 | |||
7.4. Action on Reception of Reports | 7.4. Action on Reception of Reports | |||
Upon reception of an MLD message that contains a Report, the router | Upon reception of an MLD message that contains a Report, the router | |||
checks if the source address of the message is a valid link-local | checks if the source address of the message is a valid link-local | |||
address, if the Hop Limit is set to 1, and if the Router Alert option | address, if the Hop Limit is set to 1, and if the Router Alert option | |||
is present in the Hop-By-Hop Options header of the IPv6 packet. If | is present in the Hop-by-Hop Options header of the IPv6 packet. If | |||
any of these checks fails, the packet is dropped. If the validity of | any of these checks fail, the packet is dropped. If the validity of | |||
the MLD message is verified, the router starts to process the Report. | the MLD message is verified, the router starts to process the Report. | |||
SSM-aware routers SHOULD ignore records that contain multicast | SSM-aware routers SHOULD ignore records that contain multicast | |||
addresses in the SSM address range if the record type is | addresses in the SSM address range if the record type is | |||
MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE. SSM-aware routers SHOULD | MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE. SSM-aware routers SHOULD | |||
ignore MLDv1 Report and DONE messages that contain multicast | ignore MLDv1 Report and DONE messages that contain multicast | |||
addresses in the SSM address range, SHOULD NOT use such Reports to | addresses in the SSM address range, SHOULD NOT use such Reports to | |||
establish IP forwarding state, and MAY log an error if it receives | establish IP forwarding state, and MAY log an error if it receives | |||
such a message. | such a message. | |||
skipping to change at page 47, line 18 ¶ | skipping to change at line 2098 ¶ | |||
Filter Timer and its source timers. In some circumstances, the | Filter Timer and its source timers. In some circumstances, the | |||
reception of a type of multicast address record will cause the Router | reception of a type of multicast address record will cause the Router | |||
Filter Mode for that multicast address to change. Table 7 describes | Filter Mode for that multicast address to change. Table 7 describes | |||
the actions, with respect to state and timers, that occur to a | the actions, with respect to state and timers, that occur to a | |||
router's state upon reception of Current State Records. | router's state upon reception of Current State Records. | |||
If the router is in INCLUDE filter mode for a multicast address, we | If the router is in INCLUDE filter mode for a multicast address, we | |||
will use the notation INCLUDE (A), where A denotes the associated | will use the notation INCLUDE (A), where A denotes the associated | |||
Include List. If the router is in EXCLUDE filter mode for a | Include List. If the router is in EXCLUDE filter mode for a | |||
multicast address, we will use the notation EXCLUDE (X,Y), where X | multicast address, we will use the notation EXCLUDE (X,Y), where X | |||
and Y denote the associated Requested List and Exclude List | and Y denote the associated Requested List and Exclude List, | |||
respectively. | respectively. | |||
Within the "Actions" section of the router state tables, we use the | Within the "Actions" section of the router state tables, we use the | |||
notation '(A)=J', which means that the set A of source records should | notation '(A)=J', which means that set A of the source records should | |||
have their source timers set to value J. 'Delete (A)' means that the | have their source timers set to value J. 'Delete (A)' means that set | |||
set A of source records should be deleted. 'Filter Timer = J' means | A of the source records should be deleted. 'Filter Timer = J' means | |||
that the Filter Timer for the multicast address should be set to | that the Filter Timer for the multicast address should be set to | |||
value J. | value J. | |||
+=========+==========+=========+======================+ | +=========+==========+=========+======================+ | |||
| Router | Report | New | Actions | | | Router | Report | New | Actions | | |||
| State | Received | Router | | | | State | Received | Router | | | |||
| | | State | | | | | | State | | | |||
+=========+==========+=========+======================+ | +=========+==========+=========+======================+ | |||
| INCLUDE | IS_IN | INCLUDE | (B)=MALI | | | INCLUDE | IS_IN | INCLUDE | (B)=MALI | | |||
| (A) | (B) | (A+B) | | | | (A) | (B) | (A+B) | | | |||
+---------+----------+---------+----------------------+ | +---------+----------+---------+----------------------+ | |||
| INCLUDE | IS_EX | EXCLUDE | (B-A)=0 | | | INCLUDE | IS_EX | EXCLUDE | (B-A)=0 | | |||
| (A) | (B) | (A*B, | | | | (A) | (B) | (A*B, | | | |||
| | | B-A) | Delete (A-B) | | | | | B-A) | Delete (A-B) | | |||
| | | | | | | | | | | | |||
| | | | Filter Timer=MALI | | | | | | Filter Timer=MALI | | |||
+---------+----------+---------+----------------------+ | +---------+----------+---------+----------------------+ | |||
| EXCLUDE | IS_IN | EXCLUDE | (A)=MALI | | | EXCLUDE | IS_IN | EXCLUDE | (A)=MALI | | |||
| (X,Y) | (A) | (X+A, | | | | (X,Y) | (A) | (X+A, | | | |||
| | | Y-A) | | | | | | Y-A) | | | |||
+---------+----------+---------+----------------------+ | +---------+----------+---------+----------------------+ | |||
| EXCLUDE | IS_EX | EXCLUDE | (A-X-Y)=MALI | | | EXCLUDE | IS_EX | EXCLUDE | (A-X-Y)=MALI | | |||
| (X,Y) | (A) | (A-Y, | | | | (X,Y) | (A) | (A-Y, | | | |||
| | | Y*A) | Delete (X-A) | | | | | Y*A) | Delete (X-A) | | |||
| | | | | | | | | | | | |||
| | | | Delete (Y-A) | | | | | | Delete (Y-A) | | |||
| | | | | | | | | | | | |||
| | | | Filter Timer=MALI | | | | | | Filter Timer=MALI | | |||
+---------+----------+---------+----------------------+ | +---------+----------+---------+----------------------+ | |||
Table 7: Actions for Received Current State Records | Table 7: Actions for Received Current State Records | |||
7.4.2. Reception of Filter Mode Change and Source List Change Records | 7.4.2. Reception of Filter Mode Change and Source List Change Records | |||
When a change in the global state of a multicast address occurs in a | When a change in the global state of a multicast address occurs in a | |||
node, the node sends either a Source List Change Record or a Filter | node, the node sends either a Source List Change Record or a Filter | |||
Mode Change Record for that multicast address. As with Current State | Mode Change Record for that multicast address. As with Current State | |||
Records, routers must act upon these records and possibly change | Records, routers must act upon these records and possibly change | |||
their own state to reflect the new listening state of the link. | their own state to reflect the new listening state of the link. | |||
The Querier must query sources or multicast addresses that are | The Querier must query sources or multicast addresses that are | |||
requested to be no longer forwarded. When a router queries or | requested to be no longer forwarded. When a router queries or | |||
receives a query for a specific set of sources, it lowers its source | receives a query for a specific set of sources, it lowers its source | |||
timers for those sources to a small interval of Last Listener Query | timers for those sources to a small interval of Last Listener Query | |||
Time milliseconds. If multicast address records are received in | Time milliseconds. If multicast address records are received in | |||
response to the queries which express interest in listening the | response to the queries that express interest in listening to the | |||
queried sources, the corresponding timers are updated. | queried sources, the corresponding timers are updated. | |||
Multicast Address Specific queries can also be used in order to | Multicast Address Specific queries can also be used in order to | |||
enable a fast transition of a router from EXCLUDE to INCLUDE mode, in | enable a fast transition of a router from EXCLUDE to INCLUDE mode, in | |||
case a received Multicast Address Record motivates this action. The | case a received Multicast Address Record motivates this action. The | |||
Filter Timer for that multicast address is lowered to a small | Filter Timer for that multicast address is lowered to a small | |||
interval of Last Listener Query Time milliseconds. If any multicast | interval of Last Listener Query Time milliseconds. If any multicast | |||
address records that express EXCLUDE mode interest in the multicast | address records that express EXCLUDE mode interest in the multicast | |||
address are received within this interval, the Filter Timer is | address are received within this interval, the Filter Timer is | |||
updated and the suggestion to the routing protocol to forward the | updated and the suggestion to the routing protocol to forward the | |||
multicast address stands without any interruption. If not, the | multicast address stands without any interruption. If not, the | |||
router will switch to INCLUDE filter mode for that multicast address. | router will switch to INCLUDE filter mode for that multicast address. | |||
During the query period (i.e., Last Listener Query Time milliseconds) | During the query period (i.e., Last Listener Query Time | |||
the MLD component in the router continues to suggest to the routing | milliseconds), the MLD component in the router continues to suggest | |||
protocol to forward traffic from the multicast addresses or sources | to the routing protocol to forward traffic from the multicast | |||
that are queried. It is not until after Last Listener Query Time | addresses or sources that are queried. It is not until after Last | |||
milliseconds without receiving a record that expresses interest in | Listener Query Time milliseconds without receiving a record that | |||
the queried multicast address or sources that the router may prune | expresses interest in the queried multicast address or sources that | |||
the multicast address or sources from the link. | the router may prune the multicast address or sources from the link. | |||
Table 8 describes the changes in multicast address state and the | Table 8 describes the changes in multicast address state and the | |||
action(s) taken when receiving either Filter Mode Change or Source | action(s) taken when receiving either Filter Mode Change or Source | |||
List Change Records. Table 8 also describes the queries which are | List Change Records. Table 8 also describes the queries that are | |||
sent by the Querier when a particular report is received. | sent by the Querier when a particular report is received. | |||
We use the following notation for describing the queries that are | We use the following notation to describe the queries that are sent. | |||
sent. We use the notation 'Q(MA)' to describe a Multicast Address | We use the notation 'Q(MA)' to describe a Multicast Address Specific | |||
Specific Query to the MA multicast address. We use the notation | Query to the MA multicast address. We use the notation 'Q(MA,A)' to | |||
'Q(MA,A)' to describe a Multicast Address and Source Specific Query | describe a Multicast Address and Source Specific Query to the MA | |||
to the MA multicast address with source list A. If source list A is | multicast address with source list A. If source list A is null as a | |||
null as a result of the action (e.g. A*B), then no query is sent as | result of the action (e.g. A*B), then no query is sent as a result of | |||
a result of the operation. | the operation. | |||
In order to maintain protocol robustness, queries defined in the | In order to maintain protocol robustness, queries defined in the | |||
Actions column of Table 8 need to be transmitted [Last Listener Query | Actions column of Table 8 need to be transmitted [Last Listener Query | |||
Count] times, once every [Last Listener Query Interval] period. | Count] times, once every [Last Listener Query Interval] period. | |||
If while scheduling new queries, there are already pending queries to | If while scheduling new queries there are already pending queries to | |||
be retransmitted for the same multicast address, the new and pending | be retransmitted for the same multicast address, the new and pending | |||
queries have to be merged. In addition, received host reports for a | queries have to be merged. In addition, received host reports for a | |||
multicast address with pending queries may affect the contents of | multicast address with pending queries may affect the contents of | |||
those queries. Section 7.6.3 describes the process of building and | those queries. Section 7.6.3 describes the process of building and | |||
maintaining the state of pending queries. | maintaining the state of pending queries. | |||
+=========+==========+====================+========================+ | +=========+==========+====================+========================+ | |||
| Router | Report | New Router State | Actions | | | Router | Report | New Router State | Actions | | |||
| State | Received | | | | | State | Received | | | | |||
+=========+==========+====================+========================+ | +=========+==========+====================+========================+ | |||
| INCLUDE | ALLOW | INCLUDE(A+B) | (B)=MALI | | | INCLUDE | ALLOW | INCLUDE(A+B) | (B)=MALI | | |||
| (A) | (B) | | | | | (A) | (B) | | | | |||
+---------+----------+--------------------+------------------------+ | +---------+----------+--------------------+------------------------+ | |||
| INCLUDE | BLOCK | INCLUDE(A) | Send Q(MA,A*B) | | | INCLUDE | BLOCK | INCLUDE(A) | Send Q(MA,A*B) | | |||
| (A) | (B) | | | | | (A) | (B) | | | | |||
+---------+----------+--------------------+------------------------+ | +---------+----------+--------------------+------------------------+ | |||
| INCLUDE | TO_EX | EXCLUDE(A*B,B-A) | (B-A)=0, Delete (A-B), | | | INCLUDE | TO_EX | EXCLUDE(A*B,B-A) | (B-A)=0, Delete (A-B), | | |||
| (A) | (B) | | Send Q(MA,A*B), Filter | | | (A) | (B) | | Send Q(MA,A*B), Filter | | |||
| | | | Timer=MALI | | | | | | Timer=MALI | | |||
skipping to change at page 51, line 15 ¶ | skipping to change at line 2255 ¶ | |||
multicast address, the router switches to filter mode of INCLUDE with | multicast address, the router switches to filter mode of INCLUDE with | |||
state INCLUDE(X). If at the moment of the switch the Requested List | state INCLUDE(X). If at the moment of the switch the Requested List | |||
(X) is empty, the multicast address record is deleted from the | (X) is empty, the multicast address record is deleted from the | |||
router. | router. | |||
7.6. Action on Reception of Queries | 7.6. Action on Reception of Queries | |||
Upon reception of an MLD message that contains a Query, the router | Upon reception of an MLD message that contains a Query, the router | |||
checks if the source address of the message is a valid link-local | checks if the source address of the message is a valid link-local | |||
address, if the Hop Limit is set to 1, and if the Router Alert option | address, if the Hop Limit is set to 1, and if the Router Alert option | |||
is present in the Hop-By-Hop Options header of the IPv6 packet. If | is present in the Hop-by-Hop Options header of the IPv6 packet. If | |||
any of these checks fails, the packet is dropped. | any of these checks fail, the packet is dropped. | |||
If the validity of the MLD message is verified, the router starts to | If the validity of the MLD message is verified, the router starts to | |||
process the Query. | process the Query. | |||
7.6.1. Timer Updates | 7.6.1. Timer Updates | |||
MLDv2 uses the Suppress Router-Side Processing flag to ensure | MLDv2 uses the S flag to ensure robustness, as explained in | |||
robustness, as explained in Section 2.1. When a router sends or | Section 2.1. When a router sends or receives a query with a clear S | |||
receives a query with a clear Suppress Router-Side Processing flag, | flag, it must update its timers to reflect the correct timeout values | |||
it must update its timers to reflect the correct timeout values for | for the multicast address or sources being queried. The following | |||
the multicast address or sources being queried. The following table | table describes the timer actions when sending or receiving a | |||
describes the timer actions when sending or receiving a Multicast | Multicast Address Specific or Multicast Address and Source Specific | |||
Address Specific or Multicast Address and Source Specific Query with | Query with the S flag not set. | |||
the Suppress Router-Side Processing flag not set. | ||||
Query Action | +=========+=====================================================+ | |||
----- ------ | | Query | Action | | |||
Q(MA,A) Source Timers for sources in A are lowered to LLQT | +=========+=====================================================+ | |||
Q(MA) Filter Timer is lowered to LLQT | | Q(MA,A) | Source Timers for sources in A are lowered to LLQT. | | |||
+---------+-----------------------------------------------------+ | ||||
| Q(MA) | The Filter Timer is lowered to LLQT. | | ||||
+---------+-----------------------------------------------------+ | ||||
When a router sends or receives a query with the Suppress Router-Side | Table 9 | |||
Processing flag set, it will not update its timers. | ||||
When a router sends or receives a query with the S flag set, it will | ||||
not update its timers. | ||||
7.6.2. Querier Election | 7.6.2. Querier Election | |||
MLDv2 elects a single router per subnet to be in Querier state; all | 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. | the other routers on the subnet should be in Non-Querier state. | |||
MLDv2 uses the same querier election mechanism as MLDv1, namely the | MLDv2 uses the same querier election mechanism as MLDv1, namely the | |||
IPv6 address. When a router starts operating on a subnet, by default | IPv6 address. When a router starts operating on a subnet, by default | |||
it considers itself as being the Querier. Thus, it sends several | it considers itself as being the Querier. Thus, it sends several | |||
General Queries separated by a small time interval (see Section 9.6 | General Queries separated by a small time interval (see Sections 9.6 | |||
and Section 9.7 for details). | and 9.7 for details). | |||
When a router receives a query with a lower IPv6 address than its | 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 | own, it sets the Other Querier Present timer to Other Querier Present | |||
Timeout; if it was previously in Querier state, it switches to Non- | Timeout; if it was previously in Querier state, it switches to Non- | |||
Querier state and ceases to send queries on the link. After the | Querier state and ceases to send queries on the link. After the | |||
Other Querier Present timer expires, it should re-enter the Querier | Other Querier Present timer expires, it should re-enter the Querier | |||
state and begin sending General Queries. | state and begin sending General Queries. | |||
All MLDv2 queries MUST be sent with the fe80::/64 link-local source | All MLDv2 queries MUST be sent with the fe80::/64 link-local source | |||
address prefix. Therefore, for the purpose of MLDv2 querier | address prefix. Therefore, for the purpose of MLDv2 querier | |||
skipping to change at page 52, line 25 ¶ | skipping to change at line 2314 ¶ | |||
address B if the interface ID represented by the last 64 bits of | 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 | address A, in big-endian bit order, is lower than the interface ID | |||
represented by the last 64 bits of address B. | represented by the last 64 bits of address B. | |||
7.6.3. Building and Sending Specific Queries | 7.6.3. Building and Sending Specific Queries | |||
7.6.3.1. Building and Sending Multicast Address Specific Queries | 7.6.3.1. Building and Sending Multicast Address Specific Queries | |||
When a table action "Send Q(MA)" is encountered, the Filter Timer | When a table action "Send Q(MA)" is encountered, the Filter Timer | |||
must be lowered to LLQT. The Querier must then immediately send a | must be lowered to LLQT. The Querier must then immediately send a | |||
Multicast Address Specific query as well as schedule [Last Listener | Multicast Address Specific Query as well as schedule [Last Listener | |||
Query Count - 1] query retransmissions to be sent every [Last | Query Count - 1] query retransmissions to be sent every [Last | |||
Listener Query Interval], over [Last Listener Query Time]. | Listener Query Interval], over [Last Listener Query Time]. | |||
When transmitting a Multicast Address Specific Query, if the Filter | When transmitting a Multicast Address Specific Query, if the Filter | |||
Timer is larger than LLQT, the "Suppress Router-Side Processing" bit | Timer is larger than LLQT, the "Suppress Router-Side Processing" bit | |||
is set in the query message. | is set in the query message. | |||
7.6.3.2. Building and Sending Multicast Address and Source Specific | 7.6.3.2. Building and Sending Multicast Address and Source Specific | |||
Queries | Queries | |||
When a table action "Send Q(MA,X)" is encountered by the Querier in | When a table action "Send Q(MA,X)" is encountered by the Querier in | |||
the table in Section 7.4.2, the following actions must be performed | Table 8 (Section 7.4.2), the following actions must be performed for | |||
for each of the sources in X that send to multicast address MA, with | each of the sources in X that send to multicast address MA, with the | |||
source timer larger than LLQT: | source timer larger than LLQT: | |||
* Lower source timer to LLQT; | * lower source timer to LLQT; | |||
* Add the sources to the Retransmission List; | * add the sources to the Retransmission List; and | |||
* Set the Source Retransmission Counter for each source to [Last | * set the Source Retransmission Counter for each source to [Last | |||
Listener Query Count]. | Listener Query Count]. | |||
The Querier must then immediately send a Multicast Address and Source | The Querier must then immediately send a Multicast Address and Source | |||
Specific Query as well as schedule [Last Listener Query Count -1] | Specific Query as well as schedule [Last Listener Query Count -1] | |||
query retransmissions to be sent every [Last Listener Query | query retransmissions to be sent every [Last Listener Query | |||
Interval], over [Last Listener Query Time]. The contents of these | Interval], over [Last Listener Query Time]. The contents of these | |||
queries are calculated as follows. | queries are calculated as follows. | |||
When building a Multicast Address and Source Specific Query for a | When building a Multicast Address and Source Specific Query for a | |||
multicast address MA, two separate query messages are sent for the | multicast address MA, two separate query messages are sent for the | |||
multicast address. The first one has the "Suppress Router-Side | multicast address. The first one has the "Suppress Router-Side | |||
Processing" bit set and contains all the sources with retransmission | Processing" bit set and contains all the sources with retransmission | |||
state (i.e., sources from the Retransmission List of that multicast | state (i.e., sources from the Retransmission List of that multicast | |||
address), and timers greater than LLQT. The second has the "Suppress | address) and timers greater than LLQT. The second has the "Suppress | |||
Router-Side Processing" bit clear and contains all the sources with | Router-Side Processing" bit clear and contains all the sources with | |||
retransmission state and timers lower or equal to LLQT. If either of | retransmission state and timers lower or equal to LLQT. If either of | |||
the two calculated messages does not contain any sources, then its | the two calculated messages does not contain any sources, then its | |||
transmission is suppressed. | transmission is suppressed. | |||
Note: If a Multicast Address Specific query is scheduled to be | Note: If a Multicast Address Specific Query is scheduled to be | |||
transmitted at the same time as a Multicast Address and Source | transmitted at the same time as a Multicast Address and Source | |||
specific query for the same multicast address, then transmission of | Specific Query for the same multicast address, then transmission of | |||
the Multicast Address and Source Specific message with the "Suppress | the Multicast Address and Source Specific message with the "Suppress | |||
Router-Side Processing" bit set may be suppressed. | Router-Side Processing" bit set may be suppressed. | |||
8. Interoperation with MLDv1 | 8. Interoperation with MLDv1 | |||
MLD version 2 hosts and routers interoperate with hosts and routers | MLD version 2 hosts and routers interoperate with hosts and routers | |||
that have not yet been upgraded to MLDv2. This compatibility is | that have not yet been upgraded to MLDv2. This compatibility is | |||
maintained by hosts and routers taking appropriate actions depending | maintained by hosts and routers taking appropriate actions depending | |||
on the versions of MLD operating on hosts and routers within a | on the versions of MLD operating on hosts and routers within a | |||
network. | network. | |||
8.1. Query Version Distinctions | 8.1. Query Version Distinctions | |||
The MLD version of a Multicast Listener Query message is determined | The MLD version of a Multicast Listener Query message is determined | |||
as follows: | as follows: | |||
MLDv1 Query: length = 24 octets | * MLDv1 Query: length = 24 octets | |||
MLDv2 Query: length >= 28 octets | * MLDv2 Query: length >= 28 octets | |||
Query messages that do not match any of the above conditions (e.g., a | Query messages that do not match any of the above conditions (e.g., a | |||
Query of length 26 octets) MUST be silently ignored. | Query of length 26 octets) MUST be silently ignored. | |||
8.2. Multicast Address Listener Behavior | 8.2. Multicast Address Listener Behavior | |||
8.2.1. In the Presence of MLDv1 Routers | 8.2.1. In the Presence of MLDv1 Routers | |||
In order to be compatible with MLDv1 routers, MLDv2 hosts MUST | In order to be compatible with MLDv1 routers, MLDv2 hosts MUST | |||
operate in version 1 compatibility mode. MLDv2 hosts MUST keep state | operate in version 1 compatibility mode. MLDv2 hosts MUST keep state | |||
per local interface regarding the compatibility mode of each attached | per local interface regarding the compatibility mode of each attached | |||
link. A host's compatibility mode is determined from the Host | link. A host's compatibility mode is determined from the Host | |||
Compatibility Mode variable which can be in one of the two states: | Compatibility Mode variable that can be in one of the two states: | |||
MLDv1 or MLDv2. | MLDv1 or MLDv2. | |||
The Host Compatibility Mode of an interface is set to MLDv1 whenever | The Host Compatibility Mode of an interface is set to MLDv1 whenever | |||
an MLDv1 Multicast Address Listener General Query is received on that | an MLDv1 Multicast Address Listener General Query is received on that | |||
interface. At the same time, the Older Version Querier Present timer | interface. At the same time, the Older Version Querier Present timer | |||
for the interface is set to Older Version Querier Present Timeout | for the interface is set to Older Version Querier Present Timeout | |||
seconds. The timer is re-set whenever a new MLDv1 General Query is | seconds. The timer is reset whenever a new MLDv1 General Query is | |||
received on that interface. If the Older Version Querier Present | received on that interface. If the Older Version Querier Present | |||
timer expires, the host switches back to Host Compatibility Mode of | timer expires, the host switches back to Host Compatibility Mode of | |||
MLDv2. | MLDv2. | |||
When Host Compatibility Mode is MLDv2, a host acts using the MLDv2 | When Host Compatibility Mode is MLDv2, a host acts using the MLDv2 | |||
protocol on that interface. When Host Compatibility Mode is MLDv1, a | protocol on that interface. When Host Compatibility Mode is MLDv1, a | |||
host acts in MLDv1 compatibility mode, using only the MLDv1 protocol, | host acts in MLDv1 compatibility mode, using only the MLDv1 protocol, | |||
on that interface. | on that interface. | |||
An MLDv1 Querier will send General Queries with the Maximum Response | An MLDv1 Querier will send General Queries with the Maximum Response | |||
Code set to the desired Maximum Response Delay, i.e., the full range | Code set to the desired Maximum Response Delay, i.e., the full range | |||
of this field is linear and the exponential algorithm described in | of this field is linear and the exponential algorithm described in | |||
Section 5.1.3. is not used. | Section 5.1.3. is not used. | |||
Whenever a host changes its compatibility mode, it cancels all its | Whenever a host changes its compatibility mode, it cancels all its | |||
pending responses and retransmission timers. | pending responses and retransmission timers. | |||
An SSM-aware host that receives an MLDv1 General Query or MLDv1 Group | An SSM-aware host that receives an MLDv1 General Query or MLDv1 Group | |||
Specific Query for a multicast address in the SSM address range | Specific Query for a multicast address in the SSM address range | |||
SHOULD log an error. It is RECOMMENDED that implementions provide a | SHOULD log an error. It is RECOMMENDED that implementations provide | |||
configuration option to disable use of Host Compatibility Mode to | a configuration option to disable the use of Host Compatibility Mode | |||
allow networks to operate only in SSM mode. This configuration | to allow networks to operate only in SSM mode. This configuration | |||
option SHOULD be disabled by default. | option SHOULD be disabled by default. | |||
8.2.2. In the Presence of MLDv1 Multicast Address Listeners | 8.2.2. In the Presence of MLDv1 Multicast Address Listeners | |||
An MLDv2 host may be placed on a link where there are MLDv1 hosts. A | An MLDv2 host may be placed on a link where there are MLDv1 hosts. A | |||
host MAY allow its MLDv2 Multicast Listener Report to be suppressed | host MAY allow its MLDv2 Multicast Listener Report to be suppressed | |||
by a Version 1 Multicast Listener Report. | by a Version 1 Multicast Listener Report. | |||
8.3. Multicast Router Behavior | 8.3. Multicast Router Behavior | |||
skipping to change at page 55, line 6 ¶ | skipping to change at line 2441 ¶ | |||
MLDv1 router. The following requirements apply: | MLDv1 router. The following requirements apply: | |||
* If an MLDv1 router is present on the link, the Querier MUST use | * If an MLDv1 router is present on the link, the Querier MUST use | |||
the lowest version of MLD present on the network. This must be | the lowest version of MLD present on the network. This must be | |||
administratively assured. Routers that desire to be compatible | administratively assured. Routers that desire to be compatible | |||
with MLDv1 MUST have a configuration option to act in MLDv1 mode; | with MLDv1 MUST have a configuration option to act in MLDv1 mode; | |||
if an MLDv1 router is present on the link, the system | if an MLDv1 router is present on the link, the system | |||
administrator must explicitly configure all MLDv2 routers to act | administrator must explicitly configure all MLDv2 routers to act | |||
in MLDv1 mode. When in MLDv1 mode, the Querier MUST send periodic | in MLDv1 mode. When in MLDv1 mode, the Querier MUST send periodic | |||
General Queries truncated at the Multicast Address field (i.e., 24 | General Queries truncated at the Multicast Address field (i.e., 24 | |||
bytes long), and SHOULD also warn about receiving an MLDv2 Query | bytes long) and SHOULD also warn about receiving an MLDv2 Query | |||
(such warnings MUST be rate-limited). The Querier MUST also fill | (such warnings MUST be rate-limited). The Querier MUST also fill | |||
in the Maximum Response Delay in the Maximum Response Code field, | in the Maximum Response Delay in the Maximum Response Code field, | |||
i.e., the exponential algorithm described in Section 5.1.3 is not | i.e., the exponential algorithm described in Section 5.1.3 is not | |||
used. | used. | |||
* If a router is not explicitly configured to use MLDv1 and receives | * If a router is not explicitly configured to use MLDv1 and receives | |||
an MLDv1 General Query, it SHOULD log a warning. These warnings | an MLDv1 General Query, it SHOULD log a warning. These warnings | |||
MUST be rate-limited. | MUST be rate-limited. | |||
* It is RECOMMENDED that implementions provide a configuration | * It is RECOMMENDED that implementations provide a configuration | |||
option to disable use of compatibility mode to allow networks to | option to disable use of compatibility mode to allow networks to | |||
operate only in SSM mode. This configuration option SHOULD be | operate only in SSM mode. This configuration option SHOULD be | |||
disabled by default. | disabled by default. | |||
8.3.2. In the Presence of MLDv1 Multicast Address Listeners | 8.3.2. In the Presence of MLDv1 Multicast Address Listeners | |||
MLDv2 routers may be placed on a network where there are hosts that | MLDv2 routers may be placed on a network where there are hosts that | |||
have not yet been upgraded to MLDv2. In order to be compatible with | have not yet been upgraded to MLDv2. In order to be compatible with | |||
MLDv1 hosts, MLDv2 routers MUST operate in version 1 compatibility | MLDv1 hosts, MLDv2 routers MUST operate in version 1 compatibility | |||
mode. MLDv2 routers keep a compatibility mode per multicast address | mode. MLDv2 routers keep a compatibility mode per multicast address | |||
record. The compatibility mode of a multicast address is determined | record. The compatibility mode of a multicast address is determined | |||
from the Multicast Address Compatibility Mode variable, which can be | from the Multicast Address Compatibility Mode variable, which can be | |||
in one of the two following states: MLDv1 or MLDv2. | in one of the two following states: MLDv1 or MLDv2. | |||
The Multicast Address Compatibility Mode of a multicast address | The Multicast Address Compatibility Mode of a multicast address | |||
record is set to MLDv1 whenever an MLDv1 Multicast Listener Report is | record is set to MLDv1 whenever an MLDv1 Multicast Listener Report is | |||
received for that multicast address. At the same time, the Older | received for that multicast address. At the same time, the Older | |||
Version Host Present timer for the multicast address is set to Older | Version Host Present timer for the multicast address is set to Older | |||
Version Host Present Timeout seconds. The timer is re-set whenever a | Version Host Present Timeout seconds. The timer is reset whenever a | |||
new MLDv1 Report is received for that multicast address. If the | new MLDv1 Report is received for that multicast address. If the | |||
Older Version Host Present timer expires, the router switches back to | Older Version Host Present timer expires, the router switches back to | |||
Multicast Address Compatibility Mode of MLDv2 for that multicast | the Multicast Address Compatibility Mode of MLDv2 for that multicast | |||
address. | address. | |||
Note that when a router switches back to MLDv2 Multicast Address | Note that when a router switches back to MLDv2 Multicast Address | |||
Compatibility Mode for a multicast address, it takes some time to | Compatibility Mode for a multicast address, it takes some time to | |||
regain source-specific state information. Source-specific | regain source-specific state information. Source-specific | |||
information will be learned during the next General Query, but | information will be learned during the next General Query, but | |||
sources that should be blocked will not be blocked until [Multicast | sources that should be blocked will not be blocked until [Multicast | |||
Address Listening Interval] after that. | Address Listening Interval] after that. | |||
When Multicast Address Compatibility Mode is MLDv2, a router acts | When Multicast Address Compatibility Mode is MLDv2, a router acts | |||
using the MLDv2 protocol for that multicast address. When Multicast | using the MLDv2 protocol for that multicast address. When Multicast | |||
Address Compatibility Mode is MLDv1, a router internally translates | Address Compatibility Mode is MLDv1, a router internally translates | |||
the following MLDv1 messages for that multicast address to their | the following MLDv1 messages for that multicast address to their | |||
MLDv2 equivalents (Table 9). | MLDv2 equivalents (Table 10). | |||
+===============+==================+ | +===============+==================+ | |||
| MLDv1 Message | MLDv2 Equivalent | | | MLDv1 Message | MLDv2 Equivalent | | |||
+===============+==================+ | +===============+==================+ | |||
| Report | IS_EX( {} ) | | | Report | IS_EX( {} ) | | |||
+---------------+------------------+ | +---------------+------------------+ | |||
| Done | TO_IN( {} ) | | | Done | TO_IN( {} ) | | |||
+---------------+------------------+ | +---------------+------------------+ | |||
Table 9: MLD Message Translation | Table 10: MLD Message Translation | |||
MLDv2 BLOCK messages are ignored, as are source-lists in TO_EX() | MLDv2 BLOCK messages are ignored, as are source-lists in TO_EX() | |||
messages (i.e., any TO_EX() message is treated as TO_EX( {} )). On | messages (i.e., any TO_EX() message is treated as TO_EX( {} )). On | |||
the other hand, the Querier continues to send MLDv2 queries, | the other hand, the Querier continues to send MLDv2 queries, | |||
regardless of its Multicast Address Compatibility Mode. | regardless of its Multicast Address Compatibility Mode. | |||
9. List of Timers, Counters, and their Default Values | 9. List of Timers, Counters, and Their Default Values | |||
Most of these timers are configurable. If non-default settings are | Most of these timers are configurable. If non-default settings are | |||
used, they MUST be consistent among all nodes on a single link. Note | used, they MUST be consistent among all nodes on a single link. Note | |||
that parentheses are used to group expressions to make the algebra | that parentheses are used to group expressions to make the algebra | |||
clear. | clear. | |||
9.1. Robustness Variable | 9.1. Robustness Variable | |||
The Robustness Variable allows tuning for the expected packet loss on | The Robustness Variable allows tuning for the expected packet loss on | |||
a link. If a link is expected to be lossy, the value of the | a link. If a link is expected to be lossy, the value of the | |||
Robustness Variable may be increased. MLD is robust to [Robustness | Robustness Variable may be increased. MLD is robust to [Robustness | |||
Variable] - 1 packet losses. The value of the Robustness Variable | Variable] - 1 packet losses. The value of the Robustness Variable | |||
MUST NOT be zero, and SHOULD NOT be one. Default value: 2. | MUST NOT be zero and SHOULD NOT be one. Default value: 2. | |||
9.2. Query Interval | 9.2. Query Interval | |||
The Query Interval variable denotes the interval between General | The Query Interval variable denotes the interval between General | |||
Queries sent by the Querier. Default value: 125 seconds. | Queries sent by the Querier. Default value: 125 seconds. | |||
By varying the [Query Interval], an administrator may tune the number | By varying the [Query Interval], an administrator may tune the number | |||
of MLD messages on the link; larger values cause MLD Queries to be | of MLD messages on the link; larger values cause MLD Queries to be | |||
sent less often. | sent less often. | |||
9.3. Query Response Interval | 9.3. Query Response Interval | |||
The Maximum Response Delay used to calculate the Maximum Response | The Query Response Interval is the Maximum Response Delay used to | |||
Code inserted into the periodic General Queries. Default value: | calculate the Maximum Response Code that is inserted into the | |||
10000 (10 seconds) | periodic General Queries. Default value: 10000 (10 seconds) | |||
By varying the [Query Response Interval], an administrator may tune | By varying the [Query Response Interval], an administrator may tune | |||
the burstiness of MLD messages on the link; larger values make the | the burstiness of MLD messages on the link; larger values make the | |||
traffic less bursty, as host responses are spread out over a larger | traffic less bursty, as host responses are spread out over a larger | |||
interval. The number of seconds represented by the [Query Response | interval. The number of seconds represented by the [Query Response | |||
Interval] must be less than the [Query Interval]. | Interval] must be less than the [Query Interval]. | |||
9.4. Multicast Address Listening Interval | 9.4. Multicast Address Listening Interval | |||
The Multicast Address Listening Interval (MALI) is the amount of time | The Multicast Address Listening Interval (MALI) is the amount of time | |||
that must pass before a multicast router decides there are no more | that must pass before a multicast router decides there are no more | |||
listeners of a multicast address or a particular source on a link. | listeners of a multicast address or a particular source on a link. | |||
This value MUST be ([Robustness Variable] times [Query Interval]) | This value MUST be ([Robustness Variable] times [Query Interval]) | |||
plus 2 times [Query Response Interval]. | plus 2 times [Query Response Interval]. | |||
9.5. Other Querier Present Timeout | 9.5. Other Querier Present Timeout | |||
The Other Querier Present Timeout is the length of time that must | The Other Querier Present Timeout is the length of time that must | |||
pass before a multicast router decides that there is no longer | pass before a multicast router decides that there is no longer | |||
another multicast router which should be the Querier. This value | another multicast router that should be the Querier. This value MUST | |||
MUST be ([Robustness Variable] times ([Query Interval]) plus (one | be ([Robustness Variable] times ([Query Interval]) plus (one half of | |||
half of [Query Response Interval]). | [Query Response Interval]). | |||
9.6. Startup Query Interval | 9.6. Startup Query Interval | |||
The Startup Query Interval is the interval between General Queries | The Startup Query Interval is the interval between General Queries | |||
sent by a Querier on startup. Default value: 1/4 the [Query | sent by a Querier on startup. Default value: 1/4 the [Query | |||
Interval]. | Interval]. | |||
9.7. Startup Query Count | 9.7. Startup Query Count | |||
The Startup Query Count is the number of Queries sent out on startup, | The Startup Query Count is the number of Queries sent out on startup, | |||
separated by the Startup Query Interval. Default value: [Robustness | separated by the Startup Query Interval. Default value: [Robustness | |||
Variable]. | Variable]. | |||
9.8. Last Listener Query Interval | 9.8. Last Listener Query Interval | |||
The Last Listener Query Interval is the Maximum Response Delay used | The Last Listener Query Interval (LLQI) is the Maximum Response Delay | |||
to calculate the Maximum Response Code inserted into Multicast | used to calculate the Maximum Response Code inserted into Multicast | |||
Address Specific Queries sent in response to Version 1 Multicast | Address Specific Queries sent in response to Version 1 Multicast | |||
Listener Done messages. It is also the Maximum Response Delay used | Listener Done messages. It is also the Maximum Response Delay used | |||
to calculate the Maximum Response Code inserted into Multicast | to calculate the Maximum Response Code inserted into Multicast | |||
Address and Source Specific Query messages. Default value: 1000 (1 | Address and Source Specific Query messages. Default value: 1000 (1 | |||
second). | second). | |||
Note that for values of LLQI greater than 32.768 seconds, a limited | Note that for values of LLQI greater than 32.768 seconds, a limited | |||
set of values can be represented, corresponding to sequential values | set of values can be represented, corresponding to sequential values | |||
of Maximum Response Code. When converting a configured time to a | of Maximum Response Code. When converting a configured time to a | |||
Maximum Response Code value, it is recommended to use the exact value | Maximum Response Code value, it is recommended to use the exact value | |||
skipping to change at page 58, line 30 ¶ | skipping to change at line 2602 ¶ | |||
Specific Queries sent before the router assumes there are no local | Specific Queries sent before the router assumes there are no local | |||
listeners. The Last Listener Query Count is also the number of | listeners. The Last Listener Query Count is also the number of | |||
Multicast Address and Source Specific Queries sent before the router | Multicast Address and Source Specific Queries sent before the router | |||
assumes there are no listeners for a particular source. Default | assumes there are no listeners for a particular source. Default | |||
value: [Robustness Variable]. | value: [Robustness Variable]. | |||
9.10. Last Listener Query Time | 9.10. Last Listener Query Time | |||
The Last Listener Query Time is the time value represented by the | The Last Listener Query Time is the time value represented by the | |||
Last Listener Query Interval, multiplied by [Last Listener Query | Last Listener Query Interval, multiplied by [Last Listener Query | |||
Count]. It is not a tunable value, but may be tuned by changing its | Count]. It is not a tunable value, but it may be tuned by changing | |||
components. | its components. | |||
9.11. Unsolicited Report Interval | 9.11. Unsolicited Report Interval | |||
The Unsolicited Report Interval is the time between repetitions of a | The Unsolicited Report Interval is the time between repetitions of a | |||
node's initial report of interest in a multicast address. Default | node's initial report of interest in a multicast address. Default | |||
value: 1 second. | value: 1 second. | |||
9.12. Older Version Querier Present Timeout | 9.12. Older Version Querier Present Timeout | |||
The Older Version Querier Present Timeout is the time-out for | The Older Version Querier Present Timeout is the timeout for | |||
transitioning a host back to MLDv2 Host Compatibility Mode. When an | transitioning a host back to MLDv2 Host Compatibility Mode. When an | |||
MLDv1 query is received, MLDv2 hosts set their Older Version Querier | MLDv1 query is received, MLDv2 hosts set their Older Version Querier | |||
Present Timer to [Older Version Querier Present Timeout]. | Present Timer to [Older Version Querier Present Timeout]. | |||
This value MUST be ([Robustness Variable] times (the [Query Interval] | This value MUST be ([Robustness Variable] times (the [Query Interval] | |||
in the last Query received)) plus ([Query Response Interval]). | in the last Query received)) plus ([Query Response Interval]). | |||
9.13. Older Version Host Present Timeout | 9.13. Older Version Host Present Timeout | |||
The Older Version Host Present Timeout is the time-out for | The Older Version Host Present Timeout is the timeout for | |||
transitioning a router back to MLDv2 Multicast Address Compatibility | transitioning a router back to MLDv2 Multicast Address Compatibility | |||
Mode for a specific multicast address. When an MLDv1 report is | Mode for a specific multicast address. When an MLDv1 report is | |||
received for that multicast address, routers set their Older Version | received for that multicast address, routers set their Older Version | |||
Host Present Timer to [Older Version Host Present Timeout]. | Host Present Timer to [Older Version Host Present Timeout]. | |||
This value MUST be ([Robustness Variable] times [Query Interval]) | This value MUST be ([Robustness Variable] times [Query Interval]) | |||
plus ([Query Response Interval]). | plus ([Query Response Interval]). | |||
9.14. Configuring timers | 9.14. Configuring Timers | |||
This section is meant to provide advice to network administrators on | This section is meant to provide advice to network administrators on | |||
how to tune these settings to their network. Ambitious router | how to tune these settings to their network. Ambitious router | |||
implementations might tune these settings dynamically based upon | implementations might tune these settings dynamically based upon | |||
changing characteristics of the network. | changing characteristics of the network. | |||
9.14.1. Robustness Variable | 9.14.1. Robustness Variable | |||
The Robustness Variable tunes MLD to expected losses on a link. | The Robustness Variable tunes MLD to expected losses on a link. | |||
MLDv2 is robust to [Robustness Variable] - 1 packet losses, e.g., if | MLDv2 is robust to [Robustness Variable] - 1 packet losses, e.g., if | |||
skipping to change at page 59, line 51 ¶ | skipping to change at line 2667 ¶ | |||
be equal to or greater than the Maximum Response Delay used to | be equal to or greater than the Maximum Response Delay used to | |||
calculate the Maximum Response Code inserted in General Query | calculate the Maximum Response Code inserted in General Query | |||
messages. | messages. | |||
9.14.3. Maximum Response Delay | 9.14.3. Maximum Response Delay | |||
The burstiness of MLD traffic is inversely proportional to the | The burstiness of MLD traffic is inversely proportional to the | |||
Maximum Response Delay. A longer Maximum Response Delay will spread | Maximum Response Delay. A longer Maximum Response Delay will spread | |||
Report messages over a longer interval. However, a longer Maximum | Report messages over a longer interval. However, a longer Maximum | |||
Response Delay in Multicast Address Specific and Multicast Address | Response Delay in Multicast Address Specific and Multicast Address | |||
And Source Specific Queries extends the leave latency (the time | and Source Specific Queries extends the leave latency (the time | |||
between when the last listener stops listening to a source or | between when the last listener stops listening to a source or | |||
multicast address and when the traffic stops flowing.) The expected | multicast address and when the traffic stops flowing.) The expected | |||
rate of Report messages can be calculated by dividing the expected | rate of Report messages can be calculated by dividing the expected | |||
number of Reporters by the Maximum Response Delay. The Maximum | number of Reporters by the Maximum Response Delay. The Maximum | |||
Response Delay may be dynamically calculated (shown in Table 10) per | Response Delay may be dynamically calculated (as shown in Table 11) | |||
Query by using the expected number of Reporters for that Query. | per Query by using the expected number of Reporters for that Query. | |||
+=======================+==========================================+ | +=======================+==========================================+ | |||
| Query Type | Expected Number of Reporters | | | Query Type | Expected Number of Reporters | | |||
+=======================+==========================================+ | +=======================+==========================================+ | |||
| General Query | All nodes on link | | | General Query | All nodes on the link. | | |||
+-----------------------+------------------------------------------+ | +-----------------------+------------------------------------------+ | |||
| Multicast Address | All nodes on the link that had expressed | | | Multicast Address | All nodes on the link that had expressed | | |||
| Specific Query | interest in the multicast address | | | Specific Query | interest in the multicast address. | | |||
+-----------------------+------------------------------------------+ | +-----------------------+------------------------------------------+ | |||
| Multicast Address and | All nodes on the link that had expressed | | | Multicast Address and | All nodes on the link that had expressed | | |||
| Source Specific Query | interest in the source and multicast | | | Source Specific Query | interest in the source and multicast | | |||
| | address | | | | address. | | |||
+-----------------------+------------------------------------------+ | +-----------------------+------------------------------------------+ | |||
Table 10: Maximum Response Delay Calculation | Table 11: Maximum Response Delay Calculation | |||
A router is not required to calculate these populations or tune the | A router is not required to calculate these populations or tune the | |||
Maximum Response Delay dynamically; these are simply guidelines. | Maximum Response Delay dynamically; these are simply guidelines. | |||
10. Security Considerations | 10. Security Considerations | |||
MLD does not contain any cryptographic protection thus its messages | MLD does not contain any cryptographic protection, thus its messages | |||
are not authenticated, the message contents are not confidential, and | are not authenticated, the message contents are not confidential, and | |||
any message can be replayed. The ability to replay messages does not | any message can be replayed. The ability to replay messages does not | |||
affect the behavior of the protocol itself. | affect the behavior of the protocol itself. | |||
Replaying messages can lead to multicast forwarding state to remain | Replaying messages can lead to multicast forwarding state to remain | |||
active beyond the needs of group members on a link. Excessive | active beyond the needs of group members on a link. Excessive | |||
retention of multicast state may lead to resource exhaustion in some | retention of multicast state may lead to resource exhaustion in some | |||
devices. | devices. | |||
The lack of confidentiality allows any device with access to the link | The lack of confidentiality allows any device with access to the link | |||
to determine which multicast groups are being requested. This is a | to determine which multicast groups are being requested. This is a | |||
privacy issue as some multicast content may be sensitive. | privacy issue as some multicast content may be sensitive. | |||
The lack of authentication allows for the creation of forged | The lack of authentication allows for the creation of forged | |||
messages. Note that before processing an MLD message, nodes verify | messages. Note that before processing an MLD message, nodes verify | |||
if the source address of the message is a valid link-local address | 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 | (or the unspecified address), if the Hop Limit is set to 1, and if | |||
the Router Alert option is present in the Hop-By-Hop Options header | 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 | of the IPv6 packet. If any of these checks fails, the packet is | |||
dropped. This defends the MLDv2 nodes from acting on forged MLD | dropped. This defends the MLDv2 nodes from acting on forged MLD | |||
messages originated off-link. Therefore, in the following we discuss | messages originated off-link. Therefore, we discuss only the effects | |||
only the effects of on-link forgery. | of on-link forgery in the following section. | |||
10.1. Query Message | 10.1. Query Message | |||
A forged Query message from a machine with a lower IPv6 address than | A forged Query message from a machine with a lower IPv6 address than | |||
the current Querier will cause Querier duties to be assigned to the | the current Querier will cause Querier duties to be assigned to the | |||
forger. If the forger then sends no more Query messages, other | forger. If the forger then sends no more Query messages, other | |||
routers' Other Querier Present timer will time out and one will | routers' Other Querier Present timer will time out and one will | |||
resume the role of Querier. During this time, if the forger ignores | resume the role of Querier. During this time, if the forger ignores | |||
Multicast Listener Done Messages, traffic might flow to multicast | Multicast Listener Done messages, traffic might flow to multicast | |||
addresses with no listeners for up to [Multicast Address Listener | addresses with no listeners for up to [Multicast Address Listener | |||
Interval]. | Interval]. | |||
A forged Version 1 Query message will put MLDv2 listeners on that | A forged Version 1 Query message will put MLDv2 listeners on that | |||
link in MLDv1 Host Compatibility Mode. This scenario can be avoided | link in MLDv1 Host Compatibility Mode. This scenario can be avoided | |||
by providing MLDv2 hosts with a configuration option to ignore | by providing MLDv2 hosts with a configuration option to ignore | |||
Version 1 messages completely. | Version 1 messages completely. | |||
A DoS attack on a node could be staged through forged Multicast | A DoS attack on a node could be staged through forged Multicast | |||
Address and Source Specific Queries. The attacker can find out about | Address and Source Specific Queries. The attacker can find out about | |||
the listening state of a specific node with a general query. After | the listening state of a specific node with a general query. After | |||
that it could send a large number of Multicast Address and Source | that, it could send a large number of Multicast Address and Source | |||
Specific Queries, each with a large source list and/or long Maximum | Specific Queries, each with a large source list and/or long Maximum | |||
Response Delay. The node will have to store and maintain the sources | Response Delay. The node will have to store and maintain the sources | |||
specified in all of those queries for as long as it takes to send the | specified in all of those queries for as long as it takes to send the | |||
delayed response. This would consume both memory and CPU cycles in | delayed response. This would consume both memory and CPU cycles in | |||
order to augment the recorded sources with the source lists included | order to augment the recorded sources with the source lists included | |||
in the successive queries. | in the successive queries. | |||
To protect against such a DoS attack, a node stack implementation | To protect against such a DoS attack, a node stack implementation | |||
could restrict the number of Multicast Address and Source Specific | could restrict the number of Multicast Address and Source Specific | |||
Queries per multicast address within this interval, and/or record | Queries per multicast address within this interval and/or record only | |||
only a limited number of sources. | a limited number of sources. | |||
10.2. Current State Report messages | 10.2. Current State Report Messages | |||
A forged Report message may cause multicast routers to think there | A forged Report message may cause multicast routers to think there | |||
are listeners of a multicast address on a link when there are not. | are listeners of a multicast address on a link when there are not. | |||
Nevertheless, since listening to a multicast address on a host is | Nevertheless, since listening to a multicast address on a host is | |||
generally an unprivileged operation, a local user may trivially gain | generally an unprivileged operation, a local user may trivially gain | |||
the same result without forging any messages. If a large number of | the same result without forging any messages. If a large number of | |||
forged Report messages are generated, a multicast router may consume | forged Report messages are generated, a multicast router may consume | |||
significant resources maintaining multicast forwarding state. | significant resources maintaining multicast forwarding state. | |||
A forged Version 1 Report Message may put a router into MLDv1 | A forged Version 1 Report Message may put a router into MLDv1 | |||
Multicast Address Compatibility Mode for a particular multicast | Multicast Address Compatibility Mode for a particular multicast | |||
address, meaning that the router will ignore MLDv2 source specific | address, meaning that the router will ignore MLDv2 source-specific | |||
state messages. This can cause traffic to flow from unwanted sources | state messages. This can cause traffic to flow from unwanted sources | |||
for up to [Multicast Address Listener Interval]. This can be solved | for up to [Multicast Address Listener Interval]. This can be solved | |||
by providing routers with a configuration switch to ignore Version 1 | by providing routers with a configuration switch to ignore Version 1 | |||
messages completely. This breaks automatic compatibility with | messages completely. This breaks automatic compatibility with | |||
Version 1 hosts, so it should only be used in situations where source | Version 1 hosts, so it should only be used in situations where source | |||
filtering is critical. | filtering is critical. | |||
10.3. State Change Report messages | 10.3. State Change Report Messages | |||
A forged State Change Report message will cause the Querier to send | A forged State Change Report message will cause the Querier to send | |||
out Multicast Address Specific or Multicast Address and Source | out Multicast Address Specific or Multicast Address and Source | |||
Specific Queries for the multicast address in question. This causes | Specific Queries for the multicast address in question. This causes | |||
extra processing on each router and on each listener of the multicast | extra processing on each router and on each listener of the multicast | |||
address, but cannot cause loss of desired traffic. | address, but it cannot cause loss of desired traffic. | |||
11. IANA Considerations | 11. IANA Considerations | |||
IANA has assigned the IPv6 link-local multicast address ff02::16, | IANA has assigned the IPv6 link-local multicast address ff02::16, | |||
called "all MLDv2-capable routers", as described in Section 5.2.15. | called "all MLDv2-capable routers", as described in Section 5.2.15. | |||
Version 2 Multicast Listener Reports will be sent to this special | Version 2 Multicast Listener Reports will be sent to this special | |||
address. The reference for this assignment should be changed to this | address. | |||
document upon publication as an RFC. | ||||
In addition, IANA has assigned the ICMPv6 message type value of 143 | In addition, IANA has assigned the ICMPv6 message Type value of 143 | |||
for Version 2 Multicast Listener Report messages, as specified in | for Version 2 Multicast Listener Report messages, as specified in | |||
Section 4. The reference for this assignment should be changed to | Section 4. | |||
this document upon publication as an RFC. | ||||
12. Contributors | ||||
Roland Vida, Luis Henrique Maciel Kosmalski Costa, Serge Fdida, Steve | ||||
Deering, Bill Fenner, and Isidor Kouvelas are the authors of RFC | ||||
3810, which makes up the majority of the content in this document. | ||||
Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe and Tim Winters | ||||
have contributed valuable content to this version of the | ||||
specification. | ||||
13. Acknowledgments | ||||
We would like to thank 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. | ||||
Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable | ||||
feedback on this version of the specification and we thank them for | ||||
their input. | ||||
14. References | ||||
14.1. Normative References | 12. References | |||
[I-D.ietf-pim-3228bis] | 12.1. Normative References | |||
Haberman, B., "IANA Considerations for Internet Group | ||||
Management Protocols", Work in Progress, Internet-Draft, | ||||
draft-ietf-pim-3228bis-06, 13 June 2024, | ||||
<https://datatracker.ietf.org/doc/html/draft-ietf-pim- | ||||
3228bis-06>. | ||||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<https://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet | [RFC2464] Crawford, M., "Transmission of IPv6 Packets over Ethernet | |||
Networks", RFC 2464, DOI 10.17487/RFC2464, December 1998, | Networks", RFC 2464, DOI 10.17487/RFC2464, December 1998, | |||
<https://www.rfc-editor.org/info/rfc2464>. | <https://www.rfc-editor.org/info/rfc2464>. | |||
skipping to change at page 64, line 30 ¶ | skipping to change at line 2841 ¶ | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | |||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | |||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | May 2017, <https://www.rfc-editor.org/info/rfc8174>. | |||
[RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | [RFC8200] Deering, S. and R. Hinden, "Internet Protocol, Version 6 | |||
(IPv6) Specification", STD 86, RFC 8200, | (IPv6) Specification", STD 86, RFC 8200, | |||
DOI 10.17487/RFC8200, July 2017, | DOI 10.17487/RFC8200, July 2017, | |||
<https://www.rfc-editor.org/info/rfc8200>. | <https://www.rfc-editor.org/info/rfc8200>. | |||
14.2. Informative References | [RFC9778] Haberman, B., Ed., "IANA Considerations for Internet Group | |||
Management Protocols", BCP 57, RFC 9778, | ||||
DOI 10.17487/RFC9778, March 2025, | ||||
<https://www.rfc-editor.org/info/rfc9778>. | ||||
[RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | 12.2. Informative References | |||
Thyagarajan, "Internet Group Management Protocol, Version | ||||
3", RFC 3376, DOI 10.17487/RFC3376, October 2002, | ||||
<https://www.rfc-editor.org/info/rfc3376>. | ||||
[RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific | [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific | |||
Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July | Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July | |||
2003, <https://www.rfc-editor.org/info/rfc3569>. | 2003, <https://www.rfc-editor.org/info/rfc3569>. | |||
[RFC3678] Thaler, D., Fenner, B., and B. Quinn, "Socket Interface | [RFC3678] Thaler, D., Fenner, B., and B. Quinn, "Socket Interface | |||
Extensions for Multicast Source Filters", RFC 3678, | Extensions for Multicast Source Filters", RFC 3678, | |||
DOI 10.17487/RFC3678, January 2004, | DOI 10.17487/RFC3678, January 2004, | |||
<https://www.rfc-editor.org/info/rfc3678>. | <https://www.rfc-editor.org/info/rfc3678>. | |||
skipping to change at page 65, line 15 ¶ | skipping to change at line 2872 ¶ | |||
[RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | [RFC4861] Narten, T., Nordmark, E., Simpson, W., and H. Soliman, | |||
"Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | "Neighbor Discovery for IP version 6 (IPv6)", RFC 4861, | |||
DOI 10.17487/RFC4861, September 2007, | DOI 10.17487/RFC4861, September 2007, | |||
<https://www.rfc-editor.org/info/rfc4861>. | <https://www.rfc-editor.org/info/rfc4861>. | |||
[RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | [RFC4862] Thomson, S., Narten, T., and T. Jinmei, "IPv6 Stateless | |||
Address Autoconfiguration", RFC 4862, | Address Autoconfiguration", RFC 4862, | |||
DOI 10.17487/RFC4862, September 2007, | DOI 10.17487/RFC4862, September 2007, | |||
<https://www.rfc-editor.org/info/rfc4862>. | <https://www.rfc-editor.org/info/rfc4862>. | |||
[RFC9776] Haberman, B., "Internet Group Management Protocol, Version | ||||
3", STD 100, RFC 9776, DOI 10.17487/RFC9776, March 2025, | ||||
<https://www.rfc-editor.org/info/rfc9776>. | ||||
Appendix A. Design Rationale | Appendix A. Design Rationale | |||
A.1. The Need for State Change Messages | A.1. The Need for State Change Messages | |||
MLDv2 specifies two types of Multicast Listener Reports: Current | MLDv2 specifies two types of Multicast Listener Reports: Current | |||
State and State Change. This section describes the rationale for the | State and State Change. This section describes the rationale for the | |||
need for both these types of Reports. | need for both these types of Reports. | |||
Routers need to distinguish Multicast Listener Reports that were sent | Routers need to distinguish Multicast Listener Reports that were sent | |||
in response to Queries from those that were sent as a result of a | in response to Queries from those that were sent as a result of a | |||
skipping to change at page 65, line 47 ¶ | skipping to change at line 2908 ¶ | |||
A.2. Host Suppression | A.2. Host Suppression | |||
In MLDv1, a host would not send a pending multicast listener report | In MLDv1, a host would not send a pending multicast listener report | |||
if a similar report was sent by another listener on the link. In | if a similar report was sent by another listener on the link. In | |||
MLDv2, the suppression of multicast listener reports has been | MLDv2, the suppression of multicast listener reports has been | |||
removed. The following points explain this decision. | removed. The following points explain this decision. | |||
1. Routers may want to track per-host multicast listener status on | 1. Routers may want to track per-host multicast listener status on | |||
an interface. This would allow routers to implement fast leaves | an interface. This would allow routers to implement fast leaves | |||
(e.g., for layered multicast congestion control schemes), as well | (e.g., for layered multicast congestion control schemes) as well | |||
as track listener status for possible security or accounting | as track listener status for possible security or accounting | |||
purposes. The present specification does not require routers to | purposes. The present specification does not require routers to | |||
implement per-host tracking. Nevertheless, the lack of host | implement per-host tracking. Nevertheless, the lack of host | |||
suppression in MLDv2 makes possible to implement either | suppression in MLDv2 makes it possible to implement either | |||
proprietary or future standard behavior of multicast routers that | proprietary or future standard behavior of multicast routers that | |||
would support per-host tracking, while being fully interoperable | would support per-host tracking, while being fully interoperable | |||
with MLDv2 listeners and routers that implement the exact | with MLDv2 listeners and routers that implement the exact | |||
behavior described in this specification. | behavior described in this specification. | |||
2. Multicast Listener Report suppression does not work well on | 2. Multicast Listener Report suppression does not work well on | |||
bridged LANs. Many bridges and Layer2/Layer3 switches that | bridged LANs. Many bridges and Layer 2 / Layer 3 switches that | |||
implement MLD snooping do not forward MLD messages across LAN | implement MLD snooping do not forward MLD messages across LAN | |||
segments in order to prevent multicast listener report | segments in order to prevent multicast listener report | |||
suppression. | suppression. | |||
3. By eliminating multicast listener report suppression, hosts have | 3. By eliminating multicast listener report suppression, hosts have | |||
fewer messages to process; this leads to a simpler state machine | fewer messages to process; this leads to a simpler state machine | |||
implementation. | implementation. | |||
4. In MLDv2, a single multicast listener report now bundles multiple | 4. In MLDv2, a single multicast listener report now bundles multiple | |||
multicast address records to decrease the number of packets sent. | multicast address records to decrease the number of packets sent. | |||
In comparison, the previous version of MLD required that each | In comparison, the previous version of MLD required that each | |||
multicast address be reported in a separate message. | multicast address be reported in a separate message. | |||
A.3. Switching router filter modes from EXCLUDE to INCLUDE | A.3. Switching Router Filter Modes from EXCLUDE to INCLUDE | |||
If on a link there are nodes in both EXCLUDE and INCLUDE modes for a | If on a link there are nodes in both EXCLUDE and INCLUDE modes for a | |||
single multicast address, the router must be in EXCLUDE mode as well | single multicast address, the router must be in EXCLUDE mode as well | |||
(see section 7.2.1). In EXCLUDE mode, a router forwards traffic from | (see Section 7.2.1). In EXCLUDE mode, a router forwards traffic from | |||
all sources except those in the Exclude List. If all nodes in | all sources except those in the Exclude List. If all nodes in | |||
EXCLUDE mode cease to exist or to listen, it would be desirable for | EXCLUDE mode cease to exist or to listen, it would be desirable for | |||
the router to switch back to INCLUDE mode seamlessly, without | the router to switch back to INCLUDE mode seamlessly, without | |||
interrupting the flow of traffic to existing listeners. | interrupting the flow of traffic to existing listeners. | |||
One of the ways to accomplish this is for routers to keep track of | One of the ways to accomplish this is for routers to keep track of | |||
all sources that nodes that are in INCLUDE mode listen to, even | all sources that nodes that are in INCLUDE mode listen to, even | |||
though the router itself is in EXCLUDE mode. If the Filter Timer for | though the router itself is in EXCLUDE mode. If the Filter Timer for | |||
a multicast address expires, it implies that there are no nodes in | a multicast address expires, it implies that there are no nodes in | |||
EXCLUDE mode on the link (otherwise a multicast listener report from | EXCLUDE mode on the link (otherwise, a multicast listener report from | |||
that node would have refreshed the Filter Timer). The router can | that node would have refreshed the Filter Timer). The router can | |||
then switch to INCLUDE mode seamlessly; sources from the Requested | then switch to INCLUDE mode seamlessly; sources from the Requested | |||
List are moved to the Include List, while sources from the Exclude | List are moved to the Include List, while sources from the Exclude | |||
List are deleted. | List are deleted. | |||
Appendix B. Summary of Changes | Appendix B. Summary of Changes | |||
B.1. MLDv1 | B.1. MLDv1 | |||
The following is a summary of changes from MLDv1, specified in | The following is a summary of changes from MLDv1, specified in | |||
skipping to change at page 67, line 20 ¶ | skipping to change at line 2977 ¶ | |||
each multicast address. This enables packet filtering based on a | each multicast address. This enables packet filtering based on a | |||
socket's multicast reception state. | socket's multicast reception state. | |||
* MLDv2 state kept on routers includes a filter mode and a list of | * MLDv2 state kept on routers includes a filter mode and a list of | |||
sources and source timers for each multicast address that has | sources and source timers for each multicast address that has | |||
listeners on the link. MLDv1 routers kept only the list of | listeners on the link. MLDv1 routers kept only the list of | |||
multicast addresses. | multicast addresses. | |||
* Queries include additional fields (Section 5.1). | * Queries include additional fields (Section 5.1). | |||
* The S flag (Suppress Router-Side Processing) is included in | * The S flag is included in queries in order to fix robustness | |||
queries in order to fix robustness issues. | issues. | |||
* The Querier's Robustness Variable and Query Interval Code are | * The Querier's Robustness Variable and Query Interval Code are | |||
included in Queries in order to synchronize all MLDv2 routers | included in Queries in order to synchronize all MLDv2 routers | |||
connected to the same link. | connected to the same link. | |||
* A new Query type (Multicast Address and Source Specific Query) is | * A new Query type (Multicast Address and Source Specific Query) is | |||
introduced. | introduced. | |||
* The Maximum Response Delay is not directly included in the Query | * The Maximum Response Delay is not directly included in the Query | |||
anymore. Instead, an exponential algorithm is used to calculate | anymore. Instead, an exponential algorithm is used to calculate | |||
its value, based on the Maximum Response Code included in the | its value, based on the Maximum Response Code included in the | |||
Query. The maximum value is increased from 65535 milliseconds to | Query. The maximum value is increased from 65535 milliseconds to | |||
about 140 minutes. | about 140 minutes. | |||
* Reports include Multicast Address Records. Information on the | * Reports include Multicast Address Records. Information on the | |||
listening state for several different multicast addresses can be | listening state for several different multicast addresses can be | |||
included in the same Report message. | included in the same Report message. | |||
* Reports are sent to the "all MLDv2-capable multicast routers" | * Reports are sent to the "all MLDv2-capable multicast routers" | |||
address, instead of the multicast address the host listens to, as | address, instead of the multicast address the host listens to, as | |||
in MLDv1. This facilitates the operation of layer-2 snooping | in MLDv1. This facilitates the operation of Layer 2 snooping | |||
switches. | switches. | |||
* There is no "host suppression", as in MLDv1. All nodes send | * There is no "host suppression", as in MLDv1. All nodes send | |||
Report messages. | Report messages. | |||
* Unsolicited Reports, announcing changes in receiver listening | * Unsolicited Reports, announcing changes in receiver listening | |||
state, are sent [Robustness Variable] times. RFC 2710 is less | state, are sent [Robustness Variable] times. [RFC2710] is less | |||
explicit. | explicit. | |||
* There are no Done messages. | * There are no Done messages. | |||
* Interoperability with MLDv1 systems is achieved by MLDv2 state | * Interoperability with MLDv1 systems is achieved by MLDv2 state | |||
operations. | operations. | |||
* In order to ensure interoperability, hosts maintain a Host | * In order to ensure interoperability, hosts maintain a Host | |||
Compatibility Mode variable and an Older Version Querier Present | Compatibility Mode variable and an Older Version Querier Present | |||
timer per interface. Routers maintain a Multicast Address | timer per interface. Routers maintain a Multicast Address | |||
skipping to change at page 68, line 24 ¶ | skipping to change at line 3030 ¶ | |||
B.2. Changes since RFC 3810 | B.2. Changes since RFC 3810 | |||
The following summarizes the changes made since [RFC3810]. | The following summarizes the changes made since [RFC3810]. | |||
* Added definition of Resv to address Erratum 4773. | * Added definition of Resv to address Erratum 4773. | |||
* Added clarifying text on which multicast addresses require the | * Added clarifying text on which multicast addresses require the | |||
sending of MLD messages to address Erratum 5977. | sending of MLD messages to address Erratum 5977. | |||
* Added text to clarify the Group Membership Interval timer changes | * Added text to clarify the Group Membership Interval timer changes | |||
from Erratum 6725. | per Erratum 6725. | |||
* Changed Reserved field in messages to Flags field to facilitate | * Changed "Reserved field" to "Flags field" in messages to | |||
use of an IANA-managed registry for future bit allocations. | facilitate use of an IANA-managed registry for future bit | |||
allocations. | ||||
Acknowledgments | ||||
We would like to thank 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 specification. | ||||
Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable | ||||
feedback on this specification, and we thank them for their input. | ||||
Contributors | ||||
Roland Vida, Luis Henrique Maciel Kosmalski Costa, Serge Fdida, Steve | ||||
Deering, Bill Fenner, and Isidor Kouvelas are the authors of RFC | ||||
3810, which makes up the majority of the content in this | ||||
specification. | ||||
Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe, and Tim Winters | ||||
have contributed valuable content to this specification. | ||||
Author's Address | Author's Address | |||
Brian Haberman (editor) | Brian Haberman (editor) | |||
Johns Hopkins University Applied Physics Lab | Johns Hopkins University Applied Physics Lab | |||
Email: brian@innovationslab.net | Email: brian@innovationslab.net | |||
End of changes. 222 change blocks. | ||||
694 lines changed or deleted | 689 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |