rfc9776.original | rfc9776.txt | |||
---|---|---|---|---|
Network Working Group B. Haberman, Ed. | Internet Engineering Task Force (IETF) B. Haberman, Ed. | |||
Internet-Draft JHU APL | Request for Comments: 9776 JHU APL | |||
Obsoletes: 3376 (if approved) 27 August 2024 | STD: 100 March 2025 | |||
Updates: 2236 (if approved) | Obsoletes: 3376 | |||
Intended status: Standards Track | Updates: 2236 | |||
Expires: 28 February 2025 | Category: Standards Track | |||
ISSN: 2070-1721 | ||||
Internet Group Management Protocol, Version 3 | Internet Group Management Protocol, Version 3 | |||
draft-ietf-pim-3376bis-12 | ||||
Abstract | Abstract | |||
IGMP is the protocol used by IPv4 systems to report their IP | The Internet Group Management Protocol (IGMP) is the protocol used by | |||
multicast group memberships to neighboring multicast routers. | IPv4 systems to report their IP multicast group memberships to | |||
Version 3 of IGMP adds support for source filtering, that is, the | neighboring multicast routers. Version 3 of IGMP (IGMPv3) adds | |||
ability for a system to report interest in receiving packets only | support for source filtering, that is, the ability for a system to | |||
from specific source addresses, or from all but specific source | report interest in receiving packets only from specific source | |||
addresses, sent to a particular multicast address. That information | addresses, or from all but specific source addresses, sent to a | |||
may be used by multicast routing protocols to avoid delivering | particular multicast address. That information may be used by | |||
multicast packets from specific sources to networks where there are | multicast routing protocols to avoid delivering multicast packets | |||
no interested receivers. | from specific sources to networks where there are no interested | |||
receivers. | ||||
This document specifies Version 3 of the Internet Group Management | This document specifies IGMPv3. It is a revised version of RFC 3376 | |||
Protocol, IGMPv3. It is a revised version of the specification to | that includes clarifications and fixes for errata, and it is backward | |||
include clarifications and fixes for errata in RFC 3376 and is | compatible with RFC 3376. | |||
backwards compatible with RFC 3376. | ||||
This document updates RFC 2236 and obsoletes RFC 3376. | This document updates RFC 2236 and obsoletes RFC 3376. | |||
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/rfc9776. | ||||
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 . . . . . . . . . . . . . . . . . . . . . . . . 4 | 1. Introduction | |||
1.1. Conventions Used in This Document . . . . . . . . . . . . 5 | 1.1. Conventions Used in This Document | |||
2. The Service Interface for Requesting IP Multicast | 2. The Service Interface for Requesting IP Multicast Reception | |||
Reception . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Multicast Reception State Maintained by Systems | |||
3. Multicast Reception State Maintained by Systems . . . . . . . 7 | 3.1. Socket State | |||
3.1. Socket State . . . . . . . . . . . . . . . . . . . . . . 7 | 3.2. Interface State | |||
3.2. Interface State . . . . . . . . . . . . . . . . . . . . . 8 | 4. Message Formats | |||
4. Message Formats . . . . . . . . . . . . . . . . . . . . . . . 10 | 4.1. Membership Query Message | |||
4.1. Membership Query Message . . . . . . . . . . . . . . . . 11 | 4.1.1. Max Resp Code | |||
4.1.1. Max Resp Code . . . . . . . . . . . . . . . . . . . . 12 | 4.1.2. Checksum | |||
4.1.2. Checksum . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.3. Group Address | |||
4.1.3. Group Address . . . . . . . . . . . . . . . . . . . . 12 | 4.1.4. Flags | |||
4.1.4. Flags . . . . . . . . . . . . . . . . . . . . . . . . 12 | 4.1.5. S Flag (Suppress Router-Side Processing) | |||
4.1.5. S Flag (Suppress Router-Side Processing) . . . . . . 13 | 4.1.6. QRV (Querier's Robustness Variable) | |||
4.1.6. QRV (Querier's Robustness Variable) . . . . . . . . . 13 | 4.1.7. QQIC (Querier's Query Interval Code) | |||
4.1.7. QQIC (Querier's Query Interval Code) . . . . . . . . 13 | 4.1.8. Number of Sources (N) | |||
4.1.8. Number of Sources (N) . . . . . . . . . . . . . . . . 14 | 4.1.9. Source Address [i] | |||
4.1.9. Source Address [i] . . . . . . . . . . . . . . . . . 14 | 4.1.10. Additional Data | |||
4.1.10. Additional Data . . . . . . . . . . . . . . . . . . . 14 | 4.1.11. Query Variants | |||
4.1.11. Query Variants . . . . . . . . . . . . . . . . . . . 14 | 4.1.12. IP Destination Addresses for Queries | |||
4.1.12. IP Destination Addresses for Queries . . . . . . . . 15 | 4.2. Version 3 Membership Report Message | |||
4.2. Version 3 Membership Report Message . . . . . . . . . . . 15 | 4.2.1. Reserved | |||
4.2.1. Reserved . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.2. Checksum | |||
4.2.2. Checksum . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.3. Flags | |||
4.2.3. Flags . . . . . . . . . . . . . . . . . . . . . . . . 17 | 4.2.4. Number of Group Records (M) | |||
4.2.4. Number of Group Records (M) . . . . . . . . . . . . . 17 | 4.2.5. Group Record | |||
4.2.5. Group Record . . . . . . . . . . . . . . . . . . . . 18 | 4.2.6. Record Type | |||
4.2.6. Record Type . . . . . . . . . . . . . . . . . . . . . 18 | 4.2.7. Aux Data Len | |||
4.2.7. Aux Data Len . . . . . . . . . . . . . . . . . . . . 18 | 4.2.8. Number of Sources (N) | |||
4.2.8. Number of Sources (N) . . . . . . . . . . . . . . . . 18 | 4.2.9. Multicast Address | |||
4.2.9. Multicast Address . . . . . . . . . . . . . . . . . . 18 | 4.2.10. Source Address [i] | |||
4.2.10. Source Address [i] . . . . . . . . . . . . . . . . . 18 | 4.2.11. Auxiliary Data | |||
4.2.11. Auxiliary Data . . . . . . . . . . . . . . . . . . . 18 | 4.2.12. Additional Data | |||
4.2.12. Additional Data . . . . . . . . . . . . . . . . . . . 19 | 4.2.13. Group Record Types | |||
4.2.13. Group Record Types . . . . . . . . . . . . . . . . . 19 | 4.2.14. IP Source Addresses for Reports | |||
4.2.14. IP Source Addresses for Reports . . . . . . . . . . . 21 | 4.2.15. IP Destination Addresses for Reports | |||
4.2.15. IP Destination Addresses for Reports . . . . . . . . 21 | 4.2.16. Notation for Group Records | |||
4.2.16. Notation for Group Records . . . . . . . . . . . . . 21 | 4.2.17. Membership Report Size | |||
4.2.17. Membership Report Size . . . . . . . . . . . . . . . 22 | 5. Description of the Protocol for Group Members | |||
5. Description of the Protocol for Group Members . . . . . . . . 22 | 5.1. Action on Change of Interface State | |||
5.1. Action on Change of Interface State . . . . . . . . . . . 23 | 5.2. Action on Reception of a Query | |||
5.2. Action on Reception of a Query . . . . . . . . . . . . . 26 | 6. Description of the Protocol for Multicast Routers | |||
6. Description of the Protocol for Multicast Routers . . . . . . 28 | 6.1. Conditions for IGMP Queries | |||
6.1. Conditions for IGMP Queries . . . . . . . . . . . . . . . 29 | 6.2. IGMP State Maintained by Multicast Routers | |||
6.2. IGMP State Maintained by Multicast Routers . . . . . . . 30 | 6.2.1. Definition of Router Filter-Mode | |||
6.2.1. Definition of Router Filter-Mode . . . . . . . . . . 30 | 6.2.2. Definition of Group Timers | |||
6.2.2. Definition of Group Timers . . . . . . . . . . . . . 31 | 6.2.3. Definition of Source Timers | |||
6.2.3. Definition of Source Timers . . . . . . . . . . . . . 32 | 6.3. IGMPv3 Source-Specific Forwarding Rules | |||
6.3. IGMPv3 Source-Specific Forwarding Rules . . . . . . . . . 33 | 6.4. Action on Reception of Reports | |||
6.4. Action on Reception of Reports . . . . . . . . . . . . . 34 | 6.4.1. Reception of Current-State Records | |||
6.4.1. Reception of Current-State Records . . . . . . . . . 34 | ||||
6.4.2. Reception of Filter-Mode-Change and Source-List-Change | 6.4.2. Reception of Filter-Mode-Change and Source-List-Change | |||
Records . . . . . . . . . . . . . . . . . . . . . . . 36 | Records | |||
6.5. Switching Router Filter-Modes . . . . . . . . . . . . . . 37 | 6.5. Switching Router Filter-Modes | |||
6.6. Action on Reception of Queries . . . . . . . . . . . . . 38 | 6.6. Action on Reception of Queries | |||
6.6.1. Timer Updates . . . . . . . . . . . . . . . . . . . . 38 | 6.6.1. Timer Updates | |||
6.6.2. Querier Election . . . . . . . . . . . . . . . . . . 38 | 6.6.2. Querier Election | |||
6.6.3. Building and Sending Specific Queries . . . . . . . . 39 | 6.6.3. Building and Sending Specific Queries | |||
7. Interoperation With Older Versions of IGMP . . . . . . . . . 40 | 7. Interoperation With Older Versions of IGMP | |||
7.1. Query Version Distinctions . . . . . . . . . . . . . . . 40 | 7.1. Query Version Distinctions | |||
7.2. Group Member Behavior . . . . . . . . . . . . . . . . . . 40 | 7.2. Group Member Behavior | |||
7.2.1. In the Presence of Older Version Queriers . . . . . . 40 | 7.2.1. In the Presence of Older Version Queriers | |||
7.2.2. In the Presence of Older Version Group Members . . . 42 | 7.2.2. In the Presence of Older Version Group Members | |||
7.3. Multicast Router Behavior . . . . . . . . . . . . . . . . 42 | 7.3. Multicast Router Behavior | |||
7.3.1. In the Presence of Older Version Queriers . . . . . . 42 | 7.3.1. In the Presence of Older Version Queriers | |||
7.3.2. In the Presence of Older Version Group Members . . . 43 | 7.3.2. In the Presence of Older Version Group Members | |||
8. List of Timers, Counters and Their Default Values . . . . . . 45 | 8. List of Timers, Counters, and Their Default Values | |||
8.1. Robustness Variable . . . . . . . . . . . . . . . . . . . 45 | 8.1. Robustness Variable | |||
8.2. Query Interval . . . . . . . . . . . . . . . . . . . . . 45 | 8.2. Query Interval | |||
8.3. Query Response Interval . . . . . . . . . . . . . . . . . 45 | 8.3. Query Response Interval | |||
8.4. Group Membership Interval . . . . . . . . . . . . . . . . 46 | 8.4. Group Membership Interval | |||
8.5. Other Querier Present Interval . . . . . . . . . . . . . 46 | 8.5. Other Querier Present Interval | |||
8.6. Startup Query Interval . . . . . . . . . . . . . . . . . 46 | 8.6. Startup Query Interval | |||
8.7. Startup Query Count . . . . . . . . . . . . . . . . . . . 46 | 8.7. Startup Query Count | |||
8.8. Last Member Query Interval . . . . . . . . . . . . . . . 46 | 8.8. Last Member Query Interval | |||
8.9. Last Member Query Count . . . . . . . . . . . . . . . . . 47 | 8.9. Last Member Query Count | |||
8.10. Last Member Query Time . . . . . . . . . . . . . . . . . 47 | 8.10. Last Member Query Time | |||
8.11. Unsolicited Report Interval . . . . . . . . . . . . . . . 47 | 8.11. Unsolicited Report Interval | |||
8.12. Older Version Querier Present Interval . . . . . . . . . 47 | 8.12. Older Version Querier Present Interval | |||
8.13. Older Host Present Interval . . . . . . . . . . . . . . . 47 | 8.13. Older Host Present Interval | |||
8.14. Configuring Timers . . . . . . . . . . . . . . . . . . . 48 | 8.14. Configuring Timers | |||
8.14.1. Robustness Variable . . . . . . . . . . . . . . . . 48 | 8.14.1. Robustness Variable | |||
8.14.2. Query Interval . . . . . . . . . . . . . . . . . . . 48 | 8.14.2. Query Interval | |||
8.14.3. Max Response Time . . . . . . . . . . . . . . . . . 48 | 8.14.3. Max Response Time | |||
9. Security Considerations . . . . . . . . . . . . . . . . . . . 49 | 9. Security Considerations | |||
9.1. Query Message . . . . . . . . . . . . . . . . . . . . . . 49 | 9.1. Query Message | |||
9.2. Current-State Report messages . . . . . . . . . . . . . . 50 | 9.2. Current-State Report Messages | |||
9.3. State-Change Report Messages . . . . . . . . . . . . . . 51 | 9.3. State-Change Report Messages | |||
9.4. IPsec Usage . . . . . . . . . . . . . . . . . . . . . . . 52 | 9.4. IPsec Usage | |||
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 52 | 10. IANA Considerations | |||
11. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 52 | 11. References | |||
12. Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . 53 | 11.1. Normative References | |||
13. References . . . . . . . . . . . . . . . . . . . . . . . . . 53 | 11.2. Informative References | |||
13.1. Normative References . . . . . . . . . . . . . . . . . . 53 | Appendix A. Design Rationale | |||
13.2. Informative References . . . . . . . . . . . . . . . . . 54 | A.1. The Need for State-Change Messages | |||
Appendix A. Design Rationale . . . . . . . . . . . . . . . . . . 54 | A.2. Host Suppression | |||
A.1. The Need for State-Change Messages . . . . . . . . . . . 54 | A.3. Switching Router Filter Modes from EXCLUDE to INCLUDE | |||
A.2. Host Suppression . . . . . . . . . . . . . . . . . . . . 55 | Appendix B. Summary of Changes from IGMPv2 | |||
A.3. Switching Router Filter Modes from EXCLUDE to INCLUDE . . 55 | Appendix C. Summary of Changes from RFC 3376 | |||
Appendix B. Summary of Changes from IGMPv2 . . . . . . . . . . . 56 | Acknowledgments | |||
Appendix C. Summary of Changes from RFC 3376 . . . . . . . . . . 56 | Contributors | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 57 | Author's Address | |||
1. Introduction | 1. Introduction | |||
The Internet Group Management Protocol (IGMP) is used by IPv4 systems | The Internet Group Management Protocol (IGMP) is used by IPv4 systems | |||
(hosts and routers) to report their IP multicast group memberships to | (hosts and routers) to report their IP multicast group memberships to | |||
any neighboring multicast routers. Note that an IP multicast router | any neighboring multicast routers. Note that an IP multicast router | |||
may itself be a member of one or more multicast groups, in which case | may itself be a member of one or more multicast groups, in which case | |||
it performs both the multicast router part of the protocol (to | it performs both the multicast router part of the protocol (to | |||
collect the membership information needed by its multicast routing | collect the membership information needed by its multicast routing | |||
protocol) and the group member part of the protocol (to inform itself | protocol) and the group member part of the protocol (to inform itself | |||
and other, neighboring multicast routers of its memberships). | and other, neighboring multicast routers of its memberships). | |||
IGMP is also used for other IP multicast management functions, using | IGMP is also used for other IP multicast management functions, using | |||
message types other than those used for group membership reporting. | message types other than those used for group membership reporting. | |||
This document specifies only the group membership reporting functions | This document specifies only the group membership reporting functions | |||
and messages. | and messages. | |||
This document specifies Version 3 of IGMP. Version 1, specified in | This document specifies Version 3 of IGMP. Version 1, specified in | |||
[RFC1112], was the first widely-deployed version and the first | [RFC1112], was the first widely deployed version and the first | |||
version to become an Internet Standard. Version 2, specified in | version to become an Internet Standard. Version 2, specified in | |||
[RFC2236], added support for low leave latency, that is, a reduction | [RFC2236], added support for low leave latency, that is, a reduction | |||
in the time it takes for a multicast router to learn that there are | in the time it takes for a multicast router to learn that there are | |||
no longer any members of a particular group present on an attached | no longer any members of a particular group present on an attached | |||
network. Version 3 adds support for source filtering, that is, the | network. Version 3 adds support for source filtering, that is, the | |||
ability for a system to report interest in receiving packets only | ability for a system to report interest in receiving packets only | |||
from specific source addresses, as required to support Source- | from specific source addresses, as required to support Source- | |||
Specific Multicast [RFC3569], or from all but specific source | Specific Multicast (SSM) [RFC3569], or from all but specific source | |||
addresses, sent to a particular multicast address. Version 3 is | addresses, sent to a particular multicast address. Version 3 is | |||
designed to be interoperable with Versions 1 and 2. | designed to be interoperable with Versions 1 and 2. | |||
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 updates [RFC2236] as a proper implementation of Version | This document updates [RFC2236] as a proper implementation of Version | |||
3 of IGMP needs to implement Version 2 Report and Leave message | 3 of IGMP needs to implement Version 2 Report and Leave message | |||
handling. | handling. | |||
This document obsoletes [RFC3376] as it provides clarifications and | This document obsoletes [RFC3376] as it provides clarifications and | |||
fixes for errata in RFC 3376. Detailed updates for those changes are | fixes for errata in [RFC3376]. Detailed updates for those changes | |||
described in Appendix C. | are described in Appendix C. | |||
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 BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | 14 [RFC2119] [RFC8174] when, and only when, they appear in all | |||
capitals, as shown here. | capitals, as shown here. | |||
2. The Service Interface for Requesting IP Multicast Reception | 2. The Service Interface for Requesting IP Multicast Reception | |||
skipping to change at page 6, line 52 ¶ | skipping to change at line 283 ¶ | |||
NOT be less than 64 addresses per list. When an operation causes | NOT be less than 64 addresses per list. When an operation causes | |||
the source list size limit to be exceeded, the service interface | the source list size limit to be exceeded, the service interface | |||
MUST return an error. | MUST return an error. | |||
For a given combination of socket, interface, and multicast address, | For a given combination of socket, interface, and multicast address, | |||
only a single filter mode and source list can be in effect at any one | only a single filter mode and source list can be in effect at any one | |||
time. However, either the filter mode or the source list, or both, | time. However, either the filter mode or the source list, or both, | |||
may be changed by subsequent IPMulticastListen requests that specify | may be changed by subsequent IPMulticastListen requests that specify | |||
the same socket, interface, and multicast address. Each subsequent | the same socket, interface, and multicast address. Each subsequent | |||
request completely replaces any earlier request for the given socket, | request completely replaces any earlier request for the given socket, | |||
interface and multicast address. | interface, and multicast address. | |||
Previous versions of IGMP did not support source filters and had a | Previous versions of IGMP did not support source filters and had a | |||
simpler service interface consisting of Join and Leave operations to | simpler service interface consisting of Join and Leave operations to | |||
enable and disable reception of a given multicast address (from all | enable and disable reception of a given multicast address (from all | |||
sources) on a given interface. The equivalent operations in the new | sources) on a given interface. The equivalent operations in the new | |||
service interface follow: | service interface follow: | |||
The Join operation is equivalent to: | The Join operation is equivalent to: | |||
IPMulticastListen ( socket, interface, multicast-address, | IPMulticastListen ( socket, interface, multicast-address, | |||
skipping to change at page 8, line 14 ¶ | skipping to change at line 340 ¶ | |||
3.2. Interface State | 3.2. Interface State | |||
In addition to the per-socket multicast reception state, a system | In addition to the per-socket multicast reception state, a system | |||
must also maintain or compute multicast reception state for each of | must also maintain or compute multicast reception state for each of | |||
its interfaces. That state conceptually consists of a set of records | its interfaces. That state conceptually consists of a set of records | |||
of the form: | of the form: | |||
(multicast-address, filter-mode, source-list) | (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 the per-socket state when different | state, but it may differ from the per-socket state when different | |||
sockets have differing filter modes and/or source lists for the same | sockets have differing filter modes and/or source lists for the same | |||
multicast address and interface. For example, suppose one | multicast address and interface. For example, suppose one | |||
application or process invokes the following operation on socket s1: | application or process invokes the following operation on socket s1: | |||
IPMulticastListen ( s1, i, m, INCLUDE, {a, b, c} ) | IPMulticastListen ( 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 source a, b, or c. Suppose another | address m, only if they come from source a, b, or c. Suppose another | |||
application or process invokes the following operation on socket s2: | application or process invokes the following operation on socket s2: | |||
skipping to change at page 8, line 40 ¶ | skipping to change at line 366 ¶ | |||
same multicast address m, only if they come from sources b, c, or d. | same multicast address m, only if they come from sources b, c, or d. | |||
In order to satisfy the reception requirements of both sockets, it is | In order to satisfy the reception requirements of both sockets, it is | |||
necessary for interface i to receive packets sent to m from any one | necessary for interface i to receive packets sent to m from any one | |||
of the sources a, b, c, or d. Thus, in this example, the reception | of the sources a, b, c, or d. Thus, in this example, the reception | |||
state of interface i for multicast address m has filter mode INCLUDE | state of interface i for multicast address m has filter mode INCLUDE | |||
and source list {a, b, c, d}. | and source list {a, b, c, d}. | |||
After a multicast packet has been accepted from an interface by the | After a multicast packet has been accepted from an interface by the | |||
IP layer, its subsequent delivery to the application or process | IP layer, its subsequent delivery to the application or process | |||
listening on a particular socket depends on the multicast reception | listening on a particular socket depends on the multicast reception | |||
state of that socket [and possibly also on other conditions, such as | state of that socket (and possibly also on other conditions, such as | |||
what transport-layer port the socket is bound to]. So, in the above | what transport-layer port the socket is bound to). So, in the above | |||
example, if a packet arrives on interface i, destined to multicast | example, if a packet arrives on interface i, destined to multicast | |||
address m, with source address a, it will be delivered on socket s1 | address m, with source address a, it will be delivered on socket s1 | |||
but not on socket s2. Note that IGMP Queries and Reports are not | but not on socket s2. Note that IGMP Queries and Reports are not | |||
subject to source filtering and must always be processed by hosts and | subject to source filtering and must always be processed by hosts and | |||
routers. | routers. | |||
Filtering of packets based upon a socket's multicast reception state | Filtering of packets based upon a socket's multicast reception state | |||
is a new feature of this service interface. The previous service | is a new feature of this service interface. The previous service | |||
interface [RFC1112] described no filtering based upon multicast join | interface [RFC1112] described no filtering based upon multicast join | |||
state; rather, a join on a socket simply caused the host to join a | state; rather, a join on a socket simply caused the host to join a | |||
group on the given interface, and packets destined for that group | group on the given interface, and packets destined for that group | |||
could be delivered to all sockets whether they had joined or not. | could be delivered to all sockets whether they had joined or not. | |||
The general rules for deriving the per-interface state from the per- | The general rules for deriving the per-interface state from the per- | |||
socket state are as follows: For each distinct (interface, multicast- | socket state are as follows: For each distinct (interface, multicast- | |||
address) pair that appears in any socket state, a per- interface | address) pair that appears in any socket state, a per-interface | |||
record is created for that multicast address on that interface. | record is created for that multicast address on that interface. | |||
Considering all socket records containing the same (interface, | Considering all socket records containing the same (interface, | |||
multicast-address) pair, | 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 to | An implementation MUST NOT use an EXCLUDE interface record to | |||
represent a group when all sockets for this group are in INCLUDE | represent a group when all sockets for this group are in INCLUDE | |||
state. If system resource limits are reached when an interface | state. If system resource limits are reached when an interface | |||
state source list is calculated, an error MUST be returned to the | state source list is calculated, an error MUST be returned to the | |||
application which requested the operation. | application that requested the operation. | |||
The above rules for deriving the interface state are (re-)evaluated | The above rules for deriving the interface state are (re-)evaluated | |||
whenever an IPMulticastListen invocation modifies the socket state by | whenever an IPMulticastListen invocation modifies the socket state by | |||
adding, deleting, or modifying a per-socket state record. Note that | adding, deleting, or modifying a per-socket state record. Note that | |||
a change of socket state does not necessarily result in a change of | a change of socket state does not necessarily result in a change of | |||
interface state. | interface state. | |||
4. Message Formats | 4. Message Formats | |||
IGMP messages are encapsulated in IPv4 datagrams, with an IP protocol | IGMP messages are encapsulated in IPv4 datagrams, with an IP protocol | |||
number of 2. Every IGMP message described in this document is sent | number of 2. Every IGMP message described in this document is sent | |||
with an IP Time-to-Live of 1, IP Precedence of Internetwork Control | with an IP Time-to-Live of 1, IP Precedence of Internetwork Control | |||
(e.g., Type of Service 0xc0), and carries an IP Router Alert option | (e.g., Type of Service 0xc0), and carries an IP Router Alert option | |||
[RFC2113] in its IP header. IGMP message types are registered per | [RFC2113] in its IP header. IGMP message types are registered per | |||
[I-D.ietf-pim-3228bis]. | [RFC9778]. | |||
There are two IGMP message types of concern to the IGMPv3 protocol | There are two IGMP message types of concern to the IGMPv3 protocol | |||
described in this document: | described in this document: | |||
+===================+=============================+ | +===================+=============================+ | |||
| Type Number (hex) | Message Name | | | Type Number (hex) | Message Name | | |||
+===================+=============================+ | +===================+=============================+ | |||
| 0x11 | Membership Query | | | 0x11 | Membership Query | | |||
+-------------------+-----------------------------+ | +-------------------+-----------------------------+ | |||
| 0x22 | Version 3 Membership Report | | | 0x22 | Version 3 Membership Report | | |||
+-------------------+-----------------------------+ | +-------------------+-----------------------------+ | |||
Table 1: New messages introduced by IGMP3 | Table 1: New Messages Introduced by IGMPv3 | |||
An implementation of IGMPv3 MUST also support the following three | An implementation of IGMPv3 MUST also support the following three | |||
message types, for interoperation with previous versions of IGMP (see | message types, for interoperation with previous versions of IGMP (see | |||
Section 7): | Section 7): | |||
+===================+=============================+===========+ | +===================+=============================+===========+ | |||
| Type Number (hex) | Message Name | Reference | | | Type Number (hex) | Message Name | Reference | | |||
+===================+=============================+===========+ | +===================+=============================+===========+ | |||
| 0x12 | Version 1 Membership Report | [RFC1112] | | | 0x12 | Version 1 Membership Report | [RFC1112] | | |||
+-------------------+-----------------------------+-----------+ | +-------------------+-----------------------------+-----------+ | |||
| 0x16 | Version 2 Membership Report | [RFC2236] | | | 0x16 | Version 2 Membership Report | [RFC2236] | | |||
+-------------------+-----------------------------+-----------+ | +-------------------+-----------------------------+-----------+ | |||
| 0x17 | Version 2 Leave Group | [RFC2236] | | | 0x17 | Version 2 Leave Group | [RFC2236] | | |||
+-------------------+-----------------------------+-----------+ | +-------------------+-----------------------------+-----------+ | |||
Table 2: Legacy IGMP messages | Table 2: Legacy IGMP Messages | |||
Unrecognized message types MUST be silently ignored. Other message | Unrecognized message types MUST be silently ignored. Other message | |||
types may be used by newer versions or extensions of IGMP, by | types may be used by newer versions or extensions of IGMP, by | |||
multicast routing protocols, or for other uses. | 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 IGMP Membership Queries and IGMP | "Query" and "Report" refer to IGMP Membership Queries and IGMP | |||
Version 3 Membership Reports, respectively. | Version 3 Membership Reports, respectively. | |||
4.1. Membership Query Message | 4.1. Membership Query Message | |||
skipping to change at page 12, line 8 ¶ | skipping to change at line 517 ¶ | |||
. . . | . . . | |||
+- -+ | +- -+ | |||
| Source Address [N] | | | Source Address [N] | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 1: IGMPv3 Query Message | Figure 1: IGMPv3 Query Message | |||
4.1.1. Max Resp Code | 4.1.1. Max Resp Code | |||
The Max Resp Code field specifies the maximum time allowed before | The Max Resp Code field specifies the maximum time allowed before | |||
sending a responding report. The actual time allowed, called the Max | sending a responding report. The actual time allowed, called the | |||
Resp Time, is represented in units of 1/10 second and is derived from | "Max Resp Time", is represented in units of 1/10 second and is | |||
the Max Resp Code as follows: | derived from the Max Resp Code as follows: | |||
If Max Resp Code < 128, Max Resp Time = Max Resp Code | * If Max Resp Code < 128, Max Resp Time = Max Resp Code | |||
If Max Resp Code >= 128, Max Resp Code represents a floating-point | * If Max Resp Code >= 128, Max Resp Code represents a floating-point | |||
value as follows: | 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 | | |||
+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+ | |||
Max Resp Time = (mant | 0x10) << (exp + 3) | Max Resp Time = (mant | 0x10) << (exp + 3) | |||
Figure 2: Max Resp Code Representation | Figure 2: Max Resp Code Representation | |||
Small values of Max Resp Time allow IGMPv3 routers to tune the "leave | Small values of Max Resp Time allow IGMPv3 routers to tune the "leave | |||
latency" (the time between the moment the last host leaves a group | latency" (the time between the moment the last host leaves a group | |||
and the moment the routing protocol is notified that there are no | and the moment the routing protocol is notified that there are no | |||
more members). Larger values, especially in the exponential range, | more members). Larger values, especially in the exponential range, | |||
allow tuning of the burstiness of IGMP traffic on a network. | allow tuning of the burstiness of IGMP traffic on a network. | |||
4.1.2. Checksum | 4.1.2. Checksum | |||
The Checksum is the 16-bit one's complement of the one's complement | The Checksum field is the 16-bit one's complement of the one's | |||
sum of the whole IGMP message (the entire IP payload). For computing | complement sum of the whole IGMP message (the entire IP payload). | |||
the checksum, the Checksum field is set to zero. When receiving | For computing the checksum, the Checksum field is set to zero. When | |||
packets, the checksum MUST be verified before processing a packet | receiving packets, the checksum MUST be verified before processing a | |||
[RFC1071]. | packet [RFC1071]. | |||
4.1.3. Group Address | 4.1.3. Group Address | |||
The Group Address field is set to zero when sending a General Query, | The Group Address field is set to zero when sending a General Query | |||
and set to the IP multicast address being queried when sending a | and set to the IP multicast address being queried when sending a | |||
Group-Specific Query or Group-and-Source-Specific Query (see | Group-Specific Query or Group-and-Source-Specific Query (see | |||
Section 4.1.9, below). | Section 4.1.9, below). | |||
4.1.4. Flags | 4.1.4. Flags | |||
The Flags field is a bitstring managed by an IANA registry defined in | The Flags field is a bitstring managed by the "IGMP Type Numbers" | |||
[I-D.ietf-pim-3228bis]. | registry defined in [RFC9778]. | |||
4.1.5. S Flag (Suppress Router-Side Processing) | 4.1.5. 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 are to suppress the normal timer updates they | routers that they are to suppress the normal timer updates they | |||
perform upon hearing a Query. It does not, however, suppress the | perform upon hearing a Query. It does not, however, suppress the | |||
querier election or the normal "host-side" processing of a Query that | querier election or the normal "host-side" processing of a Query that | |||
a router may be required to perform as a consequence of itself being | a router may be required to perform as a consequence of itself being | |||
a group member. | a group member. | |||
4.1.6. QRV (Querier's Robustness Variable) | 4.1.6. 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, i.e., the sender of the Query. If the querier's | used by the querier, i.e., the sender of the Query. If the querier's | |||
[Robustness Variable] exceeds 7, the maximum value of the QRV field, | [Robustness Variable] exceeds 7, the maximum value of the QRV field, | |||
the QRV is set to zero. Routers adopt the QRV value from the most | the QRV is set to zero. Routers adopt the QRV value from the most | |||
recently received Query as their own [Robustness Variable] value, | recently received Query as their own [Robustness Variable] value, | |||
unless that most recently received QRV was zero, in which case the | unless that most recently received QRV was zero, in which case the | |||
receivers use the default [Robustness Variable] value specified in | receivers use the default [Robustness Variable] value specified in | |||
Section 8.1 or a statically configured value. | Section 8.1 or a statically configured value. | |||
4.1.7. QQIC (Querier's Query Interval Code) | 4.1.7. 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) | |||
Figure 3: QQIC Representation | Figure 3: QQIC Representation | |||
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 8.2. | value specified in Section 8.2. | |||
4.1.8. Number of Sources (N) | 4.1.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 the Query. This number is zero in a General Query or | are present in the Query. This number is zero in a General Query or | |||
a Group-Specific Query, and non-zero in a Group-and-Source-Specific | a Group-Specific Query and non-zero in a Group-and-Source-Specific | |||
Query. This number is limited by the MTU of the network over which | Query. This number is limited by the MTU of the network over which | |||
the Query is transmitted. For example, on an Ethernet with an MTU of | the Query is transmitted. For example, on an Ethernet with an MTU of | |||
1500 octets, the IP header including the Router Alert option consumes | 1500 octets, the IP header including the Router Alert option consumes | |||
24 octets, and the IGMP fields up to including the Number of Sources | 24 octets, and the IGMP fields up to and including the Number of | |||
(N) field consume 12 octets, leaving 1464 octets for source | Sources (N) field consume 12 octets, leaving 1464 octets for source | |||
addresses, which limits the number of source addresses to 366 | addresses, which limits the number of source addresses to 366 | |||
(1464/4). | (1464/4). | |||
4.1.9. Source Address [i] | 4.1.9. Source Address [i] | |||
The Source Address [i] fields are a vector of n IP unicast addresses, | The Source Address [i] fields are a vector of n IP unicast addresses, | |||
where n is the value in the Number of Sources (N) field. | where n is the value in the Number of Sources (N) field. | |||
4.1.10. Additional Data | 4.1.10. Additional Data | |||
If the Packet Length field in the IP header of a received Query | If the Packet Length field in the IP header of a received Query | |||
indicates that there are additional octets of data present, beyond | indicates that there are additional octets of data present, beyond | |||
the fields described here, IGMPv3 implementations MUST include those | the fields described here, IGMPv3 implementations MUST include those | |||
octets in the computation to verify the received IGMP Checksum, but | octets in the computation to verify the received IGMP Checksum but | |||
MUST otherwise ignore those additional octets. When sending a Query, | MUST otherwise ignore those additional octets. When sending a Query, | |||
an IGMPv3 implementation MUST NOT include additional octets beyond | an IGMPv3 implementation MUST NOT include additional octets beyond | |||
the fields described here. | the fields described here. | |||
4.1.11. Query Variants | 4.1.11. Query Variants | |||
There are three variants of the Query message: | There are three variants of the Query message: | |||
1. A General Query is sent by a multicast router to learn the | 1. A General Query is sent by a multicast router to learn the | |||
complete multicast reception state of the neighboring interfaces | complete multicast reception state of the neighboring interfaces | |||
skipping to change at page 17, line 31 ¶ | skipping to change at line 736 ¶ | |||
. . | . . | |||
. Auxiliary Data . | . Auxiliary Data . | |||
. . | . . | |||
| | | | | | |||
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | |||
Figure 5: IGMPv3 Report Group Record | Figure 5: IGMPv3 Report Group Record | |||
4.2.1. Reserved | 4.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. | |||
4.2.2. Checksum | 4.2.2. Checksum | |||
The Checksum is the 16-bit one's complement of the one's complement | The Checksum field is the 16-bit one's complement of the one's | |||
sum of the whole IGMP message (the entire IP payload). For computing | complement sum of the whole IGMP message (the entire IP payload). | |||
the checksum, the Checksum field is set to zero. When receiving | For computing the checksum, the Checksum field is set to zero. When | |||
packets, the checksum MUST be verified before processing a message. | receiving packets, the checksum MUST be verified before processing a | |||
message. | ||||
4.2.3. Flags | 4.2.3. Flags | |||
The Flags field is a bitstring managed by an IANA registry defined in | The Flags field is a bitstring managed by the "IGMP Type Numbers" | |||
[I-D.ietf-pim-3228bis]. | registry defined in [RFC9778]. | |||
4.2.4. Number of Group Records (M) | 4.2.4. Number of Group Records (M) | |||
The Number of Group Records (M) field specifies how many Group | The Number of Group Records (M) field specifies how many Group | |||
Records are present in this Report. | Records are present in this Report. | |||
4.2.5. Group Record | 4.2.5. Group Record | |||
Each Group Record is a block of fields containing information | Each Group Record is a block of fields containing information | |||
pertaining to the sender's membership in a single multicast group on | pertaining to the sender's membership in a single multicast group on | |||
skipping to change at page 18, line 43 ¶ | skipping to change at line 795 ¶ | |||
The Source Address [i] fields are a vector of n IP unicast addresses, | The Source Address [i] fields are a vector of n IP 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. | |||
4.2.11. Auxiliary Data | 4.2.11. Auxiliary Data | |||
The Auxiliary Data field, if present, contains additional information | The Auxiliary Data field, if present, contains additional information | |||
pertaining to this Group Record. The protocol specified in this | pertaining to this Group Record. The protocol specified in this | |||
document, IGMPv3, does not define any auxiliary data. Therefore, | document, IGMPv3, does not define any auxiliary data. Therefore, | |||
implementations of IGMPv3 MUST NOT include any auxiliary data (i.e., | implementations of IGMPv3 MUST NOT include any auxiliary data (i.e., | |||
MUST set the Aux Data Len field to zero) in any transmitted Group | MUST set the Aux Data Len field to zero) in any transmitted Group | |||
Record, and MUST ignore any auxiliary data present in any received | Record and MUST ignore any auxiliary data present in any received | |||
Group Record. The semantics and internal encoding of the Auxiliary | Group Record. The semantics and internal encoding of the Auxiliary | |||
Data field are to be defined by any future version or extension of | Data field are to be defined by any future version or extension of | |||
IGMP that uses this field. | IGMP that uses this field. | |||
4.2.12. Additional Data | 4.2.12. Additional Data | |||
If the Packet Length field in the IP header of a received Report | If the Packet Length field in the IP header of a received Report | |||
indicates that there are additional octets of data present, beyond | indicates that there are additional octets of data present, beyond | |||
the last Group Record, IGMPv3 implementations MUST include those | the last Group Record, IGMPv3 implementations MUST include those | |||
octets in the computation to verify the received IGMP Checksum, but | octets in the computation to verify the received IGMP Checksum but | |||
MUST otherwise ignore those additional octets. When sending a | MUST otherwise ignore those additional octets. When sending a | |||
Report, an IGMPv3 implementation MUST NOT include additional octets | Report, an IGMPv3 implementation MUST NOT include additional octets | |||
beyond the last Group Record. | beyond the last Group Record. | |||
4.2.13. Group Record Types | 4.2.13. Group Record Types | |||
There are a number of different types of Group Records that may be | There are a number of different types of Group Records that may be | |||
included in a Report message: | included in a Report message: | |||
* A Current-State Record is sent by a system in response to a Query | * A Current-State Record is sent by a system in response to a Query | |||
received on an interface. It reports the current reception state | received on an interface. It reports the current reception 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 Group Record contain the | Source Address [i] fields in this Group Record contain the | |||
interface's source list for the specified multicast address, | interface's source list for the specified multicast address, | |||
if it is non-empty. | if it is non-empty. | |||
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 Group Record contain the | Source Address [i] fields in this Group Record contain the | |||
interface's source list for the specified multicast address, | interface's source list for the specified multicast address, | |||
if it is non-empty. An SSM-aware host SHOULD NOT send a | if it is non-empty. An SSM-aware host SHOULD NOT send a | |||
MODE_IS_EXCLUDE record type for multicast addresses that fall | MODE_IS_EXCLUDE record type for multicast addresses that fall | |||
within the SSM address range as they will be ignored by SSM- | within the SSM address range as they will be ignored by SSM- | |||
aware routers [RFC4604]. | aware routers [RFC4604]. | |||
* A Filter-Mode-Change Record is sent by a system whenever a local | * A Filter-Mode-Change Record is sent by a system whenever a local | |||
invocation of IPMulticastListen causes a change of the filter mode | invocation of IPMulticastListen causes a change of the filter mode | |||
(i.e., a change from INCLUDE to EXCLUDE, or from EXCLUDE to | (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. The Record is included in a Report sent from | multicast address. The Record is included in a Report sent from | |||
the interface on which the change occurred. The Record Type of a | the 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 Group Record | address. The Source Address [i] fields in this Group Record | |||
contain the interface's new source list for the specified | contain the interface's new source list for the specified | |||
multicast address, if it is non-empty. | 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 Group Record | address. The Source Address [i] fields in this Group Record | |||
contain the interface's new source list for the specified | contain the interface's new 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 CHANGE_TO_EXCLUDE_MODE record type for | SHOULD NOT send a CHANGE_TO_EXCLUDE_MODE record type for | |||
multicast addresses that fall within the SSM address range. | multicast addresses that fall within the SSM address range. | |||
* A Source-List-Change Record is sent by a system whenever a local | * A Source-List-Change Record is sent by a system whenever a local | |||
invocation of IPMulticastListen causes a change of source list | invocation of IPMulticastListen causes a change of the source list | |||
that is not coincident with a change of filter mode, of the | that is not coincident with a change of the 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 Group Record contain a list of the additional | fields in this Group Record contain a list of the additional | |||
sources that the system wishes to hear from, for packets sent | sources that the system wishes to hear from, for packets sent | |||
to the specified multicast address. If the change was to an | to the specified multicast address. If the change was to an | |||
INCLUDE source list, these are the addresses that were added | INCLUDE source list, these are the addresses that were added | |||
to the list; if the change was to an EXCLUDE source list, | to the list; if the change was to an EXCLUDE source list, | |||
these are the addresses that were deleted from the list. | these are the addresses that were deleted from 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 Group Record contain a list of the sources | fields in this Group Record contain a list of the sources that | |||
that the system no longer wishes to hear from, for packets | the system no longer wishes to hear from, for packets sent to | |||
sent to the specified multicast address. If the change was | the specified multicast address. If the change was to an | |||
to an INCLUDE source list, these are the addresses that were | INCLUDE source list, these are the addresses that were deleted | |||
deleted from the list; if the change was to an EXCLUDE source | from the list; if the change was to an EXCLUDE source list, | |||
list, these are the addresses that were added to the list. | these are the addresses that were added 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 Group Records are sent for the same | blocking old sources, then two Group Records are sent for the same | |||
multicast address, one of type ALLOW_NEW_SOURCES and one of type | multicast address, one of type ALLOW_NEW_SOURCES and one of type | |||
BLOCK_OLD_SOURCES. | 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. | |||
Unrecognized Record Type values MUST be silently ignored. | Unrecognized Record Type values MUST be silently ignored. | |||
4.2.14. IP Source Addresses for Reports | 4.2.14. IP Source Addresses for Reports | |||
An IGMP report is sent with a valid unicast IPv4 source address for | An IGMP report is sent with a valid unicast IPv4 source address for | |||
the destination subnet. The 0.0.0.0 source address may be used by a | the destination subnet. The 0.0.0.0 source address may be used by a | |||
system that has not yet acquired an IP address. Note that the | system that has not yet acquired an IP address. Note that the | |||
0.0.0.0 source address may simultaneously be used by multiple systems | 0.0.0.0 source address may simultaneously be used by multiple systems | |||
skipping to change at page 21, line 42 ¶ | skipping to change at line 929 ¶ | |||
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. | |||
4.2.17. Membership Report Size | 4.2.17. Membership Report Size | |||
If the set of Group Records required in a Report does not fit within | If the set of Group Records required in a Report does not fit within | |||
the size limit of a single Report message (as determined by the MTU | the size limit of a single Report message (as determined by the MTU | |||
of the network on which it will be sent), the Group Records are sent | of the network on which it will be sent), the Group Records are sent | |||
in as many Report messages as needed to report the entire set. | in as many Report messages as needed to report the entire set. | |||
If a single Group Record contains so many source addresses that it | If a single Group Record contains so many source addresses that it | |||
does not fit within the size limit of a single Report message, if its | does not fit within the size limit of a single Report message, and if | |||
Type is not MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, it is split | its Type is not MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, it is | |||
into multiple Group Records, each containing a different subset of | split into multiple Group Records, each containing a different subset | |||
the source addresses and each sent in a separate Report message. If | of the source addresses and each sent in a separate Report message. | |||
its Type is MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, a single Group | If its Type is MODE_IS_EXCLUDE or CHANGE_TO_EXCLUDE_MODE, a single | |||
Record is sent, containing as many source addresses as can fit, and | Group Record is sent, containing as many source addresses as can fit, | |||
and the remaining source addresses are not reported; though the | ||||
the remaining source addresses are not reported; though the choice of | choice of which sources to report is arbitrary, it is preferable to | |||
which sources to report is arbitrary, it is preferable to report the | report the same set of sources in each subsequent report, rather than | |||
same set of sources in each subsequent report, rather than reporting | reporting different sources each time. | |||
different sources each time. | ||||
5. Description of the Protocol for Group Members | 5. Description of the Protocol for Group Members | |||
IGMP is an asymmetric protocol, specifying separate behaviors for | IGMP is an asymmetric protocol, specifying separate behaviors for | |||
group members -- that is, hosts or routers that wish to receive | group members -- that is, hosts or routers that wish to receive | |||
multicast packets -- and multicast routers. This section describes | multicast packets -- and multicast routers. This section describes | |||
the part of IGMPv3 that applies to all group members. (Note that a | the part of IGMPv3 that applies to all group members. (Note that a | |||
multicast router that is also a group member performs both parts of | multicast router that is also a group member performs both parts of | |||
IGMPv3, receiving and responding to its own IGMP message | IGMPv3, receiving and responding to its own IGMP message | |||
transmissions as well as those of its neighbors. The multicast | transmissions as well as those of its neighbors. The multicast | |||
skipping to change at page 23, line 6 ¶ | skipping to change at line 978 ¶ | |||
For interoperability with multicast routers running older versions of | For interoperability with multicast routers running older versions of | |||
IGMP, systems maintain a MulticastRouterVersion variable for each | IGMP, systems maintain a MulticastRouterVersion variable for each | |||
interface on which multicast reception is supported. This section | interface on which multicast reception is supported. This section | |||
describes the behavior of group member systems on interfaces for | describes the behavior of group member systems on interfaces for | |||
which MulticastRouterVersion = 3. The algorithm for determining | which MulticastRouterVersion = 3. The algorithm for determining | |||
MulticastRouterVersion, and the behavior for versions other than 3, | MulticastRouterVersion, and the behavior for versions other than 3, | |||
are described in Section 7. | are described in Section 7. | |||
The all-systems multicast address, 224.0.0.1, is handled as a special | The all-systems multicast address, 224.0.0.1, is handled as a special | |||
case. On all systems -- that is all hosts and routers, including | case. On all systems -- that is, all hosts and routers including | |||
multicast routers -- reception of packets destined to the all-systems | multicast routers -- reception of packets destined to the all-systems | |||
multicast address, from all sources, is permanently enabled on all | multicast address, from all sources, is permanently enabled on all | |||
interfaces on which multicast reception is supported. No IGMP | interfaces on which multicast reception is supported. No IGMP | |||
messages are ever sent regarding the all-systems multicast address. | messages are ever sent regarding the all-systems multicast address. | |||
There are two types of events that trigger IGMPv3 protocol actions on | There are two types of events that trigger IGMPv3 protocol actions on | |||
an interface: | an interface: | |||
* a change of the interface reception state, caused by a local | * A change of the interface reception state, caused by a local | |||
invocation of IPMulticastListen. | invocation of IPMulticastListen. | |||
* reception of a Query. | * The reception of a Query. | |||
(Received IGMP messages of types other than Query are silently | (Received IGMP messages of types other than Query are silently | |||
ignored, except as required for interoperation with earlier versions | ignored, except as required for interoperation with earlier versions | |||
of IGMP.) | of IGMP.) | |||
The following subsections describe the actions to be taken for each | The following subsections describe the actions to be taken for each | |||
of these two cases. In those descriptions, timer and counter names | of these two cases. In those descriptions, timer and counter names | |||
appear in square brackets. The default values for those timers and | appear in square brackets. The default values for those timers and | |||
counters are specified in Section 8. | counters are specified in Section 8. | |||
skipping to change at page 23, line 40 ¶ | skipping to change at line 1012 ¶ | |||
An invocation of IPMulticastListen may cause the multicast reception | An invocation of IPMulticastListen may cause the multicast reception | |||
state of an interface to change, according to the rules in | state of an interface to change, according to the rules in | |||
Section 3.2. Each such change affects the per-interface entry for a | Section 3.2. Each such change affects the per-interface entry for a | |||
single multicast address. | single multicast address. | |||
A change of interface state causes the system to immediately transmit | A change of interface state causes the system to immediately transmit | |||
a State-Change Report from that interface. The type and contents of | a State-Change Report from that interface. The type and contents of | |||
the Group Record(s) in that Report are determined by comparing the | the Group Record(s) in that Report are determined by comparing the | |||
filter mode and source list for the affected multicast address before | filter mode and source list for the affected multicast address before | |||
and after the change, according to the table below. If no interface | and after the change, according to Table 3. If no interface state | |||
state existed for that multicast address before the change (i.e., the | existed for that multicast address before the change (i.e., the | |||
change consisted of creating a new per-interface record), or if no | change consisted of creating a new per-interface record), or if no | |||
state exists after the change (i.e., the change consisted of deleting | state exists after the change (i.e., the change consisted of deleting | |||
a per-interface record), then the "non-existent" state is considered | a per-interface record), then the "non-existent" state is considered | |||
to have a filter mode of INCLUDE and an empty source list. | to have a filter mode of INCLUDE 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 3 | Table 3 | |||
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 | |||
message. | message. | |||
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, it is retransmitted [Robustness | one or more multicast routers, it is retransmitted [Robustness | |||
skipping to change at page 24, line 36 ¶ | skipping to change at line 1050 ¶ | |||
range (0, [Unsolicited Report Interval]). | range (0, [Unsolicited Report Interval]). | |||
If more changes to the same interface state entry occur before all | If more changes to the same interface state entry occur before all | |||
the retransmissions of the State-Change Report for the first change | the retransmissions of the State-Change Report for the first change | |||
have been completed, each such additional change triggers the | have been completed, each such additional change triggers the | |||
immediate transmission of a new State-Change Report. | immediate transmission of a new State-Change Report. | |||
The contents of the new transmitted report are calculated as follows. | The contents of the new transmitted report are calculated as follows. | |||
As was done with the first report, the interface state for the | As was done with the first report, the interface state for the | |||
affected group before and after the latest change is compared. The | affected group before and after the latest change is compared. The | |||
report records expressing the difference are built according to the | report records expressing the difference are built according to | |||
table above. However these records are not transmitted in a message | Table 3. However, these records are not transmitted in a message but | |||
but instead merged with the contents of the pending report, to create | instead are merged with the contents of the pending report to create | |||
the new State-Change report. The rules for merging the difference | the new State-Change report. The rules for merging the difference | |||
report resulting from the state change and the pending report are | report resulting from the state change and the pending report are | |||
described below. | 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 State-Change Reports. | transmissions of State-Change Reports. | |||
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 host. This is done in order to ensure that a series of | the host. This is done in order to ensure that a series of | |||
successive state changes do not break the protocol robustness. | successive state changes do not break the protocol robustness. | |||
If the interface reception-state change that triggers the new report | If the interface reception-state change that triggers the new report | |||
is a filter-mode change, then the next [Robustness Variable] State- | is 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 host has to maintain retransmission state for the group | period. The host has to maintain retransmission state for the group | |||
until the [Robustness Variable] State-Change reports have been sent. | until the [Robustness Variable] State-Change reports have been sent. | |||
When [Robustness Variable] State-Change reports with Filter-Mode- | When [Robustness Variable] State-Change reports with Filter-Mode- | |||
Change records have been transmitted after the last filter-mode | Change Records have been transmitted after the last filter-mode | |||
change, and if source-list changes to the interface reception have | change, and if source-list changes to the interface reception have | |||
scheduled additional reports, then the next State-Change report will | scheduled additional reports, then the next State-Change report will | |||
include Source-List-Change records. | include Source-List-Change Records. | |||
Each time a State-Change Report is transmitted, the contents are | Each time a State-Change Report is transmitted, the 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, then if the current filter-mode of the interface is | Change Record, and if the current filter-mode of the interface is | |||
INCLUDE, a TO_IN record is included in the report, otherwise a TO_EX | INCLUDE, a TO_IN record is included in the report; otherwise, a TO_EX | |||
record is included. If instead the report should contain Source- | record is included. If instead the report should contain Source- | |||
List-Change records, an ALLOW and a BLOCK record are included. The | List-Change Records, an ALLOW and a BLOCK record are included. The | |||
contents of these records are built according to the table below. | contents of these records are built according to Table 4. | |||
+========+==============================+ | +========+==============================+ | |||
| Record | Sources Included | | | Record | Sources Included | | |||
+========+==============================+ | +========+==============================+ | |||
| TO_IN | All in the current interface | | | TO_IN | All in the current interface | | |||
| | state that must be forwarded | | | | state that must be forwarded | | |||
+--------+------------------------------+ | +--------+------------------------------+ | |||
| TO_EX | All in the current interface | | | TO_EX | All in the current interface | | |||
| | state that must be blocked | | | | state that must be blocked | | |||
+--------+------------------------------+ | +--------+------------------------------+ | |||
| ALLOW | All with retransmission | | | ALLOW | All with retransmission | | |||
| | state that must be forwarded | | | | state that must be forwarded | | |||
+--------+------------------------------+ | +--------+------------------------------+ | |||
| BLOCK | All with retransmission | | | BLOCK | All with retransmission | | |||
| | state that must be blocked | | | | state that must be blocked | | |||
+--------+------------------------------+ | +--------+------------------------------+ | |||
Table 4 | Table 4 | |||
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 | pending report to merge with can be treated as a source-change report | |||
report with empty ALLOW and BLOCK records (no sources have | with empty ALLOW and BLOCK records (no sources have retransmission | |||
retransmission state). | state). | |||
5.2. Action on Reception of a Query | 5.2. Action on Reception of a Query | |||
When a system receives a Query, it does not respond immediately. | When a system receives a Query, it does not respond immediately. | |||
Instead, it delays its response by a random amount of time, bounded | Instead, it delays its response by a random amount of time, bounded | |||
by the Max Resp Time value derived from the Max Resp Code in the | by the Max Resp Time value derived from the Max Resp Code in the | |||
received Query message. A system may receive a variety of Queries on | received Query message. A system may receive a variety of Queries on | |||
different interfaces and of different kinds (e.g., General Queries, | different interfaces and of different kinds (e.g., General Queries, | |||
Group-Specific Queries, and Group-and-Source-Specific Queries), each | Group-Specific Queries, and Group-and-Source-Specific Queries), each | |||
of which may require its own delayed response. | of which may require its own delayed response. | |||
Before scheduling a response to a Query, the system must first | Before scheduling a response to a Query, the system must first | |||
consider previously scheduled pending responses and in many cases | consider previously scheduled pending responses as, in many cases, it | |||
schedule a combined response. Therefore, the system must be able to | can schedule a combined response. Therefore, the system must be able | |||
maintain the following state: | to maintain the following state: | |||
* A timer per interface for scheduling responses to General Queries. | * A timer per interface for scheduling responses to General Queries. | |||
* A per-group and interface timer for scheduling responses to Group- | * A per-group and interface timer for scheduling responses to Group- | |||
Specific and Group-and-Source-Specific Queries. | Specific and Group-and-Source-Specific Queries. | |||
* A per-group and interface list of sources to be reported in the | * A per-group and interface list of sources to be reported in the | |||
response to a Group-and-Source-Specific Query. | response to a Group-and-Source-Specific Query. | |||
When a new Query with the Router-Alert option arrives on an | When a new Query with the Router Alert option arrives on an | |||
interface, provided the system has state to report, a delay for a | interface, provided the system has state to report, a delay for a | |||
response is randomly selected in the range (0, [Max Resp Time]) where | response is randomly selected in the range (0, [Max Resp Time]) where | |||
Max Resp Time is derived from Max Resp Code in the received Query | Max Resp Time is derived from Max Resp Code in the received Query | |||
message. The following rules are then used to determine if a Report | message. The following rules are then used to determine if a Report | |||
needs to be scheduled and the type of Report to schedule. The rules | needs to be scheduled and the type of Report to schedule. The rules | |||
are considered in order and only the first matching rule is applied. | are considered in order and only the first matching rule is applied. | |||
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. | |||
skipping to change at page 27, line 30 ¶ | skipping to change at line 1186 ¶ | |||
When the timer in a pending response record expires, the system | When the timer in a pending response record expires, the system | |||
transmits, on the associated interface, one or more Report messages | transmits, on the associated interface, one or more Report messages | |||
carrying one or more Current-State Records (see Section 4.2.13), as | carrying one or more Current-State Records (see Section 4.2.13), as | |||
follows: | follows: | |||
1. If the expired timer is the interface timer (i.e., it is a | 1. If the expired timer is the interface timer (i.e., it 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 reception state, as described in Section 3.2. The | interface has reception state, as described in Section 3.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 | This naive algorithm may result in bursts of packets when a | |||
system is a member of a large number of groups. Instead of using | system is a member of a large number of groups. Instead of using | |||
a single interface timer, implementations are recommended to | a single interface timer, implementations are recommended to | |||
spread transmission of such Report messages over the interval (0, | spread transmission of such Report messages over the interval (0, | |||
[Max Resp Time]). Note that any such implementation MUST avoid | [Max Resp Time]). Note that any such implementation MUST avoid | |||
the "ack-implosion" problem, i.e., MUST NOT send a Report | the "ack-implosion" problem, i.e., MUST NOT send a Report | |||
immediately on reception of a General Query. | immediately on reception of a General Query. | |||
2. If the expired timer is a group timer and the list of recorded | 2. If the expired timer is a group timer and the list of recorded | |||
sources for the that group is empty (i.e., it is a pending | sources for that group is empty (i.e., it is a pending response | |||
response to a Group-Specific Query), then if and only if the | to a Group-Specific Query), then if and only if the interface has | |||
interface has reception state for that group address, a single | reception state for that group address, a single Current-State | |||
Current-State Record is sent for that address. The Current-State | Record is sent for that address. The Current-State Record | |||
Record carries the multicast address and its associated filter | carries the multicast address and its associated filter mode | |||
mode (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list. | (MODE_IS_INCLUDE or MODE_IS_EXCLUDE) and source list. | |||
3. If the expired timer is a group timer and the list of recorded | 3. If the expired timer is a group timer and the list of recorded | |||
sources for that group is non-empty (i.e., it is a pending | sources for that group is non-empty (i.e., it is a pending | |||
response to a Group-and-Source-Specific Query), then if and only | response to a Group-and-Source-Specific Query), then if and only | |||
if the interface has reception state for that group address, the | if the interface has reception state for that group address, the | |||
contents of the responding Current-State Record is determined | contents of the responding Current-State Record is determined | |||
from the interface state and the pending response record, as | from the interface state and the pending response record, as | |||
specified in the following table: | specified in Table 5. | |||
+=====================+=========================+===============+ | +=====================+=========================+===============+ | |||
| Per-Interface State | Set of Sources in the | Current-State | | | Per-Interface State | Set of Sources in the | Current-State | | |||
| | Pending Response Record | Record | | | | Pending Response Record | 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 5 | Table 5 | |||
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. | addresses, then no response is sent. | |||
Finally, after any required Report messages have been generated, the | Finally, after any required Report messages have been generated, the | |||
source lists associated with any reported groups are cleared. | source lists associated with any reported groups are cleared. | |||
skipping to change at page 28, line 45 ¶ | skipping to change at line 1247 ¶ | |||
3 adds the capability for a multicast router to also learn which | 3 adds the capability for a multicast router to also learn which | |||
sources are of interest to neighboring systems, for packets sent to | sources are of interest to neighboring systems, for packets sent to | |||
any particular multicast address. The information gathered by IGMP | any particular multicast address. The information gathered by IGMP | |||
is provided to whichever multicast routing protocol is being used by | is provided to whichever multicast routing protocol is being used by | |||
the router, in order to ensure that multicast packets are delivered | the router, in order to ensure that multicast packets are delivered | |||
to all networks where there are interested receivers. | to all networks where there are interested receivers. | |||
This section describes the part of IGMPv3 that is performed by | This section describes the part of IGMPv3 that is performed by | |||
multicast routers. Multicast routers may also themselves become | multicast routers. Multicast routers may also themselves become | |||
members of multicast groups, and therefore also perform the group | members of multicast groups, and therefore also perform the group | |||
member part of IGMPv3, described in Section 5. | member part of IGMPv3, as described in Section 5. | |||
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 networks. If a multicast router | over each of its directly attached networks. If a multicast router | |||
has more than one interface to the same network, it only needs to | has more than one interface to the same network, it only needs to | |||
operate this protocol over one of those interfaces. On each | operate this protocol over one of those interfaces. On each | |||
interface over which this protocol is being run, the router MUST | interface over which this protocol is being run, the router MUST | |||
enable reception of multicast address 224.0.0.22, from all sources | enable reception of multicast address 224.0.0.22 from all sources | |||
(and MUST perform the group member part of IGMPv3 for that address on | (and MUST perform the group member part of IGMPv3 for that address on | |||
that interface). | that interface). | |||
Multicast routers need to know only that at least one system on an | Multicast routers need to know only that at least one system on an | |||
attached network is interested in packets to a particular multicast | attached network is interested in packets to a particular multicast | |||
address from a particular source; a multicast router is not required | address from a particular source; a multicast router is not required | |||
to keep track of the interests of each individual neighboring system. | to keep track of the interests of each individual neighboring system. | |||
(However, see Appendix A.2 point 1 for discussion.) | (However, see Appendix A.2, item 1 for discussion.) | |||
IGMPv3 is backward compatible with previous versions of the IGMP | IGMPv3 is backward compatible with previous versions of the IGMP | |||
protocol. In order to remain backward compatible with older IGMP | protocol. In order to remain backward compatible with older IGMP | |||
systems, IGMPv3 multicast routers MUST also implement versions 1 and | systems, IGMPv3 multicast routers MUST also implement versions 1 and | |||
2 of the protocol (see Section 7). | 2 of the protocol (see Section 7). | |||
6.1. Conditions for IGMP Queries | 6.1. Conditions for IGMP Queries | |||
Multicast routers send General Queries periodically to request group | Multicast routers send General Queries periodically to request group | |||
membership information from an attached network. These queries are | membership information from an attached network. These queries are | |||
skipping to change at page 30, line 6 ¶ | skipping to change at line 1298 ¶ | |||
To enable all systems on a network to respond to changes in group | To enable all systems on a network to respond to changes in group | |||
membership, multicast routers send specific queries. A Group- | membership, multicast routers send specific queries. A Group- | |||
Specific Query is sent to verify there are no systems that desire | Specific Query is sent to verify there are no systems that desire | |||
reception of the specified group or to "rebuild" the desired | reception of the specified group or to "rebuild" the desired | |||
reception state for a particular group. Group-Specific Queries are | reception state for a particular group. Group-Specific Queries are | |||
sent when a router receives a State-Change record indicating a system | sent when a router receives a State-Change record indicating a system | |||
is leaving a group. | is leaving a group. | |||
A Group-and-Source Specific Query is used to verify there are no | A Group-and-Source Specific Query is used to verify there are no | |||
systems on a network which desire to receive traffic from a set of | systems on a network that desire receiving traffic from a set of | |||
sources. Group-and-Source Specific Queries list sources for a | sources. Group-and-Source Specific Queries list sources for a | |||
particular group which have been requested to no longer be forwarded. | particular group that have been requested to no longer be forwarded. | |||
This query is sent by a multicast router to learn if any systems | This query is sent by a multicast router to learn if any systems | |||
desire reception of packets to the specified group address from the | desire reception of packets to the specified group address from the | |||
specified source addresses. Group-and-Source Specific Queries are | specified source addresses. Group-and-Source Specific Queries are | |||
only sent in response to State-Change Records and never in response | only sent in response to State-Change Records and never in response | |||
to Current-State Records. Section 4.1.11 describes each query in | to Current-State Records. Section 4.1.11 describes each query in | |||
more detail. | more detail. | |||
6.2. IGMP State Maintained by Multicast Routers | 6.2. IGMP State Maintained by Multicast Routers | |||
Multicast routers implementing IGMPv3 keep state per group per | Multicast routers implementing IGMPv3 keep state per group per | |||
skipping to change at page 30, line 34 ¶ | skipping to change at line 1326 ¶ | |||
(multicast address, group timer, filter-mode, (source records)) | (multicast address, group timer, filter-mode, (source records)) | |||
Each source record is of the form: | Each source record is of the form: | |||
(source address, source timer) | (source address, source timer) | |||
If all sources within a given group are desired, an empty source | If all sources within a given group are desired, an empty source | |||
record list is kept with filter-mode set to EXCLUDE. This means | record list is kept with filter-mode set to EXCLUDE. This means | |||
hosts on this network want all sources for this group to be | hosts on this network want all sources for this group to be | |||
forwarded. This is the IGMPv3 equivalent to a IGMPv1 or IGMPv2 group | forwarded. This is the IGMPv3 equivalent to an IGMPv1 or IGMPv2 | |||
join. | group join. | |||
6.2.1. Definition of Router Filter-Mode | 6.2.1. Definition of Router Filter-Mode | |||
To reduce internal state, IGMPv3 routers keep a filter-mode per group | To reduce internal state, IGMPv3 routers keep a filter-mode per group | |||
per attached network. This filter-mode is used to condense the total | per attached network. This filter-mode is used to condense the total | |||
desired reception state of a group to a minimum set such that all | desired reception state of a group to a minimum set such that all | |||
systems' memberships are satisfied. This filter-mode may change in | systems' memberships are satisfied. This filter-mode may change in | |||
response to the reception of particular types of group records or | response to the reception of particular types of group records or | |||
when certain timer conditions occur. In the following sections, we | when certain timer conditions occur. In the following sections, we | |||
use the term "router filter-mode" to refer to the filter-mode of a | use the term "router filter-mode" to refer to the filter-mode of a | |||
particular group within a router. Section 6.4 describes the changes | particular group within a router. Section 6.4 describes the changes | |||
of a router filter-mode per group record received. | of a router filter-mode per group record received. | |||
Conceptually, when a group record is received, the router filter-mode | Conceptually, when a group record is received, the router filter-mode | |||
for that group is updated to cover all the requested sources using | for that group is updated to cover all the requested sources using | |||
the least amount of state. As a rule, once a group record with a | the least amount of state. As a rule, once a group record with a | |||
filter-mode of EXCLUDE is received, the router filter-mode for that | filter-mode of EXCLUDE is received, the router filter-mode for that | |||
group will be EXCLUDE. | group will be EXCLUDE. | |||
When a router filter-mode for a group is EXCLUDE, the source record | When a router filter-mode for a group is EXCLUDE, the source record | |||
list contains two types of sources. The first type is the set which | list contains two types of sources. The first type is the set that | |||
represents conflicts in the desired reception state; this set must be | represents conflicts in the desired reception state; this set must be | |||
forwarded by some router on the network. The second type is the set | forwarded by some router on the network. The second type is the set | |||
of sources which hosts have requested to not be forwarded. | of sources that hosts have requested to not be forwarded. Appendix A | |||
Appendix A describes the reasons for keeping two different sets when | describes the reasons for keeping two different sets when in EXCLUDE | |||
in EXCLUDE mode. | mode. | |||
When a router filter-mode for a group is INCLUDE, the source record | When a router filter-mode for a group is INCLUDE, the source record | |||
list is the list of sources desired for the group. This is the total | list is the list of sources desired for the group. This is the total | |||
desired set of sources for that group. Each source in the source | desired set of sources for that group. Each source in the source | |||
record list must be forwarded by some router on the network. | record list must be forwarded by some router on the network. | |||
Because a reported group record with a filter-mode of EXCLUDE will | Because a reported group record with a filter-mode of EXCLUDE will | |||
cause a router to transition its filter-mode for that group to | cause a router to transition its filter-mode for that group to | |||
EXCLUDE, a mechanism for transitioning a router's filter-mode back to | EXCLUDE, a mechanism for transitioning a router's filter-mode back to | |||
INCLUDE must exist. If all systems with a group record in EXCLUDE | INCLUDE must exist. If all systems with a group record in EXCLUDE | |||
skipping to change at page 31, line 48 ¶ | skipping to change at line 1384 ¶ | |||
timer with a lower bound of zero kept per group per attached network. | timer with a lower bound of zero kept per group per attached network. | |||
Group timers are updated according to the types of group records | Group timers are updated according to the types of group records | |||
received. | received. | |||
A group timer expiring when a router filter-mode for the group is | A group timer expiring when a router filter-mode for the group is | |||
EXCLUDE means there are no listeners on the attached network in | EXCLUDE means there are no listeners on the attached network in | |||
EXCLUDE mode. At this point, a router will transition to INCLUDE | EXCLUDE mode. At this point, a router will transition to INCLUDE | |||
filter-mode. Section 6.5 describes the actions taken when a group | filter-mode. Section 6.5 describes the actions taken when a group | |||
timer expires while in EXCLUDE mode. | timer expires while in EXCLUDE mode. | |||
The following table summarizes the role of the group timer. | Table 6 summarizes the role of the group timer. Section 6.4 | |||
Section 6.4 describes the details of setting the group timer per type | describes the details of setting the group timer per type of group | |||
of group record received. | record received. | |||
+=============+=======+========================================+ | +=============+=======+=========================================+ | |||
| Group | Group | Actions/Comments | | | Group | Group | Actions/Comments | | |||
| Filter-Mode | Timer | | | | Filter-Mode | Timer | | | |||
| | Value | | | | | Value | | | |||
+=============+=======+========================================+ | +=============+=======+=========================================+ | |||
| INCLUDE | Timer | All members in INCLUDE mode. | | | INCLUDE | Timer | All members in INCLUDE mode. | | |||
| | >= 0 | | | | | >= 0 | | | |||
+-------------+-------+----------------------------------------+ | +-------------+-------+-----------------------------------------+ | |||
| EXCLUDE | Timer | At least one member in EXCLUDE mode. | | | EXCLUDE | Timer | At least one member in EXCLUDE mode. | | |||
| | > 0 | | | | | > 0 | | | |||
+-------------+-------+----------------------------------------+ | +-------------+-------+-----------------------------------------+ | |||
| EXCLUDE | Timer | No more listeners to group. If all | | | EXCLUDE | Timer | No more listeners to group. If all | | |||
| | == 0 | source timers have expired then delete | | | | == 0 | source timers have expired, then delete | | |||
| | | Group Record. If there are still | | | | | Group Record. If there are still | | |||
| | | source record timers running, switch | | | | | source record timers running, switch to | | |||
| | | to INCLUDE filter-mode using those | | | | | INCLUDE filter-mode using those source | | |||
| | | source records with running timers as | | | | | records with running timers as the | | |||
| | | the INCLUDE source record state. | | | | | INCLUDE source record state. | | |||
+-------------+-------+----------------------------------------+ | +-------------+-------+-----------------------------------------+ | |||
Table 6 | Table 6 | |||
6.2.3. Definition of Source Timers | 6.2.3. Definition of Source Timers | |||
A source timer is kept per source record and is a decrementing timer | A source timer is kept per source record and is a decrementing timer | |||
with a lower bound of zero. Source timers are updated according to | with a lower bound of zero. Source timers are updated according to | |||
the type and filter-mode of the group record received. Source timers | the type and filter-mode of the group record received. Source timers | |||
are always updated (for a particular group) whenever the source is | are always updated (for a particular group) whenever the source is | |||
present in a received record for that group. Section 6.4 describes | present in a received record for that group. Section 6.4 describes | |||
the setting of source timers per type of group records received. | the setting of source timers per type of group records received. | |||
A source record with a running timer with a router filter-mode for | A source record with a running timer with a router filter-mode for | |||
the group of INCLUDE means that there is currently one or more | the group of INCLUDE means that there is currently one or more | |||
systems (in INCLUDE filter-mode) which desire to receive that source. | systems (in INCLUDE filter-mode) that desire to receive that source. | |||
If a source timer expires with a router filter-mode for the group of | If a source timer expires with a router filter-mode for the group of | |||
INCLUDE, the router concludes that traffic from this particular | INCLUDE, the router concludes that traffic from this particular | |||
source is no longer desired on the attached network, and deletes the | source is no longer desired on the attached network and deletes the | |||
associated source record. | associated source record. | |||
Source timers are treated differently when a router filter-mode for a | Source timers are treated differently when a router filter-mode for a | |||
group is EXCLUDE. If a source record has a running timer with a | group is EXCLUDE. If a source record has a running timer with a | |||
router filter-mode for the group of EXCLUDE, it means that at least | router filter-mode for the group of EXCLUDE, it means that at least | |||
one system desires the source. It should therefore be forwarded by a | one system desires the source. It should therefore be forwarded by a | |||
router on the network. Appendix A describes the reasons for keeping | router on the network. Appendix A describes the reasons for keeping | |||
state for sources that have been requested to be forwarded while in | state for sources that have been requested to be forwarded while in | |||
EXCLUDE state. | EXCLUDE state. | |||
skipping to change at page 33, line 20 ¶ | skipping to change at line 1450 ¶ | |||
When a router filter-mode for a group is EXCLUDE, source records are | When a router filter-mode for a group is EXCLUDE, source records are | |||
only deleted when the group timer expires. Section 6.3 describes the | only deleted when the group timer expires. Section 6.3 describes the | |||
actions that should be taken dependent upon the value of a source | actions that should be taken dependent upon the value of a source | |||
timer. | timer. | |||
6.3. IGMPv3 Source-Specific Forwarding Rules | 6.3. IGMPv3 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 group, a decision has to be made whether to forward the | a particular group, a decision has to be made whether to forward the | |||
datagram onto an attached network or not. The multicast routing | datagram onto an attached network or not. The multicast routing | |||
protocol in use is in charge of this decision, and should use the | protocol in use is in charge of this decision and should use the | |||
IGMPv3 information to ensure that all sources/groups desired on a | IGMPv3 information to ensure that all sources/groups desired on a | |||
subnetwork are forwarded to that subnetwork. IGMPv3 information does | subnetwork are forwarded to that subnetwork. IGMPv3 information does | |||
not override multicast routing information; for example, if the | not override multicast routing information; for example, if the | |||
IGMPv3 filter-mode group for G is EXCLUDE, a router may still forward | IGMPv3 filter-mode group for G is EXCLUDE, a router may still forward | |||
packets for excluded sources to a transit subnet. | packets for excluded sources to a transit subnet. | |||
To summarize, the following table describes the forwarding | To summarize, Table 7 describes the forwarding suggestions made by | |||
suggestions made by IGMP to the routing protocol for traffic | IGMP to the routing protocol for traffic originating from a source | |||
originating from a source destined to a group. It also summarizes | destined to a group. It also summarizes the actions taken upon the | |||
the actions taken upon the expiration of a source timer based on the | expiration of a source timer based on the router filter-mode of the | |||
router filter-mode of the group. | group. | |||
+=============+==========+=======================================+ | +=============+==========+=======================================+ | |||
| Group | Group | Action | | | Group | Group | Action | | |||
| Filter-Mode | Timer | | | | Filter-Mode | Timer | | | |||
| | Value | | | | | Value | | | |||
+=============+==========+=======================================+ | +=============+==========+=======================================+ | |||
| INCLUDE | TIMER > | Suggest to forward traffic from | | | INCLUDE | TIMER > | Suggest to forward traffic from | | |||
| | 0 | source | | | | 0 | source. | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
| INCLUDE | TIMER == | Suggest to stop forwarding traffic | | | INCLUDE | TIMER == | Suggest to stop forwarding traffic | | |||
| | 0 | from source and remove source record. | | | | 0 | from source and remove source record. | | |||
| | | If there are no more source records | | | | | If there are no more source records | | |||
| | | for the group, delete group record. | | | | | for the group, delete group record. | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
| INCLUDE | No | Suggest to not forward source | | | INCLUDE | No | Suggest to not forward source. | | |||
| | Source | | | | | Source | | | |||
| | Elements | | | | | Elements | | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
| EXCLUDE | TIMER > | Suggest to forward traffic from | | | EXCLUDE | TIMER > | Suggest to forward traffic from | | |||
| | 0 | source | | | | 0 | source. | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
| EXCLUDE | TIMER == | Suggest to not forward traffic from | | | EXCLUDE | TIMER == | Suggest to not forward traffic from | | |||
| | 0 | source (DO NOT remove record) | | | | 0 | source (DO NOT remove record). | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
| EXCLUDE | No | Suggest to forward traffic from | | | EXCLUDE | No | Suggest to forward traffic from | | |||
| | Source | source | | | | Source | source. | | |||
| | Elements | | | | | Elements | | | |||
+-------------+----------+---------------------------------------+ | +-------------+----------+---------------------------------------+ | |||
Table 7 | Table 7 | |||
6.4. Action on Reception of Reports | 6.4. Action on Reception of Reports | |||
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 IGMPv1/IGMPv2 Report and IGMPv2 DONE messages that contain | ignore IGMPv1/IGMPv2 Report and IGMPv2 DONE messages that contain | |||
multicast addresses in the SSM address range, SHOULD NOT use such | multicast addresses in the SSM address range, SHOULD NOT use such | |||
Reports to establish IP forwarding state, and MAY log an error if it | Reports to establish IP forwarding state, and MAY log an error if it | |||
receives such a message. | receives such a message. | |||
6.4.1. Reception of Current-State Records | 6.4.1. Reception of Current-State Records | |||
When receiving Current-State Records, a router updates both its group | When receiving Current-State Records, a router updates both its group | |||
and source timers. In some circumstances, the reception of a type of | and source timers. In some circumstances, the reception of a type of | |||
group record will cause the router filter-mode for that group to | group record will cause the router filter-mode for that group to | |||
change. The table below describes the actions, with respect to state | change. Table 8 describes the actions, with respect to state and | |||
and timers that occur to a router's state upon reception of Current- | timers that occur to a router's state upon reception of Current- | |||
State Records. | State Records. | |||
The following notation is used to describe the updating of source | The following notation is used to describe the updating of source | |||
timers. The notation ( A, B ) will be used to represent the total | timers. The notation ( A, B ) will be used to represent the total | |||
number of sources for a particular group, where | number of sources for a particular group, where | |||
A = set of source records whose source timers > 0 (Sources that at | A = set of source records whose source timers > 0 (Sources that at | |||
least one host has requested to be forwarded) | least one host has requested to be forwarded) | |||
B = set of source records whose source timers = 0 (Sources that IGMP | B = set of source records whose source timers = 0 (Sources that IGMP | |||
will suggest to the routing protocol not to forward) | will suggest to the routing protocol not to forward) | |||
Note that there will only be two sets when a router's filter-mode for | Note that there will only be two sets when a router's filter-mode for | |||
a group is EXCLUDE. When a router's filter-mode for a group is | a group is EXCLUDE. When a router's filter-mode for a group is | |||
INCLUDE, a single set is used to describe the set of sources | INCLUDE, a single set is used to describe the set of sources | |||
requested to be forwarded (e.g., simply (A)). | requested to be forwarded (e.g., simply (A)). | |||
In the following tables, abbreviations are used for several variables | In Tables 8 and 9, abbreviations are used for several variables (all | |||
(all of which are described in detail in Section 8). The variable | of which are described in detail in Section 8). The variable GMI is | |||
GMI is an abbreviation for the Group Membership Interval, which is | an abbreviation for the Group Membership Interval, which is the time | |||
the time in which group memberships will time out. The variable LMQT | in which group memberships will time out. The variable LMQT is an | |||
is an abbreviation for the Last Member Query Time, which is the total | abbreviation for the Last Member Query Time, which is the total time | |||
time spent after Last Member Query Count retransmissions. LMQT | spent after Last Member Query Count retransmissions. LMQT represents | |||
represents the "leave latency", or the difference between the | the "leave latency" or the difference between the transmission of a | |||
transmission of a membership change and the change in the information | membership change and the change in the information given to the | |||
given to the routing protocol. | routing protocol. | |||
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 the set A of source records should | |||
have their source timers set to value J. 'Delete A' means that the | have their source timers set to value J. 'Delete A' means that the | |||
set A of source records should be deleted. 'Group Timer=J' means | set A of source records should be deleted. 'Group Timer=J' means | |||
that the Group Timer for the group should be set to value J. | that the Group Timer for the group should be set to value J. | |||
Router State Report Rec'd New Router State Actions | +=========+========+===========+=================+ | |||
------------ ------------ ---------------- ------- | | Router | Report | New | Actions | | |||
| State | Rec'd | Router | | | ||||
INCLUDE (A) IS_IN (B) INCLUDE (A+B) (B)=GMI | | | | State | | | |||
+=========+========+===========+=================+ | ||||
INCLUDE (A) IS_EX (B) EXCLUDE (A*B,B-A) (B-A)=0 | | INCLUDE | IS_IN | INCLUDE | (B)=GMI | | |||
Delete (A-B) | | (A) | (B) | (A+B) | | | |||
Group Timer=GMI | +---------+--------+-----------+-----------------+ | |||
| INCLUDE | IS_EX | EXCLUDE | (B-A)=0 | | ||||
EXCLUDE (X,Y) IS_IN (A) EXCLUDE (X+A,Y-A) (A)=GMI | | (A) | (B) | (A*B,B-A) | Delete (A-B) | | |||
| | | | Group Timer=GMI | | ||||
+---------+--------+-----------+-----------------+ | ||||
| EXCLUDE | IS_IN | EXCLUDE | (A)=GMI | | ||||
| (X,Y) | (A) | (X+A,Y-A) | | | ||||
+---------+--------+-----------+-----------------+ | ||||
| EXCLUDE | IS_EX | EXCLUDE | (A-X-Y)=GMI | | ||||
| (X,Y) | (A) | (A-Y,Y*A) | Delete (X-A) | | ||||
| | | | Delete (Y-A) | | ||||
| | | | Group Timer=GMI | | ||||
+---------+--------+-----------+-----------------+ | ||||
EXCLUDE (X,Y) IS_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=GMI | Table 8 | |||
Delete (X-A) | ||||
Delete (Y-A) | ||||
Group Timer=GMI | ||||
6.4.2. Reception of Filter-Mode-Change and Source-List-Change Records | 6.4.2. Reception of Filter-Mode-Change and Source-List-Change Records | |||
When a change in the global state of a group occurs in a system, the | When a change in the global state of a group occurs in a system, the | |||
system sends either a Source-List-Change Record or a Filter-Mode- | system sends either a Source-List-Change Record or a Filter-Mode- | |||
Change Record for that group. As with Current-State Records, routers | Change Record for that group. As with Current-State Records, routers | |||
must act upon these records and possibly change their own state to | must act upon these records and possibly change their own state to | |||
reflect the new desired membership state of the network. | reflect the new desired membership state of the network. | |||
Routers must query sources that are requested to be no longer | Routers must query sources that are requested to be no longer | |||
skipping to change at page 36, line 36 ¶ | skipping to change at line 1596 ¶ | |||
forward the group stands without any interruption. | forward the group stands without any interruption. | |||
During a query period (i.e., Last Member Query Time seconds), the | During a query period (i.e., Last Member Query Time seconds), the | |||
IGMP component in the router continues to suggest to the routing | IGMP component in the router continues to suggest to the routing | |||
protocol that it forwards traffic from the groups or sources that it | protocol that it forwards traffic from the groups or sources that it | |||
is querying. It is not until after Last Member Query Time seconds | is querying. It is not until after Last Member Query Time seconds | |||
without receiving a record expressing interest in the queried group | without receiving a record expressing interest in the queried group | |||
or sources that the router may prune the group or sources from the | or sources that the router may prune the group or sources from the | |||
network. | network. | |||
The following table describes the changes in group state and the | Table 9 describes the changes in group state and the action(s) taken | |||
action(s) taken when receiving either Filter-Mode-Change or Source- | when receiving either Filter-Mode-Change or Source-List-Change | |||
List-Change Records. This table also describes the queries which are | Records. This table also describes the queries that are sent by the | |||
sent by the querier when a particular report is received. | querier when a particular report is received. | |||
We use the following notation for describing the queries which are | We use the following notation for describing the queries that are | |||
sent. We use the notation 'Q(G)' to describe a Group-Specific Query | sent. We use the notation 'Q(G)' to describe a Group-Specific Query | |||
to G. We use the notation 'Q(G,A)' to describe a Group-and-Source | to G. We use the notation 'Q(G,A)' to describe a Group-and-Source | |||
Specific Query to G with source-list A. If source-list A is null as | Specific Query to G with source-list A. If source-list A is null as | |||
a result of the action (e.g., A*B) then no query is sent as a result | a result of the action (e.g., A*B), then no query is sent as a result | |||
of the operation. | of the operation. | |||
In order to maintain protocol robustness, queries sent by actions in | In order to maintain protocol robustness, queries sent by actions in | |||
the table below need to be transmitted [Last Member Query Count] | Table 9 need to be transmitted [Last Member Query Count] times, once | |||
times, once every [Last Member Query Interval]. | every [Last Member Query Interval]. | |||
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 group, the new and pending queries have | be retransmitted for the same group, the new and pending queries have | |||
to be merged. In addition, received host reports for a group with | to be merged. In addition, received host reports for a group with | |||
pending queries may affect the contents of those queries. | pending queries may affect the contents of those queries. | |||
Section 6.6.3 describes the process of building and maintaining the | Section 6.6.3 describes the process of building and maintaining the | |||
state of pending queries. | state of pending queries. | |||
Router State Report Rec'd New Router State Actions | +=========+========+=============+=====================+ | |||
------------ ------------ ---------------- ------- | | Router | Report | New Router | Actions | | |||
| State | Rec'd | State | | | ||||
INCLUDE (A) ALLOW (B) INCLUDE (A+B) (B)=GMI | +=========+========+=============+=====================+ | |||
| INCLUDE | ALLOW | INCLUDE | (B)=GMI | | ||||
INCLUDE (A) BLOCK (B) INCLUDE (A) Send Q(G,A*B) | | (A) | (B) | (A+B) | | | |||
+---------+--------+-------------+---------------------+ | ||||
INCLUDE (A) TO_EX (B) EXCLUDE (A*B,B-A) (B-A)=0 | | INCLUDE | BLOCK | INCLUDE (A) | Send Q(G,A*B) | | |||
Delete (A-B) | | (A) | (B) | | | | |||
Send Q(G,A*B) | +---------+--------+-------------+---------------------+ | |||
Group Timer=GMI | | INCLUDE | TO_EX | EXCLUDE | (B-A)=0 | | |||
| (A) | (B) | (A*B,B-A) | Delete (A-B) | | ||||
INCLUDE (A) TO_IN (B) INCLUDE (A+B) (B)=GMI | | | | | Send Q(G,A*B) | | |||
Send Q(G,A-B) | | | | | Group Timer=GMI | | |||
+---------+--------+-------------+---------------------+ | ||||
EXCLUDE (X,Y) ALLOW (A) EXCLUDE (X+A,Y-A) (A)=GMI | | INCLUDE | TO_IN | INCLUDE | (B)=GMI | | |||
| (A) | (B) | (A+B) | Send Q(G,A-B) | | ||||
EXCLUDE (X,Y) BLOCK (A) EXCLUDE (X+(A-Y),Y) (A-X-Y)=Group Timer | +---------+--------+-------------+---------------------+ | |||
Send Q(G,A-Y) | | EXCLUDE | ALLOW | EXCLUDE | (A)=GMI | | |||
| (X,Y) | (A) | (X+A,Y-A) | | | ||||
EXCLUDE (X,Y) TO_EX (A) EXCLUDE (A-Y,Y*A) (A-X-Y)=Group Timer | +---------+--------+-------------+---------------------+ | |||
Delete (X-A) | | EXCLUDE | BLOCK | EXCLUDE | (A-X-Y)=Group Timer | | |||
Delete (Y-A) | | (X,Y) | (A) | (X+(A-Y),Y) | Send Q(G,A-Y) | | |||
Send Q(G,A-Y) | +---------+--------+-------------+---------------------+ | |||
Group Timer=GMI | | EXCLUDE | TO_EX | EXCLUDE | (A-X-Y)=Group Timer | | |||
| (X,Y) | (A) | (A-Y,Y*A) | Delete (X-A) | | ||||
| | | | Delete (Y-A) | | ||||
| | | | Send Q(G,A-Y) | | ||||
| | | | Group Timer=GMI | | ||||
+---------+--------+-------------+---------------------+ | ||||
| EXCLUDE | TO_IN | EXCLUDE | (A)=GMI | | ||||
| (X,Y) | (A) | (X+A,Y-A) | Send Q(G,X-A) | | ||||
| | | | Send Q(G) | | ||||
+---------+--------+-------------+---------------------+ | ||||
EXCLUDE (X,Y) TO_IN (A) EXCLUDE (X+A,Y-A) (A)=GMI | Table 9 | |||
Send Q(G,X-A) | ||||
Send Q(G) | ||||
6.5. Switching Router Filter-Modes | 6.5. Switching Router Filter-Modes | |||
The group timer is used as a mechanism for transitioning the router | The group timer is used as a mechanism for transitioning the router | |||
filter-mode from EXCLUDE to INCLUDE. | filter-mode from EXCLUDE to INCLUDE. | |||
When a group timer expires with a router filter-mode of EXCLUDE, a | When a group timer expires with a router filter-mode of EXCLUDE, a | |||
router assumes that there are no systems with a filter-mode of | router assumes that there are no systems with a filter-mode of | |||
EXCLUDE present on the attached network. When a router's filter-mode | EXCLUDE present on the attached network. When a router's filter-mode | |||
for a group is EXCLUDE and the group timer expires, the router | for a group is EXCLUDE and the group timer expires, the router | |||
skipping to change at page 38, line 22 ¶ | skipping to change at line 1684 ¶ | |||
For example, if a router's state for a group is EXCLUDE(X,Y) and the | For example, if a router's state for a group is EXCLUDE(X,Y) and the | |||
group timer expires for that group, the router switches to filter- | group timer expires for that group, the router switches to filter- | |||
mode of INCLUDE with state INCLUDE(X). | mode of INCLUDE with state INCLUDE(X). | |||
6.6. Action on Reception of Queries | 6.6. Action on Reception of Queries | |||
6.6.1. Timer Updates | 6.6.1. Timer Updates | |||
When a router sends or receives a query with a clear Suppress Router- | When a router sends or receives a query with a clear Suppress Router- | |||
Side Processing flag, it must update its timers to reflect the | Side Processing flag, it must update its timers to reflect the | |||
correct timeout values for the group or sources being queried. The | correct timeout values for the group or sources being queried. | |||
following table describes the timer actions when sending or receiving | Table 10 describes the timer actions when sending or receiving a | |||
a Group-Specific or Group-and-Source Specific Query with the Suppress | Group-Specific or Group-and-Source Specific Query with the S flag not | |||
Router-Side Processing flag not set. | set. | |||
+========+===================================================+ | +========+===================================================+ | |||
| Query | Action | | | Query | Action | | |||
+========+===================================================+ | +========+===================================================+ | |||
| Q(G,A) | Source Timer for sources in A are lowered to LMQT | | | Q(G,A) | Source Timer for sources in A are lowered to LMQT | | |||
+--------+---------------------------------------------------+ | +--------+---------------------------------------------------+ | |||
| Q(G) | Group Timer is lowered to LMQT | | | Q(G) | Group Timer is lowered to LMQT | | |||
+--------+---------------------------------------------------+ | +--------+---------------------------------------------------+ | |||
Table 8 | Table 10 | |||
When a router sends or receives a query with the Suppress Router-Side | When a router sends or receives a query with the S flag set, it will | |||
Processing flag set, it will not update its timers. | not update its timers. | |||
6.6.2. Querier Election | 6.6.2. Querier Election | |||
IGMPv3 elects a single querier per subnet using the same querier | IGMPv3 elects a single querier per subnet using the same querier | |||
election mechanism as IGMPv2, namely by IP address. When a router | election mechanism as IGMPv2, namely by IP address. When a router | |||
receives a general query with a lower IP address, it sets the Other- | receives a general query with a lower IP address, it sets the Other | |||
Querier- Present timer to Other Querier Present Interval and ceases | Querier Present timer to Other Querier Present Interval and ceases to | |||
to send general queries on the network if it was the previously | send general queries on the network if it was the previously elected | |||
elected querier. After its Other-Querier Present timer expires, it | querier. After its Other-Querier Present timer expires, it should | |||
should begin sending General Queries. | begin sending General Queries. | |||
If a router receives an older version general query, it MUST use the | If a router receives an older version general query, it MUST use the | |||
oldest version of IGMP on the network. For a detailed description of | oldest version of IGMP on the network. For a detailed description of | |||
compatibility issues between IGMP versions see Section 7. | compatibility issues between IGMP versions, see Section 7. | |||
6.6.3. Building and Sending Specific Queries | 6.6.3. Building and Sending Specific Queries | |||
6.6.3.1. Building and Sending Group Specific Queries | 6.6.3.1. Building and Sending Group-Specific Queries | |||
When a table action "Send Q(G)" is encountered, then the group timer | When a table action "Send Q(G)" is encountered, the group timer must | |||
must be lowered to LMQT. The router must then immediately send a | be lowered to LMQT. The router must then immediately send a group- | |||
group specific query as well as schedule [Last Member Query Count - | specific query as well as schedule [Last Member Query Count - 1] | |||
1] query retransmissions to be sent every [Last Member Query | query retransmissions to be sent every [Last Member Query Interval] | |||
Interval] over [Last Member Query Time]. | over [Last Member Query Time]. | |||
When transmitting a group specific query, if the group timer is | When transmitting a group-specific query, if the group timer is | |||
larger than LMQT, the "Suppress Router-Side Processing" bit is set in | larger than LMQT, the "Suppress Router-Side Processing" bit is set in | |||
the query message. | the query message. | |||
6.6.3.2. Building and Sending Group and Source Specific Queries | 6.6.3.2. Building and Sending Group-and-Source-Specific Queries | |||
When a table action "Send Q(G,X)" is encountered by a querier in the | When a table action "Send Q(G,X)" is encountered by a querier in | |||
table in Section 6.4.2, the following actions must be performed for | Table 9 (Section 6.4.2), the following actions must be performed for | |||
each of the sources in X of group G, with source timer larger than | each of the sources in X of group G, with the source timer larger | |||
LMQT: | than LMQT: | |||
* Set number of retransmissions for each source to [Last Member | * Set the number of retransmissions for each source to [Last Member | |||
Query Count]. | Query Count]. | |||
* Lower source timer to LMQT. | * Lower the source timer to LMQT. | |||
The router must then immediately send a group and source specific | The router must then immediately send a group and source specific | |||
query as well as schedule [Last Member Query Count - 1] query | query as well as schedule [Last Member Query Count - 1] query | |||
retransmissions to be sent every [Last Member Query Interval] over | retransmissions to be sent every [Last Member Query Interval] over | |||
[Last Member Query Time]. The contents of these queries are | [Last Member Query Time]. The contents of these queries are | |||
calculated as follows. | calculated as follows. | |||
When building a group and source specific query for a group G, two | When building a group and source specific query for group G, two | |||
separate query messages are sent for the group. The first one has | separate query messages are sent for the group. The first one has | |||
the "Suppress Router-Side Processing" bit set and contains all the | the "Suppress Router-Side Processing" bit set and contains all the | |||
sources with retransmission state and timers greater than LMQT. The | sources with retransmission state and timers greater than LMQT. The | |||
second has the "Suppress Router-Side Processing" bit clear and | second has the "Suppress Router-Side Processing" bit clear and | |||
contains all the sources with retransmission state and timers lower | contains all the sources with retransmission state and timers lower | |||
or equal to LMQT. If either of the two calculated messages does not | or equal to LMQT. If either of the two calculated messages does not | |||
contain any sources, then its transmission is suppressed. | contain any sources, then its transmission is suppressed. | |||
Note: If a group specific query is scheduled to be transmitted at the | Note: If a group-specific query is scheduled to be transmitted at the | |||
same time as a group and source specific query for the same group, | same time as a group and source specific query for the same group, | |||
then transmission of the group and source specific message with the | then transmission of the group and source specific message with the | |||
"Suppress Router-Side Processing" bit set may be suppressed. | "Suppress Router-Side Processing" bit set may be suppressed. | |||
7. Interoperation With Older Versions of IGMP | 7. Interoperation With Older Versions of IGMP | |||
IGMP version 3 hosts and routers interoperate with hosts and routers | IGMP version 3 hosts and routers interoperate with hosts and routers | |||
that have not yet been upgraded to IGMPv3. This compatibility is | that have not yet been upgraded to IGMPv3. This compatibility is | |||
maintained by hosts and routers taking appropriate actions depending | maintained by hosts and routers taking appropriate actions depending | |||
on the versions of IGMP operating on hosts and routers within a | on the versions of IGMP operating on hosts and routers within a | |||
network. | network. | |||
7.1. Query Version Distinctions | 7.1. Query Version Distinctions | |||
The IGMP version of a Membership Query message is determined as | The IGMP version of a Membership Query message is determined as | |||
follows: | follows: | |||
IGMPv1 Query: length = 8 octets AND Max Resp Code field is zero | * IGMPv1 Query: length = 8 octets AND Max Resp Code field is zero | |||
IGMPv2 Query: length = 8 octets AND Max Resp Code field is non- | * IGMPv2 Query: length = 8 octets AND Max Resp Code field is non- | |||
zero | zero | |||
IGMPv3 Query: length >= 12 octets | * IGMPv3 Query: length >= 12 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 10 octets) MUST be silently ignored. | Query of length 10 octets) MUST be silently ignored. | |||
7.2. Group Member Behavior | 7.2. Group Member Behavior | |||
7.2.1. In the Presence of Older Version Queriers | 7.2.1. In the Presence of Older Version Queriers | |||
In order to be compatible with older version routers, IGMPv3 hosts | In order to be compatible with older version routers, IGMPv3 hosts | |||
MUST operate in version 1 and version 2 compatibility modes. IGMPv3 | MUST operate in version 1 and version 2 compatibility modes. IGMPv3 | |||
hosts MUST keep state per local interface regarding the compatibility | hosts MUST keep state per local interface regarding the compatibility | |||
mode of each attached network. A host's compatibility mode is | mode of each attached network. A host's compatibility mode is | |||
determined from the Host Compatibility Mode variable which can be in | determined from the Host Compatibility Mode variable, which can be in | |||
one of three states: IGMPv1, IGMPv2 or IGMPv3. This variable is kept | one of three states: IGMPv1, IGMPv2, or IGMPv3. This variable is | |||
per interface and is dependent on the version of General Queries | kept per interface and is dependent on the version of General Queries | |||
heard on that interface as well as the Older Version Querier Present | heard on that interface as well as the Older Version Querier Present | |||
timers for the interface. | timers for the interface. | |||
In order to switch gracefully between versions of IGMP, hosts keep | In order to switch gracefully between versions of IGMP, hosts keep | |||
both an IGMPv1 Querier Present timer and an IGMPv2 Querier Present | both an IGMPv1 Querier Present timer and an IGMPv2 Querier Present | |||
timer per interface. IGMPv1 Querier Present is set to Older Version | timer per interface. IGMPv1 Querier Present is set to Older Version | |||
Querier Present Timeout seconds whenever an IGMPv1 Membership Query | Querier Present Timeout seconds whenever an IGMPv1 Membership Query | |||
is received. IGMPv2 Querier Present is set to Older Version Querier | is received. IGMPv2 Querier Present is set to Older Version Querier | |||
Present Timeout seconds whenever an IGMPv2 General Query is received. | Present Timeout seconds whenever an IGMPv2 General Query is received. | |||
The Host Compatibility Mode of an interface changes whenever an older | The Host Compatibility Mode of an interface changes whenever an older | |||
version query (than the current compatibility mode) is heard or when | version query (than the current compatibility mode) is heard or when | |||
certain timer conditions occur. When the IGMPv1 Querier Present | certain timer conditions occur. When the IGMPv1 Querier Present | |||
timer expires, a host switches to Host Compatibility mode of IGMPv2 | timer expires, a host switches to Host Compatibility Mode of IGMPv2 | |||
if it has a running IGMPv2 Querier Present timer. If it does not | if it has a running IGMPv2 Querier Present timer. If it does not | |||
have a running IGMPv2 Querier Present timer then it switches to Host | have a running IGMPv2 Querier Present timer, then it switches to Host | |||
Compatibility of IGMPv3. When the IGMPv2 Querier Present timer | Compatibility of IGMPv3. When the IGMPv2 Querier Present timer | |||
expires, a host switches to Host Compatibility mode of IGMPv3. | expires, a host switches to Host Compatibility Mode of IGMPv3. | |||
The Host Compatibility Mode variable is based on whether an older | The Host Compatibility Mode variable is based on whether an older | |||
version General query was heard in the last Older Version Querier | version General query was heard in the last Older Version Querier | |||
Present Timeout seconds. The Host Compatibility mode variable value | Present Timeout seconds. The Host Compatibility Mode variable value | |||
MUST NOT be changed by an older version group-specific query. The | MUST NOT be changed by an older version group-specific query. The | |||
Host Compatibility Mode is set depending on the following: | Host Compatibility Mode is set depending on the following: | |||
+=========================+========================================+ | +=========================+========================================+ | |||
| Host Compatibility Mode | Timer State | | | Host Compatibility Mode | Timer State | | |||
+=========================+========================================+ | +=========================+========================================+ | |||
| IGMPv3 (default) | IGMPv2 Querier Present not running and | | | IGMPv3 (default) | IGMPv2 Querier Present not running and | | |||
| | IGMPv1 Querier Present not running | | | | IGMPv1 Querier Present not running | | |||
+-------------------------+----------------------------------------+ | +-------------------------+----------------------------------------+ | |||
| IGMPv2 | IGMPv2 Querier Present running and | | | IGMPv2 | IGMPv2 Querier Present running and | | |||
| | IGMPv1 Querier Present not running | | | | IGMPv1 Querier Present not running | | |||
+-------------------------+----------------------------------------+ | +-------------------------+----------------------------------------+ | |||
| IGMPv1 | IGMPv1 Querier Present running | | | IGMPv1 | IGMPv1 Querier Present running | | |||
+-------------------------+----------------------------------------+ | +-------------------------+----------------------------------------+ | |||
Table 9 | Table 11 | |||
If a host receives a query which causes its Querier Present timers to | If a host receives a query that causes its Querier Present timers to | |||
be updated and correspondingly its compatibility mode, it should | be updated and correspondingly its compatibility mode, it should | |||
switch compatibility modes immediately. | switch compatibility modes immediately. | |||
When Host Compatibility Mode is IGMPv3, a host acts using the IGMPv3 | When Host Compatibility Mode is IGMPv3, a host acts using the IGMPv3 | |||
protocol on that interface. When Host Compatibility Mode is IGMPv2, | protocol on that interface. When Host Compatibility Mode is IGMPv2, | |||
a host acts in IGMPv2 compatibility mode, using only the IGMPv2 | a host acts in IGMPv2 compatibility mode, using only the IGMPv2 | |||
protocol, on that interface. When Host Compatibility Mode is IGMPv1, | protocol, on that interface. When Host Compatibility Mode is IGMPv1, | |||
a host acts in IGMPv1 compatibility mode, using only the IGMPv1 | a host acts in IGMPv1 compatibility mode, using only the IGMPv1 | |||
protocol on that interface. | protocol on that interface. | |||
skipping to change at page 42, line 8 ¶ | skipping to change at line 1860 ¶ | |||
to the desired Max Resp Time, i.e., the full range of this field is | to the desired Max Resp Time, i.e., the full range of this field is | |||
linear and the exponential algorithm described in Section 4.1.1 is | linear and the exponential algorithm described in Section 4.1.1 is | |||
not used. | 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 response and retransmission timers. | pending response and retransmission timers. | |||
An SSM-aware host that receives an IGMPv1 Query, an IGMPv2 General | An SSM-aware host that receives an IGMPv1 Query, an IGMPv2 General | |||
Query, or an IGMPv2 Group Specific Query for a multicast address in | Query, or an IGMPv2 Group Specific Query for a multicast address in | |||
the SSM address range SHOULD log an error. It is RECOMMENDED that | the SSM address range SHOULD log an error. It is RECOMMENDED that | |||
implementions provide a configuration option to disable use of Host | implementations provide a configuration option to disable use of the | |||
Compatibility Mode to allow networks to operate only in SSM mode. | Host Compatibility Mode to allow networks to operate only in SSM | |||
This configuration option SHOULD be disabled by default. | mode. This configuration option SHOULD be disabled by default. | |||
7.2.2. In the Presence of Older Version Group Members | 7.2.2. In the Presence of Older Version Group Members | |||
An IGMPv3 host may be placed on a network where there are hosts that | An IGMPv3 host may be placed on a network where there are hosts that | |||
have not yet been upgraded to IGMPv3. A host MAY allow its IGMPv3 | have not yet been upgraded to IGMPv3. A host MAY allow its IGMPv3 | |||
Membership Record to be suppressed by either a Version 1 Membership | Membership Record to be suppressed by either a Version 1 Membership | |||
Report, or a Version 2 Membership Report. SSM-aware hosts MUST NOT | Report, or a Version 2 Membership Report. SSM-aware hosts MUST NOT | |||
allow its IGMPv3 Membership Record to be suppressed. | allow its IGMPv3 Membership Record to be suppressed. | |||
7.3. Multicast Router Behavior | 7.3. Multicast Router Behavior | |||
skipping to change at page 42, line 34 ¶ | skipping to change at line 1886 ¶ | |||
IGMPv3 routers may be placed on a network where at least one router | IGMPv3 routers may be placed on a network where at least one router | |||
on the network has not yet been upgraded to IGMPv3. The following | on the network has not yet been upgraded to IGMPv3. The following | |||
requirements apply: | requirements apply: | |||
* If any older versions of IGMP are present on routers, the querier | * If any older versions of IGMP are present on routers, the querier | |||
MUST use the lowest version of IGMP present on the network. This | MUST use the lowest version of IGMP present on the network. This | |||
must be administratively assured; routers that desire to be | must be administratively assured; routers that desire to be | |||
compatible with IGMPv1 and IGMPv2 MUST have a configuration option | compatible with IGMPv1 and IGMPv2 MUST have a configuration option | |||
to act in IGMPv1 or IGMPv2 compatibility modes. When in IGMPv1 | to act in IGMPv1 or IGMPv2 compatibility modes. When in IGMPv1 | |||
mode, routers MUST send Periodic Queries with a Max Resp Code of 0 | mode, routers MUST send Periodic Queries with a Max Resp Code of 0 | |||
and truncated at the Group Address field (i.e., 8 bytes long), and | and truncated at the Group Address field (i.e., 8 bytes long) and | |||
MUST ignore Leave Group messages. They SHOULD also warn about | MUST ignore Leave Group messages. They SHOULD also warn about | |||
receiving an IGMPv2 or IGMPv3 query, although such warnings MUST | receiving an IGMPv2 or IGMPv3 query, although such warnings MUST | |||
be rate-limited. When in IGMPv2 mode, routers MUST send Periodic | be rate-limited. When in IGMPv2 mode, routers MUST send Periodic | |||
Queries truncated at the Group Address field (i.e., 8 bytes long), | Queries truncated at the Group Address field (i.e., 8 bytes long) | |||
and SHOULD also warn about receiving an IGMPv3 query (such | and SHOULD also warn about receiving an IGMPv3 query (such | |||
warnings MUST be rate-limited). They also MUST fill in the Max | warnings MUST be rate-limited). They also MUST fill in the Max | |||
Resp Time in the Max Resp Code field, i.e., the exponential | Resp Time in the Max Resp Code field, i.e., the exponential | |||
algorithm described in Section 4.1.1 is not used. | algorithm described in Section 4.1.1 is not used. | |||
* If a router is not explicitly configured to use IGMPv1 or IGMPv2 | * If a router is not explicitly configured to use IGMPv1 or IGMPv2 | |||
and hears an IGMPv1 Query or IGMPv2 General Query, it SHOULD log a | and hears an IGMPv1 Query or IGMPv2 General Query, it SHOULD log a | |||
warning. These warnings MUST be rate-limited. | warning. These warnings 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. | |||
7.3.2. In the Presence of Older Version Group Members | 7.3.2. In the Presence of Older Version Group Members | |||
IGMPv3 routers may be placed on a network where there are hosts that | IGMPv3 routers may be placed on a network where there are hosts that | |||
have not yet been upgraded to IGMPv3. In order to be compatible with | have not yet been upgraded to IGMPv3. In order to be compatible with | |||
older version hosts, IGMPv3 routers MUST operate in version 1 and | older version hosts, IGMPv3 routers MUST operate in version 1 and | |||
version 2 compatibility modes. IGMPv3 routers keep a compatibility | version 2 compatibility modes. IGMPv3 routers keep a compatibility | |||
mode per group record. A group's compatibility mode is determined | mode per group record. A group's compatibility mode is determined | |||
from the Group Compatibility Mode variable which can be in one of | from the Group Compatibility Mode variable, which can be in one of | |||
three states: IGMPv1, IGMPv2 or IGMPv3. This variable is kept per | three states: IGMPv1, IGMPv2, or IGMPv3. This variable is kept per | |||
group record and is dependent on the version of Membership Reports | group record and is dependent on the version of Membership Reports | |||
heard for that group as well as the Older Version Host Present timer | heard for that group as well as the Older Version Host Present timer | |||
for the group. | for the group. | |||
In order to switch gracefully between versions of IGMP, routers keep | In order to switch gracefully between versions of IGMP, routers keep | |||
an IGMPv1 Host Present timer and an IGMPv2 Host Present timer per | an IGMPv1 Host Present timer and an IGMPv2 Host Present timer per | |||
group record. The IGMPv1 Host Present timer is set to Older Version | group record. The IGMPv1 Host Present timer is set to Older Version | |||
Host Present Timeout seconds whenever an IGMPv1 Membership Report is | Host Present Timeout seconds whenever an IGMPv1 Membership Report is | |||
received. The IGMPv2 Host Present timer is set to Older Version Host | received. The IGMPv2 Host Present timer is set to Older Version Host | |||
Present Timeout seconds whenever an IGMPv2 Membership Report is | Present Timeout seconds whenever an IGMPv2 Membership Report is | |||
received. | received. | |||
The Group Compatibility Mode of a group record changes whenever an | The Group Compatibility Mode of a group record changes whenever an | |||
older version report (than the current compatibility mode) is heard | older version report (than the current compatibility mode) is heard | |||
or when certain timer conditions occur. When the IGMPv1 Host Present | or when certain timer conditions occur. When the IGMPv1 Host Present | |||
timer expires, a router switches to Group Compatibility mode of | timer expires, a router switches to Group Compatibility Mode of | |||
IGMPv2 if it has a running IGMPv2 Host Present timer. If it does not | IGMPv2 if it has a running IGMPv2 Host Present timer. If it does not | |||
have a running IGMPv2 Host Present timer then it switches to Group | have a running IGMPv2 Host Present timer, then it switches to Group | |||
Compatibility of IGMPv3. When the IGMPv2 Host Present timer expires | Compatibility Mode of IGMPv3. When the IGMPv2 Host Present timer | |||
and the IGMPv1 Host Present timer is not running, a router switches | expires and the IGMPv1 Host Present timer is not running, a router | |||
to Group Compatibility mode of IGMPv3. Note that when a group | switches to Group Compatibility Mode of IGMPv3. Note that when a | |||
switches back to IGMPv3 mode, it takes some time to regain source- | group switches back to IGMPv3 mode, it takes some time to regain | |||
specific state information. Source-specific information will be | source- specific state information. Source-specific information will | |||
learned during the next General Query, but sources that should be | be learned during the next General Query, but sources that should be | |||
blocked will not be blocked until [Group Membership Interval] after | blocked will not be blocked until [Group Membership Interval] after | |||
that. | that. | |||
The Group Compatibility Mode variable is based on whether an older | The Group Compatibility Mode variable is based on whether an older | |||
version report was heard in the last Older Version Host Present | version report was heard in the last Older Version Host Present | |||
Timeout seconds. The Group Compatibility Mode is set depending on | Timeout seconds. The Group Compatibility Mode is set depending on | |||
the following: | the following: | |||
+==========================+=====================================+ | +==========================+=====================================+ | |||
| Group Compatibility Mode | Timer State | | | Group Compatibility Mode | Timer State | | |||
+==========================+=====================================+ | +==========================+=====================================+ | |||
| IGMPv3 (default) | IGMPv2 Host Present not running and | | | IGMPv3 (default) | IGMPv2 Host Present not running and | | |||
| | IGMPv1 Host Present not running | | | | IGMPv1 Host Present not running | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| IGMPv2 | IGMPv2 Host Present running and | | | IGMPv2 | IGMPv2 Host Present running and | | |||
| | IGMPv1 Host Present not running | | | | IGMPv1 Host Present not running | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
| IGMPv1 | IGMPv1 Host Present running | | | IGMPv1 | IGMPv1 Host Present running | | |||
+--------------------------+-------------------------------------+ | +--------------------------+-------------------------------------+ | |||
Table 10 | Table 12 | |||
If a router receives a report which causes its older Host Present | If a router receives a report that causes its older Host Present | |||
timers to be updated and correspondingly its compatibility mode, it | timers to be updated and correspondingly its compatibility mode, it | |||
SHOULD switch compatibility modes immediately. | SHOULD switch compatibility modes immediately. | |||
When Group Compatibility Mode is IGMPv3, a router acts using the | When Group Compatibility Mode is IGMPv3, a router acts using the | |||
IGMPv3 protocol for that group. | IGMPv3 protocol for that group. | |||
When Group Compatibility Mode is IGMPv2, a router internally | When Group Compatibility Mode is IGMPv2, a router internally | |||
translates the following IGMPv2 messages for that group to their | translates the following IGMPv2 messages for that group to their | |||
IGMPv3 equivalents: | IGMPv3 equivalents: | |||
+================+===================+ | +================+===================+ | |||
| IGMPv2 Message | IGMPv3 Equivalent | | | IGMPv2 Message | IGMPv3 Equivalent | | |||
+================+===================+ | +================+===================+ | |||
| Report | IS_EX( {} ) | | | Report | IS_EX( {} ) | | |||
+----------------+-------------------+ | +----------------+-------------------+ | |||
| Leave | TO_IN( {} ) | | | Leave | TO_IN( {} ) | | |||
+----------------+-------------------+ | +----------------+-------------------+ | |||
Table 11 | Table 13 | |||
IGMPv3 BLOCK messages are ignored, as are source-lists in TO_EX() | IGMPv3 BLOCK messages are ignored, as are source-lists in TO_EX() | |||
messages (i.e., any TO_EX() message is treated as TO_EX( {} )). | messages (i.e., any TO_EX() message is treated as TO_EX( {} )). | |||
When Group Compatibility Mode is IGMPv1, a router internally | When Group Compatibility Mode is IGMPv1, a router internally | |||
translates the following IGMPv1 and IGMPv2 messages for that group to | translates the following IGMPv1 and IGMPv2 messages for that group to | |||
their IGMPv3 equivalents: | their IGMPv3 equivalents: | |||
+================+===================+ | +================+===================+ | |||
| IGMPv2 Message | IGMPv3 Equivalent | | | IGMPv2 Message | IGMPv3 Equivalent | | |||
+================+===================+ | +================+===================+ | |||
| v1 Report | IS_EX( {} ) | | | v1 Report | IS_EX( {} ) | | |||
+----------------+-------------------+ | +----------------+-------------------+ | |||
| v2 Report | IS_EX( {} ) | | | v2 Report | IS_EX( {} ) | | |||
+----------------+-------------------+ | +----------------+-------------------+ | |||
Table 12 | Table 14 | |||
In addition to ignoring IGMPv3 BLOCK messages and source-lists in | In addition to ignoring IGMPv3 BLOCK messages and source-lists in | |||
TO_EX() messages as in IGMPv2 Group Compatibility Mode, IGMPv2 Leave | TO_EX() messages as in IGMPv2 Group Compatibility Mode, IGMPv2 Leave | |||
messages and IGMPv3 TO_IN() messages are also ignored. | messages and IGMPv3 TO_IN() messages are also ignored. | |||
8. List of Timers, Counters and Their Default Values | 8. 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 systems on a single link. | used, they MUST be consistent among all systems on a single link. | |||
Note that parentheses are used to group expressions to make the | Note that parentheses are used to group expressions to make the | |||
algebra clear. | algebra clear. | |||
8.1. Robustness Variable | 8.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 network. If a network is expected to be lossy, the Robustness | a network. If a network is expected to be lossy, the Robustness | |||
Variable may be increased. IGMP is robust to (Robustness Variable - | Variable may be increased. IGMP is robust to (Robustness Variable - | |||
1) packet losses. The Robustness Variable MUST NOT be zero, and | 1) packet losses. The Robustness Variable MUST NOT be zero and | |||
SHOULD NOT be one. Default: 2 | SHOULD NOT be one. Default: 2. | |||
8.2. Query Interval | 8.2. Query Interval | |||
The Query Interval is the interval between General Queries sent by | The Query Interval is the interval between General Queries sent by | |||
the Querier. Default: 125 seconds. | the Querier. Default: 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 IGMP messages on the network; larger values cause IGMP Queries to | of IGMP messages on the network; larger values cause IGMP Queries to | |||
be sent less often. | be sent less often. | |||
8.3. Query Response Interval | 8.3. Query Response Interval | |||
The Max Response Time used to calculate the Max Resp Code inserted | The Query Response Interval uses the Max Response Time to calculate | |||
into the periodic General Queries. Default: 100 (10 seconds) | the Max Resp Code that is inserted into the periodic General Queries. | |||
Default: 100 (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 IGMP messages on the network; larger values make | the burstiness of IGMP messages on the network; larger values make | |||
the traffic less bursty, as host responses are spread out over a | the traffic less bursty, as host responses are spread out over a | |||
larger interval. The number of seconds represented by the [Query | larger interval. The number of seconds represented by the [Query | |||
Response Interval] must be less than the [Query Interval]. | Response Interval] must be less than the [Query Interval]. | |||
8.4. Group Membership Interval | 8.4. Group Membership Interval | |||
The Group Membership Interval is the amount of time that must pass | The Group Membership Interval is the amount of time that must pass | |||
before a multicast router decides there are no more members of a | before a multicast router decides there are no more members of a | |||
group or a particular source on a network. | group or a particular source on a network. | |||
This value MUST be ((the Robustness Variable) times (the Query | This value MUST be ((the Robustness Variable) times (the Query | |||
Interval)) plus (2 * Query Response Interval). | Interval)) plus (2 * Query Response Interval). | |||
8.5. Other Querier Present Interval | 8.5. Other Querier Present Interval | |||
The Other Querier Present Interval is the length of time that must | The Other Querier Present Interval is the length of time that must | |||
pass before a multicast router decides that there is no longer | pass before a multicast router decides that there is no longer | |||
another multicast router which should be the querier. This value | another multicast router that should be the querier. This value MUST | |||
MUST be ((the Robustness Variable) times (the Query Interval)) plus | be ((the Robustness Variable) times (the Query Interval)) plus (one | |||
(one half of one Query Response Interval). | half of one Query Response Interval). | |||
8.6. Startup Query Interval | 8.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: 1/4 the Query Interval. | sent by a Querier on startup. Default: 1/4 the Query Interval. | |||
8.7. Startup Query Count | 8.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: the Robustness | separated by the Startup Query Interval. Default: The Robustness | |||
Variable. | Variable. | |||
8.8. Last Member Query Interval | 8.8. Last Member Query Interval | |||
The Last Member Query Interval is the Max Response Time used to | The Last Member Query Interval (LMQI) is the Max Response Time used | |||
calculate the Max Resp Code inserted into Group-Specific Queries sent | to calculate the Max Resp Code that is inserted into Group-Specific | |||
in response to Leave Group messages. It is also the Max Response | Queries sent in response to Leave Group messages. It is also the Max | |||
Time used in calculating the Max Resp Code for Group-and-Source- | Response Time used in calculating the Max Resp Code for Group-and- | |||
Specific Query messages. Default: 10 (1 second) | Source-Specific Query messages. Default: 10 (1 second). | |||
Note that for values of LMQI greater than 12.8 seconds, a limited set | Note that for values of LMQI greater than 12.8 seconds, a limited set | |||
of values can be represented, corresponding to sequential values of | of values can be represented, corresponding to sequential values of | |||
Max Resp Code. When converting a configured time to a Max Resp Code | Max Resp Code. When converting a configured time to a Max Resp Code | |||
value, it is recommended to use the exact value if possible, or the | value, it is recommended to use the exact value, if possible, or the | |||
next lower value if the requested value is not exactly representable. | next lower value if the requested value is not exactly representable. | |||
This value may be tuned to modify the "leave latency" of the network. | This value may be tuned to modify the "leave latency" of the network. | |||
A reduced value results in reduced time to detect the loss of the | A reduced value results in reduced time to detect the loss of the | |||
last member of a group or source. | last member of a group or source. | |||
8.9. Last Member Query Count | 8.9. Last Member Query Count | |||
The Last Member Query Count is the number of Group-Specific Queries | The Last Member Query Count is the number of Group-Specific Queries | |||
sent before the router assumes there are no local members. The Last | sent before the router assumes there are no local members. The Last | |||
Member Query Count is also the number of Group-and-Source-Specific | Member Query Count is also the number of Group-and-Source-Specific | |||
Queries sent before the router assumes there are no listeners for a | Queries sent before the router assumes there are no listeners for a | |||
particular source. Default: the Robustness Variable. | particular source. Default: The Robustness Variable. | |||
8.10. Last Member Query Time | 8.10. Last Member Query Time | |||
The Last Member Query Time is the time value represented by the Last | The Last Member Query Time is the time value represented by the Last | |||
Member Query Interval, multiplied by the Last Member Query Count. It | Member Query Interval, multiplied by the Last Member Query Count. It | |||
is not a tunable value, but may be tuned by changing its components. | is not a tunable value, but it may be tuned by changing its | |||
components. | ||||
8.11. Unsolicited Report Interval | 8.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 | |||
host's initial report of membership in a group. Default: 1 second. | host's initial report of membership in a group. Default: 1 second. | |||
8.12. Older Version Querier Present Interval | 8.12. Older Version Querier Present Interval | |||
The Older Version Querier Present Interval is the timeout for | The Older Version Querier Present Interval is the timeout for | |||
transitioning a host back to IGMPv3 mode once an older version query | transitioning a host back to IGMPv3 mode once an older version query | |||
skipping to change at page 47, line 40 ¶ | skipping to change at line 2120 ¶ | |||
Interval. | Interval. | |||
It is RECOMMENDED to use the default values for calculating the | It is RECOMMENDED to use the default values for calculating the | |||
interval value as hosts do not know the values configured on the | interval value as hosts do not know the values configured on the | |||
querying routers. This value SHOULD be [Robustness Variable] times | querying routers. This value SHOULD be [Robustness Variable] times | |||
[Query Interval] plus (10 times the Max Resp Time in the last | [Query Interval] plus (10 times the Max Resp Time in the last | |||
received query message). | received query message). | |||
8.13. Older Host Present Interval | 8.13. Older Host Present Interval | |||
The Older Host Present Interval is the time-out for transitioning a | The Older Host Present Interval is the timeout for transitioning a | |||
group back to IGMPv3 mode once an older version report is sent for | group back to IGMPv3 mode once an older version report is sent for | |||
that group. When an older version report is received, routers set | that group. When an older version report is received, routers set | |||
their Older Host Present Timer to Older Host Present Interval. | their Older Host Present Timer to Older Host Present Interval. | |||
This value MUST be ((the Robustness Variable) times (the Query | This value MUST be ((the Robustness Variable) times (the Query | |||
Interval)) plus (one Query Response Interval). | Interval)) plus (one Query Response Interval). | |||
8.14. Configuring Timers | 8.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 | |||
skipping to change at page 49, line 6 ¶ | skipping to change at line 2171 ¶ | |||
in Group-Specific and Source-and-Group-Specific Queries extends the | in Group-Specific and Source-and-Group-Specific Queries extends the | |||
leave latency. (The leave latency is the time between when the last | leave latency. (The leave latency is the time between when the last | |||
member stops listening to a source or group and when the traffic | member stops listening to a source or group and when the traffic | |||
stops flowing.) The expected rate of Report messages can be | stops flowing.) The expected rate of Report messages can be | |||
calculated by dividing the expected number of Reporters by the Max | calculated by dividing the expected number of Reporters by the Max | |||
Response Time. The Max Response Time may be dynamically calculated | Response Time. The Max Response Time may be dynamically calculated | |||
per Query by using the expected number of Reporters for that Query as | per Query by using the expected number of Reporters for that Query as | |||
follows: | follows: | |||
+===========================+===============================+ | +===========================+===============================+ | |||
| Query Type | Expected number of Reporters | | | Query Type | Expected Number of Reporters | | |||
+===========================+===============================+ | +===========================+===============================+ | |||
| General Query | All systems on subnetwork | | | General Query | All systems on the subnetwork | | |||
+---------------------------+-------------------------------+ | +---------------------------+-------------------------------+ | |||
| Group-Specific Query | All systems that had | | | Group-Specific Query | All systems that had | | |||
| | expressed interest in the | | | | expressed interest in the | | |||
| | group on the subnetwork | | | | group on the subnetwork | | |||
+---------------------------+-------------------------------+ | +---------------------------+-------------------------------+ | |||
| Source-and-Group-Specific | All systems on the subnetwork | | | Source-and-Group-Specific | All systems on the subnetwork | | |||
| Query | that had expressed interest | | | Query | that had expressed interest | | |||
| | in the source and group | | | | in the source and group | | |||
+---------------------------+-------------------------------+ | +---------------------------+-------------------------------+ | |||
Table 13 | Table 15 | |||
A router is not required to calculate these populations or tune the | A router is not required to calculate these populations or tune the | |||
Max Response Time dynamically; these are simply guidelines. | Max Response Time dynamically; these are simply guidelines. | |||
9. Security Considerations | 9. Security Considerations | |||
IGMP does provide any form of confidentiality. This means any device | IGMP provides any form of confidentiality. This means any device on | |||
on a link can passively receive any IGMP message on the link. Such | a link can passively receive any IGMP message on the link. Such | |||
access can lead to privacy concerns around potentially sensitive | access can lead to privacy concerns around potentially sensitive | |||
multicast groups or the ability to identify/map the devices on a | multicast groups or the ability to identify/map the devices on a | |||
link. | link. | |||
We consider the ramifications of a forged message of each type, and | We consider the ramifications of a forged message of each type and | |||
describe the usage of IPsec AH to authenticate messages if desired. | describe the usage of an IPsec Authentication Header (AH) to | |||
authenticate messages if desired. | ||||
9.1. Query Message | 9.1. Query Message | |||
A forged Query message from a machine with a lower IP address than | A forged Query message from a machine with a lower IP address than | |||
the current Querier will cause Querier duties to be assigned to the | the current Querier will cause Querier duties to be assigned to the | |||
forger. If the forger then sends no more Query messages, other | forger. If the forger then sends no more Query messages, other | |||
routers' Other Querier Present timer will time out and one will | routers' Other Querier Present timer will time out and one will | |||
resume the role of Querier. During this time, if the forger ignores | resume the role of Querier. During this time, if the forger ignores | |||
Leave Messages, traffic might flow to groups with no members for up | Leave messages, traffic might flow to groups with no members for up | |||
to [Group Membership Interval]. | to [Group Membership Interval]. | |||
A DoS attack on a host could be staged through forged Group-and- | A Denial-of-Service (DoS) attack on a host could be staged through | |||
Source-Specific Queries. The attacker can find out about membership | forged Group-and- Source-Specific Queries. The attacker can find out | |||
of a specific host with a general query. After that it could send a | about membership of a specific host with a general query. After | |||
large number of Group-and-Source-Specific queries, each with a large | that, it could send a large number of Group-and-Source-Specific | |||
source list and the Maximum Response Time set to a large value. The | queries, each with a large source list and the Maximum Response Time | |||
host will have to store and maintain the sources specified in all of | set to a large value. The host will have to store and maintain the | |||
those queries for as long as it takes to send the delayed response. | sources specified in all of those queries for as long as it takes to | |||
This would consume both memory and CPU cycles in order to augment the | send the delayed response. This would consume both memory and CPU | |||
recorded sources with the source lists included in the successive | cycles in order to augment the recorded sources with the source lists | |||
queries. | included in the successive queries. | |||
To protect against such a DoS attack, a host stack implementation | To protect against such a DoS attack, a host stack implementation | |||
could restrict the number of Group-and-Source-Specific Queries per | could restrict the number of Group-and-Source-Specific Queries per | |||
group membership within this interval, and/or record only a limited | group membership within this interval and/or record only a limited | |||
number of sources. | number of sources. | |||
Forged Query messages from the local network can be easily traced. | Forged Query messages from the local network can be easily traced. | |||
There are three measures necessary to defend against externally | There are three measures necessary to defend against externally | |||
forged Queries: | forged Queries: | |||
* Routers SHOULD NOT forward Queries. This is easier for a router | * Routers SHOULD NOT forward Queries. This is easier for a router | |||
to accomplish if the Query carries the Router-Alert option. | to accomplish if the Query carries the Router Alert option. | |||
* Hosts SHOULD ignore v2 or v3 Queries without the Router-Alert | * Hosts SHOULD ignore v2 or v3 Queries without the Router Alert | |||
option. | option. | |||
* Hosts SHOULD ignore v1, v2 or v3 General Queries sent to a | * Hosts SHOULD ignore v1, v2, or v3 General Queries sent to a | |||
multicast address other than 224.0.0.1, the all-systems address. | multicast address other than 224.0.0.1, the all-systems address. | |||
9.2. Current-State Report messages | 9.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 members of a group on a network when there are not. Forged | are members of a group on a network when there are not. Forged | |||
Report messages from the local network are meaningless, since joining | Report messages from the local network are meaningless, as joining a | |||
a group on a host is generally an unprivileged operation, so a local | group on a host is generally an unprivileged operation, so a local | |||
user may trivially gain the same result without forging any messages. | user may trivially gain the same result without forging any messages. | |||
Forged Report messages from external sources are more troublesome; | Forged Report messages from external sources are more troublesome; | |||
there are two defenses against externally forged Reports: | there are two defenses against externally forged Reports: | |||
* Ignore the Report if you cannot identify the source address of the | 1. Ignore the Report if you cannot identify the source address of | |||
packet as belonging to a network assigned to the interface on | the packet as belonging to a network assigned to the interface on | |||
which the packet was received. This solution means that Reports | which the packet was received. This solution means that Reports | |||
sent by mobile hosts without addresses on the local network will | sent by mobile hosts without addresses on the local network will | |||
be ignored. Report messages with a source address of 0.0.0.0 | be ignored. Report messages with a source address of 0.0.0.0 | |||
SHOULD be accepted on any interface. | SHOULD be accepted on any interface. | |||
* Ignore Report messages without Router Alert options [RFC2113], and | 2. Ignore Report messages without Router Alert options [RFC2113] and | |||
require that routers not forward Report messages. (The | require routers to not forward Report messages. (The requirement | |||
requirement is not a requirement of generalized filtering in the | is not a requirement of generalized filtering in the forwarding | |||
forwarding path, since the packets already have Router Alert | path, as the packets already have Router Alert options in them.) | |||
options in them.) This solution breaks backwards compatibility | This solution breaks backwards compatibility with implementations | |||
with implementations of IGMPv1 or earlier versions of IGMPv2 which | of IGMPv1 or earlier versions of IGMPv2 that did not require a | |||
did not require Router Alert. | Router Alert. | |||
A forged Version 1 Report Message may put a router into "version 1 | A forged Version 1 Report Message may put a router into "version 1 | |||
members present" state for a particular group, meaning that the | members present" state for a particular group, meaning that the | |||
router will ignore Leave messages. This can cause traffic to flow to | router will ignore Leave messages. This can cause traffic to flow to | |||
groups with no members for up to [Group Membership Interval]. This | groups with no members for up to [Group Membership Interval]. This | |||
can be solved by providing routers with a configuration switch to | can be solved by providing routers with a configuration switch to | |||
ignore Version 1 messages completely. This breaks automatic | ignore Version 1 messages completely. This breaks automatic | |||
compatibility with Version 1 hosts, so should only be used in | compatibility with Version 1 hosts, so it should only be used in | |||
situations where "fast leave" is critical. | situations where "fast leave" is critical. | |||
A forged Version 2 Report Message may put a router into "version 2 | A forged Version 2 Report Message may put a router into "version 2 | |||
members present" state for a particular group, meaning that the | members present" state for a particular group, meaning that the | |||
router will ignore IGMPv3 source-specific state messages. This can | router will ignore IGMPv3 source-specific state messages. This can | |||
cause traffic to flow from unwanted sources for up to [Group | cause traffic to flow from unwanted sources for up to [Group | |||
Membership Interval]. This can be solved by providing routers with a | Membership Interval]. This can be solved by providing routers with a | |||
configuration switch to ignore Version 2 messages completely. This | configuration switch to ignore Version 2 messages completely. This | |||
breaks automatic compatibility with Version 2 hosts, so should only | breaks automatic compatibility with Version 2 hosts, so it should | |||
be used in situations where source include and exclude is critical. | only be used in situations where source include and exclude is | |||
critical. | ||||
9.3. State-Change Report Messages | 9.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 Group-Specific or Source-and-Group-Specific Queries for the group | out Group-Specific or Source-and-Group-Specific Queries for the group | |||
in question. This causes extra processing on each router and on each | in question. This causes extra processing on each router and on each | |||
member of the group, but can not cause loss of desired traffic. | member of the group, but it cannot cause loss of desired traffic. | |||
There are two defenses against externally forged State-Change Report | There are two defenses against externally forged State-Change Report | |||
messages: | messages: | |||
* Ignore the State-Change Report message if you cannot identify the | 1. Ignore the State-Change Report message if you cannot identify the | |||
source address of the packet as belonging to a subnet assigned to | source address of the packet as belonging to a subnet assigned to | |||
the interface on which the packet was received. This solution | the interface on which the packet was received. This solution | |||
means that State-Change Report messages sent by mobile hosts | means that State-Change Report messages sent by mobile hosts | |||
without addresses on the local subnet will be ignored. State- | without addresses on the local subnet will be ignored. State- | |||
Change Report messages with a source address of 0.0.0.0 SHOULD be | Change Report messages with a source address of 0.0.0.0 SHOULD be | |||
accepted on any interface. | accepted on any interface. | |||
* Ignore State-Change Report messages without Router Alert options | 2. Ignore State-Change Report messages without Router Alert options | |||
[RFC2113], and require that routers not forward State-Change | [RFC2113] and require routers to not forward State-Change Report | |||
Report messages. (The requirement is not a requirement of | messages. (The requirement is not a requirement of generalized | |||
generalized filtering in the forwarding path, since the packets | filtering in the forwarding path, as the packets already have | |||
already have Router Alert options in them.) | Router Alert options in them.) | |||
9.4. IPsec Usage | 9.4. IPsec Usage | |||
In addition to these measures, IPsec in Authentication Header mode | In addition to these measures, IPsec in AH mode [RFC4302] may be used | |||
[RFC4302] may be used to protect against remote attacks by ensuring | to protect against remote attacks by ensuring that IGMPv3 messages | |||
that IGMPv3 messages came from a system on the LAN (or, more | came from a system on the LAN (or, more specifically, from a system | |||
specifically, a system with the proper key). When using IPsec, the | with the proper key). When using IPsec, the messages sent to | |||
messages sent to 224.0.0.1 and 224.0.0.22 should be authenticated | 224.0.0.1 and 224.0.0.22 should be authenticated using AH. When | |||
using AH. When keying, there are two possibilities: | keying, there are two possibilities: | |||
1. Use a symmetric signature algorithm with a single key for the LAN | 1. Use a symmetric signature algorithm with a single key for the LAN | |||
(or a key for each group). This allows validation that a packet | (or a key for each group). This allows validation that a packet | |||
was sent by a system with the key. This has the limitation that | was sent by a system with the key. This has the limitation that | |||
any system with the key can forge a message; it is not possible | any system with the key can forge a message; it is not possible | |||
to authenticate the individual sender precisely. It also | to authenticate the individual sender precisely. It also | |||
requires disabling IPSec's Replay Protection. | requires disabling IPsec's Replay Protection. | |||
2. When appropriate key management standards have been developed, | 2. When appropriate key management standards have been developed, | |||
use an asymmetric signature algorithm. All systems need to know | use an asymmetric signature algorithm. All systems need to know | |||
the public key of all routers, and all routers need to know the | the public key of all routers, and all routers need to know the | |||
public key of all systems. This requires a large amount of key | public key of all systems. This requires a large amount of key | |||
management but has the advantage that senders can be | management but has the advantage that senders can be | |||
authenticated individually so e.g., a host cannot forge a message | authenticated individually so, e.g., a host cannot forge a | |||
that only routers should be allowed to send. | message that only routers should be allowed to send. | |||
This solution only directly applies to Query and Leave messages in | This solution only directly applies to Query and Leave messages in | |||
IGMPv1 and IGMPv2, since Reports are sent to the group being reported | IGMPv1 and IGMPv2 as Reports are sent to the group being reported, | |||
and it is not feasible to agree on a key for host-to-router | and it is not feasible to agree on a key for host-to-router | |||
communication for arbitrary multicast groups. | communication for arbitrary multicast groups. | |||
10. IANA Considerations | 10. IANA Considerations | |||
All IGMP types described in this document are managed via | All IGMP types described in this document are managed via [RFC9778]. | |||
[I-D.ietf-pim-3228bis]. | ||||
References to RFC 3376 that currently exist in IANA registries are to | ||||
be updated to reference this document. This includes a reference in | ||||
the IGMP Type Numbers registry and the informational reference in the | ||||
IPFIX Information Elements registry. | ||||
11. Contributors | ||||
Brad Cain, Steve Deering, Isidor Kouvelas, Bill Fenner, and Ajit | ||||
Thyagarajan are the authors of RFC 3376, which forms the bulk of the | ||||
content contained herein. | ||||
Anuj Budhiraja, Toerless Eckert, Olufemi Komolafe and Tim Winters | ||||
have contributed valuable content to this version of the | ||||
specification. | ||||
12. Acknowledgments | ||||
We would like to thank Ran Atkinson, Luis Costa, Toerless Eckert, | ||||
Dino Farinacci, Serge Fdida, Wilbert de Graaf, Sumit Gupta, Mark | ||||
Handley, Bob Quinn, Michael Speer, Dave Thaler and Rolland Vida for | ||||
comments and suggestions on RFC 3376. | ||||
Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable | ||||
feedback on this version of the specification and we thank them for | ||||
their input. | ||||
13. References | IANA has replaced each reference to [RFC3376] with a reference to | |||
this document in both the "IGMP Type Numbers" and "IPFIX Information | ||||
Elements" registries. | ||||
13.1. Normative References | 11. References | |||
[I-D.ietf-pim-3228bis] | 11.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>. | ||||
[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, | [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, | |||
RFC 1112, DOI 10.17487/RFC1112, August 1989, | RFC 1112, DOI 10.17487/RFC1112, August 1989, | |||
<https://www.rfc-editor.org/info/rfc1112>. | <https://www.rfc-editor.org/info/rfc1112>. | |||
[RFC2113] Katz, D., "IP Router Alert Option", RFC 2113, | [RFC2113] Katz, D., "IP Router Alert Option", RFC 2113, | |||
DOI 10.17487/RFC2113, February 1997, | DOI 10.17487/RFC2113, February 1997, | |||
<https://www.rfc-editor.org/info/rfc2113>. | <https://www.rfc-editor.org/info/rfc2113>. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
skipping to change at page 54, line 13 ¶ | skipping to change at line 2383 ¶ | |||
August 2006, <https://www.rfc-editor.org/info/rfc4604>. | August 2006, <https://www.rfc-editor.org/info/rfc4604>. | |||
[RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for | [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for | |||
IP", RFC 4607, DOI 10.17487/RFC4607, August 2006, | IP", RFC 4607, DOI 10.17487/RFC4607, August 2006, | |||
<https://www.rfc-editor.org/info/rfc4607>. | <https://www.rfc-editor.org/info/rfc4607>. | |||
[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>. | |||
13.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>. | ||||
11.2. Informative References | ||||
[RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the | [RFC1071] Braden, R., Borman, D., and C. Partridge, "Computing the | |||
Internet checksum", RFC 1071, DOI 10.17487/RFC1071, | Internet checksum", RFC 1071, DOI 10.17487/RFC1071, | |||
September 1988, <https://www.rfc-editor.org/info/rfc1071>. | September 1988, <https://www.rfc-editor.org/info/rfc1071>. | |||
[RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. | |||
Thyagarajan, "Internet Group Management Protocol, Version | Thyagarajan, "Internet Group Management Protocol, Version | |||
3", RFC 3376, DOI 10.17487/RFC3376, October 2002, | 3", RFC 3376, DOI 10.17487/RFC3376, October 2002, | |||
<https://www.rfc-editor.org/info/rfc3376>. | <https://www.rfc-editor.org/info/rfc3376>. | |||
skipping to change at page 54, line 38 ¶ | skipping to change at line 2413 ¶ | |||
[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>. | |||
Appendix A. Design Rationale | Appendix A. Design Rationale | |||
A.1. The Need for State-Change Messages | A.1. The Need for State-Change Messages | |||
IGMPv3 specifies two types of Membership Reports: Current-State and | IGMPv3 specifies two types of Membership Reports: Current-State and | |||
State Change. This section describes the rationale for the need for | State Change. This section describes the rationale for needing both | |||
both these types of Reports. | types of Reports. | |||
Routers need to distinguish Membership Reports that were sent in | Routers need to distinguish Membership Reports that were sent in | |||
response to Queries from those that were sent as a result of a change | response to Queries from those that were sent as a result of a change | |||
in interface state. Membership reports that are sent in response to | in interface state. Membership reports that are sent in response to | |||
Membership Queries are used mainly to refresh the existing state at | Membership Queries are used mainly to refresh the existing state at | |||
the router; they typically do not cause transitions in state at the | the router; they typically do not cause transitions in state at the | |||
router. Membership Reports that are sent in response to changes in | router. Membership Reports that are sent in response to changes in | |||
interface state require the router to take some action in response to | interface state require the router to take some action in response to | |||
the received report (see Section 6.4). | the received report (see Section 6.4). | |||
The inability to distinguish between the two types of reports would | The inability to distinguish between the two types of reports would | |||
force a router to treat all Membership Reports as potential changes | force a router to treat all Membership Reports as potential changes | |||
in state and could result in increased processing at the router as | in state, and it could result in increased processing at the router | |||
well as an increase in IGMP traffic on the network. | as well as an increase in IGMP traffic on the network. | |||
A.2. Host Suppression | A.2. Host Suppression | |||
In IGMPv1 and IGMPv2, a host would cancel sending a pending | In IGMPv1 and IGMPv2, a host would cancel sending pending membership | |||
membership reports if a similar report was observed from another | reports if a similar report was observed from another member on the | |||
member on the network. In IGMPv3, this suppression of host | network. In IGMPv3, this suppression of host membership reports has | |||
membership reports has been removed. The following points explain | been removed. The following points explain the reasons behind this | |||
the reasons behind this decision. | decision. | |||
1. Routers may want to track per-host membership status on an | 1. Routers may want to track per-host membership status on an | |||
interface. This allows routers to implement fast leaves (e.g., | interface. This allows routers to implement fast leaves (e.g., | |||
for layered multicast congestion control schemes) as well as | for layered multicast congestion control schemes) as well as | |||
track membership status for possible accounting purposes. | track membership status for possible accounting purposes. | |||
2. Membership Report suppression does not work well on bridged LANs. | 2. Membership Report suppression does not work well on bridged LANs. | |||
Many bridges and Layer2/Layer3 switches that implement IGMP | Many bridges and Layer 2 / Layer 3 switches that implement IGMP | |||
snooping do not forward IGMP messages across LAN segments in | snooping do not forward IGMP messages across LAN segments in | |||
order to prevent membership report suppression. Removing | order to prevent membership report suppression. Removing | |||
membership report suppression eases the job of these IGMP | membership report suppression eases the job of these IGMP | |||
snooping devices. | snooping devices. | |||
3. By eliminating membership report suppression, hosts have fewer | 3. By eliminating membership report suppression, hosts have fewer | |||
messages to process; this leads to a simpler state machine | messages to process; this leads to a simpler state machine | |||
implementation. | implementation. | |||
4. In IGMPv3, a single membership report now bundles multiple | 4. In IGMPv3, a single membership report now bundles multiple | |||
multicast group records to decrease the number of packets sent. | multicast group records to decrease the number of packets sent. | |||
In comparison, the previous versions of IGMP required that each | In comparison, the previous versions of IGMP required that each | |||
multicast group be reported in a separate message. | multicast group 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 there exist hosts in both EXCLUDE and INCLUDE modes for a single | If hosts exist in both EXCLUDE and INCLUDE modes for a single | |||
multicast group in a network, the router must be in EXCLUDE mode as | multicast group in a network, the router must be in EXCLUDE mode as | |||
well (see Section 6.2.1). In EXCLUDE mode, a router forwards traffic | well (see Section 6.2.1). In EXCLUDE mode, a router forwards traffic | |||
from all sources unless that source exists in the exclusion source | from all sources unless that source exists in the exclusion source | |||
list. If all hosts in EXCLUDE mode cease to exist, it would be | list. If all hosts in EXCLUDE mode cease to exist, it would be | |||
desirable for the router to switch back to INCLUDE mode seamlessly | desirable for the router to switch back to INCLUDE mode seamlessly | |||
without interrupting the flow of traffic to existing receivers. | without interrupting the flow of traffic to existing receivers. | |||
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 desired by hosts that are in INCLUDE mode even though the | all sources desired by hosts that are in INCLUDE mode even though the | |||
router itself is in EXCLUDE mode. If the group timer now expires in | router itself is in EXCLUDE mode. If the group timer now expires in | |||
EXCLUDE mode, it implies that there are no hosts in EXCLUDE mode on | EXCLUDE mode, it implies that there are no hosts in EXCLUDE mode on | |||
the network (otherwise a membership report from that host would have | the network (otherwise, a membership report from that host would have | |||
refreshed the group timer). The router can then switch to INCLUDE | refreshed the group timer). The router can then switch to INCLUDE | |||
mode seamlessly with the list of sources currently being forwarded in | mode seamlessly with the list of sources currently being forwarded in | |||
its source list. | its source list. | |||
Appendix B. Summary of Changes from IGMPv2 | Appendix B. Summary of Changes from IGMPv2 | |||
While the main additional feature of IGMPv3 is the addition of source | While the main additional feature of IGMPv3 is the addition of source | |||
filtering, the following is a summary of other changes from RFC 2236. | filtering, the following is a summary of other changes from | |||
[RFC2236]. | ||||
* State is maintained as Group + List-of-Sources, not simply Group | * State is maintained as Group + List-of-Sources, not simply Group | |||
as in IGMPv2. | as in IGMPv2. | |||
* Interoperability with IGMPv1 and IGMPv2 systems is defined as | * Interoperability with IGMPv1 and IGMPv2 systems is defined as | |||
operations on the IGMPv3 state. | operations on the IGMPv3 state. | |||
* The IP Service Interface has changed to allow specification of | * The IP service interface has changed, to allow specification of | |||
source-lists. | source-lists. | |||
* The Querier includes its Robustness Variable and Query Interval in | * The Querier includes its Robustness Variable and Query Interval in | |||
Query packets to allow synchronization of these variables on non- | Query packets to allow synchronization of these variables on non- | |||
Queriers. | Queriers. | |||
* The Max Response Time in Query messages has an exponential range, | * The Max Response Time in Query messages has an exponential range, | |||
changing the maximum from 25.5 seconds to about 53 minutes, for | changing the maximum from 25.5 seconds to about 53 minutes, for | |||
use on links with huge numbers of systems. | use on links with a huge number of systems. | |||
* Hosts retransmit state-change messages for increased robustness. | * Hosts retransmit state-change messages for increased robustness. | |||
* Additional data sections are defined to allow later extensions. | * Additional data sections are defined, to allow later extensions. | |||
* Report packets are sent to 224.0.0.22, to assist layer-2 switches | * Report packets are sent to 224.0.0.22, to assist Layer 2 switches | |||
in snooping. | in snooping. | |||
* Report packets can contain multiple group records, to allow | * Report packets can contain multiple group records, to allow | |||
reporting of full current state using fewer packets. | reporting of full current state using fewer packets. | |||
* Hosts no longer perform suppression, to simplify implementations | * Hosts no longer perform suppression, to simplify implementations | |||
and permit explicit membership tracking. | and permit explicit membership tracking. | |||
* New Suppress Router-Side Processing (S) flag in Query messages | * A new S flag in Query messages fixes robustness issues, which were | |||
fixes robustness issues which were also present in IGMPv2. | also present in IGMPv2. | |||
Appendix C. Summary of Changes from RFC 3376 | Appendix C. Summary of Changes from RFC 3376 | |||
The following is a list of changes made since RFC 3376. | The following is a list of changes made since [RFC3376] was | |||
published. | ||||
* Modified definition of Older Version Querier Present Interval to | * Modified the definition of Older Version Querier Present Interval | |||
address Erratum 4375. | to address Erratum 4375. | |||
* Modified metadata to fix Obsoletes vs Updates relationship with | * Modified the metadata to fix the Obsoletes vs. Updates | |||
RFC 2236 per Erratum 1501. | relationship with [RFC2236] per Erratum 1501. | |||
* Updated introductory text to describe Updates relationship with | * Updated the introductory text to describe the Updates relationship | |||
RFC 2236 per Erratum 7339. | with [RFC2236] per Erratum 7339. | |||
* Updated Group Membership Interval definition to address Erratum | * Updated the definition of Group Membership Interval to address | |||
6725. | Erratum 6725. | |||
* Updated text for Router Filter-Mode to address Erratum 5562. | * Updated the text relating to the router filter-mode to address | |||
Erratum 5562. | ||||
* Clarified the use of General Queries in the Querier election | * Clarified the use of General Queries in the Querier election | |||
process. | process. | |||
Acknowledgments | ||||
We would like to thank Ran Atkinson, Luis Costa, Toerless Eckert, | ||||
Dino Farinacci, Serge Fdida, Wilbert de Graaf, Sumit Gupta, Mark | ||||
Handley, Bob Quinn, Michael Speer, Dave Thaler, and Rolland Vida for | ||||
comments and suggestions on [RFC3376]. | ||||
Stig Venaas, Hitoshi Asaeda, and Mike McBride have provided valuable | ||||
feedback on this specification, and we thank them for their input. | ||||
Contributors | ||||
Brad Cain, Steve Deering, Isidor Kouvelas, Bill Fenner, and Ajit | ||||
Thyagarajan are the authors of [RFC3376], which forms the bulk of the | ||||
content contained herein. | ||||
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. 244 change blocks. | ||||
671 lines changed or deleted | 684 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |