RFC 9279

Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Message Extension

๐Ÿ“… published August 2022, from ietf

RFC 9279 ๐Ÿ’– Internet Group Management Protocol Version 3 (IGMPv3) and Multicast Listener Discovery Version 2 (MLDv2) Message Extension

The title block tea ๐Ÿซถ

  • RFC number: 9279 ๐ŸŽ€
  • Category: Standards Track โœจ
  • Date: August 2022 ๐Ÿ“…
  • ISSN: 2070-1721
  • Obsoletes / Updates: nothing listed here, so this doc doesn't replace or update any earlier RFCs ๐ŸŒธ
  • Authors:
    • M. Sivakumar, Juniper Networks ๐Ÿฆ‹
    • S. Venaas, Cisco Systems, Inc. ๐Ÿฆ‹
    • Z. Zhang, ZTE Corporation ๐Ÿฆ‹
    • H. Asaeda, NICT ๐Ÿฆ‹

Abstract ๐ŸŒˆ

okay so this doc gives you a generic mechanism to extend IGMPv3 and Multicast Listener Discovery Version 2 (MLDv2) by using a list of TLVs (Type, Length, and Value) ๐Ÿงš

Status of This Memo ๐Ÿ’…

This is an Internet Standards Track document. It's giving official โœจ

This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It went through public review and got approved for publication by the Internet Engineering Steering Group (IESG). If you want more info on Internet Standards, check Section 2 of RFC 7841 ๐Ÿ“š

You can find the current status of this document, any errata, and info on how to send feedback at https://www.rfc-editor.org/info/rfc9279 ๐Ÿ”—

Copyright (c) 2022 IETF Trust and the persons identified as the document authors. All rights reserved. ๐Ÿซถ

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) as they stand on the date this document is published. Please read these carefully because they lay out your rights and restrictions for this document ๐Ÿ“œ Code Components pulled out of this document must include Revised BSD License text, as described in Section 4.e of the Trust Legal Provisions. They come without warranty, as described in the Revised BSD License.

Table of Contents ๐Ÿ—บ๏ธ

   1.  Introduction
   2.  Conventions Used in This Document
   3.  Extension Format
     3.1.  Multicast Listener Query Extension
     3.2.  Version 2 Multicast Listener Report Extension
     3.3.  IGMP Membership Query Extension
     3.4.  IGMP Version 3 Membership Report Extension
   4.  No-op TLV
   5.  Processing the Extension
   6.  Applicability and Backwards Compatibility
   7.  Security Considerations
   8.  IANA Considerations
   9.  References
     9.1.  Normative References
     9.2.  Informative References
   Acknowledgements
   Authors' Addresses

1. Introduction โœจ

Okay, so this doc defines a generic way to extend IGMPv3 [RFC3376] and MLDv2 [RFC3810] messages so they can carry info that doesn't fit in the current message formats ๐ŸŽ€ The move is to allow a list of TLVs in the Additional Data section of IGMPv3 and MLDv2 messages. This doc defines a registry for those TLVs, and other docs will define their specific types and their values and semantics ๐Ÿ’œ The extension only gets used when at least one TLV needs to be added to the message. It also applies to the lightweight versions of IGMPv3 and MLDv2 defined in [RFC5790] ๐Ÿฆ‹

When this extension mechanism is used, it replaces the Additional Data section defined in IGMPv3/MLDv2 with TLVs ๐Ÿ“

Additional Data is defined for Query messages in IGMPv3 (Section 4.1.10 of [RFC3376]) and MLDv2 (Section 5.1.12 of [RFC3810]). It's also defined for Report messages in IGMPv3 (Section 4.2.11 of [RFC3376]) and MLDv2 (Section 5.2.11 of [RFC3810]) ๐ŸŒธ

2. Conventions Used in This Document ๐Ÿ“–

Here's the key word situation ๐Ÿ”‘ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document get read the way BCP 14 [RFC2119] [RFC8174] describes. That only happens when, and only when, they show up in all capitals, exactly like this ๐Ÿ’…

3. Extension Format ๐ŸŽ€

For each of the IGMPv3 and MLDv2 headers, a bit that was previously reserved gets used to signal that this extension is present ๐Ÿฆ‹ When the extension is used, the Additional Data of IGMPv3 and MLDv2 messages follows the format below. Heads up: this format holds a variable number of TLVs. It MUST contain at least one TLV. ๐Ÿ˜ญ

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Extension Type 1       |       Extension Length 1      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Extension Value 1                       |
   .                               .                               .
   .                               .                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Extension Type 2       |       Extension Length 2      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Extension Value 2                       |
   .                               .                               .
   .                               .                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |        Extension Type n       |       Extension Length n      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       Extension Value n                       |
   .                               .                               .
   .                               .                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 1: Extension Format ๐ŸŒˆ

Here's what each field does:

  • Extension Type: 2 octets. This identifies a particular Extension Type as defined in the "IGMP/MLD Extension Types" registry. If this isn't the first TLV, it comes right after the end of the previous one. There's no alignment or padding, so it's all packed in tight ๐Ÿงš
  • Extension Length: 2 octets. This is the length in octets of the Extension Value field that follows. It can be zero if no value is needed ๐Ÿ“
  • Extension Value: This field holds the value. The spec that defines the Extension Type describes the length and contents of this field ๐Ÿ’œ

