Lightweight Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Protocols
Extracted elements (21)
Although LW-IGMPv3 hosts use only four record types (ALLOW, BLOCK, TO_IN, TO_EX), using IS_EX({}) instead of TO_EX({}) and IS_IN(x) instead of ALLOW(x) in query responses is not prohibited. Because the router processes both pairs identically per full IGMPv3 rules, this does not introduce interoperability issues.
Because hosts in LW-IGMPv3 only send INCLUDE requests and EXCLUDE(*,G) joins (never EXCLUDE with a non-null source list), multicast routers no longer need to maintain an EXCLUDE filter-mode. The router state model is simplified to (multicast address, group timer, source records), eliminating complex filter-mode transitions.
EXCLUDE mode with non-null source lists is rarely used in practice because users typically specify desired sources, not undesired ones. Even when a user blocks sources, other hosts on the shared network may still request those sources, making the filter ineffective. LW-IGMPv3 drops this operation entirely to simplify both host and router behavior.
IS_EX({}) and IS_IN(x) record types are eliminated from LW-IGMPv3 host behavior. IS_EX({}) is subsumed by TO_EX({}) because a router creates identical state for both; IS_IN(x) is replaced by ALLOW(x) because router processing is identical. This reduces the set of report types a host must generate from six to four (ALLOW, BLOCK, TO_IN, TO_EX).
If an LW-IGMPv3 router receives an IS_EX(x) report with a non-empty source list, it treats it as IS_EX({}). Similarly, a TO_EX(x) with a non-empty source list is treated as TO_EX({}). This ensures graceful handling of full-version IGMPv3 messages that are not generated by lightweight hosts.
LW-IGMPv3 and LW-MLDv2 do not introduce any changes to Query or Report message formats. An LW-IGMPv3 host sends a subset of IGMPv3 Report messages recognized by both full and lightweight IGMPv3 routers on the same LAN; its Host Compatibility Mode is set to IGMPv3.
The Host Compatibility Mode of an interface is set to IGMPv2 on receipt of an IGMPv2 General Query, and to IGMPv1 on receipt of an IGMPv1 Membership Query; the corresponding Querier Present timer is set to Older Version Querier Present Timeout. LW-IGMPv3 hosts may optionally suppress their reports when IGMPv1/v2 reports are present, and this suppression behavior may be configurable.
When Group Compatibility Mode is IGMPv2, an LW-IGMPv3 router treats an IGMPv2 Report as TO_EX({}) and an IGMPv2 Leave as TO_IN({}). When Group Compatibility Mode is IGMPv1, both IGMPv1 and IGMPv2 Reports are translated to TO_EX({}).
An LW-IGMPv3 host should implement either the IPv4 Basic MSF API or the Protocol-Independent Basic MSF API. An LW-MLDv2 host should implement the Protocol-Independent Basic MSF API. The Advanced MSF APIs (IPv4 Advanced and Protocol-Independent Advanced) are optional.
An LW-IGMPv3 or LW-MLDv2 host SHOULD NOT invoke (*,G) join (TO_EX({})) or (*,G) leave (TO_IN({})) for applications whose multicast addresses are in the SSM address range. An upstream LW-IGMPv3/LW-MLDv2 router MUST NOT establish forwarding state upon receipt of such messages for SSM addresses and MAY log an error.
LW-MLDv2 hosts and routers MUST interoperate with hosts and routers running MLDv1. An LW-MLDv2 router translates MLDv1 Report messages to TO_EX({}) and MLDv1 Done messages to TO_IN({}).
When an LW-IGMPv3 or LW-MLDv2 router receives IS_EX(x) or TO_EX(x) Report messages (with non-null source lists) from full-version hosts, it MUST translate them internally to IS_EX({}) and TO_EX({}) respectively and behave accordingly.
LW-IGMPv3 uses four Group Record Types in Report messages: ALLOW(x) for INCLUDE join or query response; BLOCK(x) for INCLUDE leave; TO_IN(x) for change to INCLUDE or (*,G) leave when x is null; TO_EX({}) for (*,G) join. EXCLUDE with non-null source list (IS_EX(x), TO_EX(x)) is not generated by LW-IGMPv3 hosts.
The lightweight router state model for a group is (multicast address, group timer, source records), with no filter-mode field. The group timer represents a (*,G) join: when positive, all members in the group are assumed active; when zero, the router checks source timers to determine per-source forwarding.
The security considerations for LW-IGMPv3 and LW-MLDv2 are identical to those of the full versions of IGMPv3 and MLDv2. No new security issues are introduced by the lightweight simplifications.
In LW-IGMPv3, when a source timer expires, the corresponding source record is deleted immediately, regardless of the group timer state. This contrasts with full IGMPv3 where an expired source timer under EXCLUDE filter-mode keeps the record until the group timer expires.
Interface state-change rules for LW-IGMPv3 hosts: INCLUDE(A)→INCLUDE(B) sends ALLOW(B-A) and BLOCK(A-B); INCLUDE(A)→EXCLUDE({}) sends TO_EX({}); INCLUDE({})→EXCLUDE({}) sends TO_EX({}); EXCLUDE({})→INCLUDE(B) sends TO_IN(B). State-Change Reports are retransmitted [Robustness Variable]-1 more times at random intervals within [0, Unsolicited Report Interval].
LW-IGMPv3 router source-specific forwarding decisions: (G_Timer==0, S_Timer>0) → forward; (G_Timer==0, S_Timer==0) → stop and remove source, delete group if no sources remain; (G_Timer==0, no sources) → do not forward; (G_Timer>0, any S_Timer) → forward; (G_Timer>0, no sources) → forward.
On receiving Current-State Records, an LW-IGMPv3 router applies: IS_IN(B) → new source list is A+B with (B)=GMI; IS_EX({}) → source list unchanged at A, G_Timer reset to GMI. These rules apply uniformly regardless of the current G_Timer value, simplifying processing compared to the full version.
On receiving Source-List-Change and Filter-Mode-Change Records, the LW-IGMPv3 router applies: ALLOW(B) → A+B, (B)=GMI; BLOCK(B) → A unchanged, send Q(G,A*B); TO_IN(B) → A+B, (B)=GMI, send Q(G,A-B), and if G_Timer>0 also send Q(G); TO_EX({}) → A unchanged, G_Timer=GMI.
The group timer in LW-IGMPv3 router has two states: G_Timer > 0 means all sources for the group are forwarded (non-source-specific reception); G_Timer == 0 means only sources with running source timers (S_Timer > 0) are forwarded, and the group record is deleted when all source timers also expire.