IGMPv3 and MLDv2 messages are defined so they fit within the network MTU, which avoids fragmentation ๐Ÿฆ‹ An IGMPv3/MLDv2 Report message holds a number of records. They're called Group Records for IGMPv3 and Address Records for MLDv2. When this extension mechanism is used, the number of records in each Report message SHOULD be kept small enough that the entire message, extension TLVs included, can fit within the network MTU ๐Ÿ’–

3.1. Multicast Listener Query Extension โœจ

The MLDv2 Query message format [RFC3810] with the extension looks like this. The E-bit MUST be set to 1 to show the extension is present. Otherwise, it MUST be 0. ๐ŸŽ€

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Type = 130   |      Code     |           Checksum            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |    Maximum Response Code      |           Reserved            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       *                                                               *
       |                                                               |
       *                       Multicast Address                       *
       |                                                               |
       *                                                               *
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |E| Resv|S| QRV |     QQIC      |     Number of Sources (N)     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       *                                                               *
       |                                                               |
       *                       Source Address [1]                      *
       |                                                               |
       *                                                               *
       |                                                               |
       +-                                                             -+
       |                                                               |
       *                                                               *
       |                                                               |
       *                       Source Address [2]                      *
       |                                                               |
       *                                                               *
       |                                                               |
       +-                              .                              -+
       .                               .                               .
       .                               .                               .
       +-                                                             -+
       |                                                               |
       *                                                               *
       |                                                               |
       *                       Source Address [N]                      *
       |                                                               |
       *                                                               *
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                            Extension                          |
       ~                                                               ~
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 2: MLD Query Extension ๐Ÿฆ‹

3.2. Version 2 Multicast Listener Report Extension ๐Ÿ’–

okay so the MLDv2 Report message format [RFC3810] gets an extension tacked on, and honestly it's giving main character energy ๐Ÿ’…. The E-bit MUST be set to 1 to indicate that the extension is present. Otherwise, it MUST be 0.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Type = 143   |    Reserved   |           Checksum            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |E|         Reserved            |Nr of Mcast Address Records (M)|
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                  Multicast Address Record [1]                 .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                  Multicast Address Record [2]                 .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                               .                               |
       .                               .                               .
       |                               .                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                  Multicast Address Record [M]                 .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                            Extension                          |
       ~                                                               ~
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 3: MLD Report Extension ๐Ÿงš

3.3. IGMP Membership Query Extension ๐Ÿฆ‹

bestie, this one is the IGMPv3 Query message format [RFC3376] with the extension tacked on. Same deal as before: the E-bit MUST be set to 1 to indicate that the extension is present. Otherwise, it MUST be 0.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Type = 0x11  | Max Resp Code |           Checksum            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                         Group Address                         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |E| Resv|S| QRV |     QQIC      |     Number of Sources (N)     |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                       Source Address [1]                      |
       +-                                                             -+
       |                       Source Address [2]                      |
       +-                              .                              -+
       .                               .                               .
       .                               .                               .
       +-                                                             -+
       |                       Source Address [N]                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                            Extension                          |
       ~                                                               ~
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 4: IGMP Query Extension ๐ŸŒˆ

3.4. IGMP Version 3 Membership Report Extension ๐ŸŒธ

the IGMPv3 Report message format [RFC3376] with the extension is up next ๐Ÿ’…. The E-bit MUST be set to 1 to indicate that the extension is present. Otherwise, it MUST be 0.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Type = 0x22  |    Reserved   |           Checksum            |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |E|         Reserved            |  Number of Group Records (M)  |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                        Group Record [1]                       .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                        Group Record [2]                       .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                               .                               |
       .                               .                               .
       |                               .                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                                                               |
       .                                                               .
       .                        Group Record [M]                       .
       .                                                               .
       |                                                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                            Extension                          |
       ~                                                               ~
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 5: IGMP Report Extension โœจ


4. No-op TLV ๐Ÿซถ

the No-op TLV is a No-Operation TLV that MUST be ignored during processing ๐Ÿ™ˆ. It's handy for checking that the extension mechanism has been implemented correctly. Also, there's no alignment requirement, so you don't need this Extension Type just to get things aligned.

        0                   1                   2                   3
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |        No-op Type = 0         |          No-op Length         |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             Value                             |
       .                               .                               .
       .                               .                               .
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 6: No-op TLV Format ๐Ÿงš

  • No-op Type: 2 octets. The type of the No-op TLV extension is 0.
  • Extension Length: 2 octets. This tells you the length in octets of the Value field that follows. The length may be zero if no value is needed.
  • Value: This field holds the value. Since this Extension Type is always ignored, the value can be arbitrary data. The number of octets used MUST match the specified length.

5. Processing the Extension ๐Ÿ’œ

the procedure in this document only applies when the E-bit is set ๐ŸŽ€.

If validation of the TLVs fails, the entire Additional Data field MUST be ignored, as specified in IGMPv3 [RFC3376] and MLDv2 [RFC3810] ๐Ÿ˜ญ. The following checks must pass for TLV validation not to fail:

  • At least one TLV MUST be present.
  • There MUST NOT be any data in the IP payload after the last TLV. To check this, the parser walks through each of the TLVs until fewer than four octets are left in the IP payload. If any octets are left, validation fails.
  • The total length of the Extension MUST NOT exceed the remainder of the IP payload length. For this check, only the content of the Extension Length fields is examined.

Future documents defining a new Extension Type MUST specify any additional processing and validation. These rules, if any, are only examined after the general validation succeeds ๐Ÿ‘‘.

TLVs with unsupported Extension Types MUST be ignored.


6. Applicability and Backwards Compatibility ๐ŸŒˆ

IGMP and MLD implementations, especially the ones on hosts, rarely change ๐Ÿ™ˆ. Adoption of this extension mechanism is expected to be slow. As new extension TLVs get defined, it may take a long time before they're supported. So defining new extension TLVs should not be taken lightly, and it is crucial to consider backwards compatibility ๐Ÿ’€.

Implementations that don't support this extension mechanism will ignore it, as specified in [RFC3376] and [RFC3810]. As mentioned in the previous section, unsupported extension TLVs are ignored ๐Ÿ“.

A new extension TLV might only apply to queries, or only to reports, or it might have other specific conditions for when it's used. A document defining a new Extension Type MUST specify the conditions under which the new Extension Type should be used, including which message types. It MUST also be specified what the behavior should be if a message is not used in the defined manner, e.g., if it is present in a Query message when it was only expected in reports ๐Ÿซถ.

When defining new Extension Types, the effect of partial support for the new TLV, by either hosts or routers on the same link, should be carefully considered ๐Ÿ”ฅ. It's also worth considering whether there are any dependencies or restrictions on combinations between the new Extension Types and any preexisting Extension Types.

This document only defines an extension mechanism for IGMPv3 and MLDv2. So this mechanism does not apply if hosts or routers send older version messages ๐Ÿฆ‹.


7. Security Considerations ๐Ÿ’€

The Security Considerations of [RFC3376] and [RFC3810] also apply here ๐Ÿ”.

This document extends the IGMP and MLD message formats, allowing for a variable number of TLVs. Implementations must take care not to exceed the packet boundary when parsing the TLVs, because an attacker could intentionally specify a TLV with a length exceeding the boundary ๐Ÿ˜ฑ.
An implementation could add a large number of minimal TLVs in a message to increase the cost of processing the message. This would magnify a denial-of-service attack ๐Ÿšจ.

8. IANA Considerations โœจ

okay so IANA made a brand new registry called "IGMP/MLD Extension Types" ๐Ÿ“‹ It lives under the "Internet Group Management Protocol (IGMP) Type Numbers" section, and this doc is listed as the reference. The registration procedure is "IETF Review" [RFC8126]. The registry is shared by IGMP and MLD, so both protocols use the same list ๐Ÿซถ

Extension Types 65534 and 65535 are set aside for "Experimental Use" [RFC8126] ๐Ÿงช Experiments should stay in closed environments where they're unlikely to clash with other experiments. See [RFC3692] for the details ๐Ÿ’…

IANA filled in the registry with the starting entries shown in Table 1:

+================+==========+==================+===========+
| Extension Type | Length   | Name             | Reference |
+================+==========+==================+===========+
| 0              | variable | No-op            | RFC 9279  |
+----------------+----------+------------------+-----------+
| 1-65533        |          | Unassigned       |           |
+----------------+----------+------------------+-----------+
| 65534-65535    | variable | Reserved for     |           |
|                |          | Experimental Use |           |
+----------------+----------+------------------+-----------+

                 Table 1: IGMP/MLD Extension Types

So basically: type 0 is the No-op one (that's this RFC ๐ŸŒธ), 1 through 65533 are still open, and the last two are for experiments ๐Ÿงš


9. References ๐Ÿ“š

9.1. Normative References

9.2. Informative References


Acknowledgements ๐Ÿ’–

Big thank you to Ron Bonica, Ian Duncan, Wesley Eddy, Leonard Giuliano, Jake Holland, Tommy Pauly, Pete Resnick, Alvaro Retana, and Zhaohui Zhang ๐Ÿซถ They reviewed the document and gave really valuable feedback, and the authors are so grateful โœจ


Authors' Addresses ๐Ÿ“ฎ

Mahesh Sivakumar
Juniper Networks
64 Butler St
Milpitas, CA 95035
United States of America
Email: sivakumar.mahesh@gmail.com
Stig Venaas
Cisco Systems, Inc.
Tasman Drive
San Jose, CA 95134
United States of America
Email: stig@cisco.com
Zheng(Sandy) Zhang
ZTE Corporation
No. 50 Software Ave, Yuhuatai District
Nanjing
210000
China
Email: zhang.zheng@zte.com.cn
Hitoshi Asaeda
National Institute of Information and Communications Technology
4-2-1 Nukui-Kitamachi, Koganei, Tokyo
184-8795
Japan
Email: asaeda@nict.go.jp
๐Ÿ“ฆ where this page comes from