summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8652.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8652.txt')
-rw-r--r--doc/rfc/rfc8652.txt2428
1 files changed, 2428 insertions, 0 deletions
diff --git a/doc/rfc/rfc8652.txt b/doc/rfc/rfc8652.txt
new file mode 100644
index 0000000..2de601e
--- /dev/null
+++ b/doc/rfc/rfc8652.txt
@@ -0,0 +1,2428 @@
+
+
+
+
+Internet Engineering Task Force (IETF) X. Liu
+Request for Comments: 8652 Volta Networks
+Category: Standards Track F. Guo
+ISSN: 2070-1721 Huawei
+ M. Sivakumar
+ Juniper
+ P. McAllister
+ Metaswitch Networks
+ A. Peter
+ IP Infusion India
+ November 2019
+
+
+ A YANG Data Model for the Internet Group Management Protocol (IGMP)
+ and Multicast Listener Discovery (MLD)
+
+Abstract
+
+ This document defines a YANG data model that can be used to configure
+ and manage Internet Group Management Protocol (IGMP) and Multicast
+ Listener Discovery (MLD) devices.
+
+Status of This Memo
+
+ This is an Internet Standards Track document.
+
+ This document is a product of the Internet Engineering Task Force
+ (IETF). It represents the consensus of the IETF community. It has
+ received public review and has been approved for publication by the
+ Internet Engineering Steering Group (IESG). Further information on
+ Internet Standards is available in Section 2 of RFC 7841.
+
+ 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/rfc8652.
+
+Copyright Notice
+
+ Copyright (c) 2019 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) in effect on the date of
+ publication of this document. Please review these documents
+ carefully, as they describe your rights and restrictions with respect
+ to this document. Code Components extracted from this document must
+ include Simplified BSD License text as described in Section 4.e of
+ the Trust Legal Provisions and are provided without warranty as
+ described in the Simplified BSD License.
+
+Table of Contents
+
+ 1. Introduction
+ 1.1. Terminology
+ 1.2. Conventions Used in This Document
+ 1.3. Tree Diagrams
+ 1.4. Prefixes in Data Node Names
+ 2. Design of the Data Model
+ 2.1. Scope of Model
+ 2.1.1. Parameters Not Covered at the Global Level
+ 2.1.2. Parameters Not Covered at the Interface Level
+ 2.2. Optional Capabilities
+ 2.3. Position of Address Family in Hierarchy
+ 3. Module Structure
+ 3.1. IGMP Configuration and Operational State
+ 3.2. MLD Configuration and Operational State
+ 3.3. IGMP and MLD Actions
+ 4. IGMP and MLD YANG Module
+ 5. Security Considerations
+ 6. IANA Considerations
+ 7. References
+ 7.1. Normative References
+ 7.2. Informative References
+ Acknowledgments
+ Contributors
+ Authors' Addresses
+
+1. Introduction
+
+ YANG [RFC6020] [RFC7950] is a data definition language that was
+ introduced to model the configuration and running state of a device
+ managed using network management protocols such as NETCONF [RFC6241]
+ or RESTCONF [RFC8040]. YANG is now also being used as a component of
+ wider management interfaces, such as command-line interfaces (CLIs).
+
+ This document defines a YANG data model that can be used to configure
+ and manage Internet Group Management Protocol (IGMP) and Multicast
+ Listener Discovery (MLD) devices. The protocol versions include
+ IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 [RFC3376], MLDv1
+ [RFC2710], and MLDv2 [RFC3810]. The core features of the IGMP and
+ MLD protocols are defined as required. Non-core features are defined
+ as optional in the provided data model.
+
+ The YANG data model in this document conforms to the Network
+ Management Datastore Architecture (NMDA) [RFC8342].
+
+1.1. Terminology
+
+ The terminology for describing YANG data models is found in [RFC6020]
+ and [RFC7950], including:
+
+ * augment
+
+ * data model
+
+ * data node
+
+ * identity
+
+ * module
+
+ The following abbreviations are used in this document and the defined
+ model:
+
+ IGMP: Internet Group Management Protocol [RFC3376].
+
+ MLD: Multicast Listener Discovery [RFC3810].
+
+ SSM: Source-Specific Multicast service model [RFC3569] [RFC4607].
+
+1.2. Conventions Used in This Document
+
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
+ "OPTIONAL" in this document are to be interpreted as described in
+ BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
+ capitals, as shown here.
+
+1.3. Tree Diagrams
+
+ Tree diagrams used in this document follow the notation defined in
+ [RFC8340].
+
+1.4. Prefixes in Data Node Names
+
+ In this document, names of data nodes, actions, and other data model
+ objects are often used without a prefix, as long as it is clear from
+ the context in which YANG module each name is defined. Otherwise,
+ names are prefixed using the standard prefix associated with the
+ corresponding YANG module, as shown in Table 1.
+
+ +----------+--------------------------+-----------+
+ | Prefix | YANG module | Reference |
+ +==========+==========================+===========+
+ | yang | ietf-yang-types | [RFC6991] |
+ +----------+--------------------------+-----------+
+ | inet | ietf-inet-types | [RFC6991] |
+ +----------+--------------------------+-----------+
+ | if | ietf-interfaces | [RFC8343] |
+ +----------+--------------------------+-----------+
+ | ip | ietf-ip | [RFC8344] |
+ +----------+--------------------------+-----------+
+ | rt | ietf-routing | [RFC8349] |
+ +----------+--------------------------+-----------+
+ | rt-types | ietf-routing-types | [RFC8294] |
+ +----------+--------------------------+-----------+
+ | acl | ietf-access-control-list | [RFC8519] |
+ +----------+--------------------------+-----------+
+
+ Table 1: Prefixes and Corresponding YANG Modules
+
+2. Design of the Data Model
+
+2.1. Scope of Model
+
+ The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3
+ [RFC3376], MLDv1 [RFC2710], and MLDv2 [RFC3810].
+
+ This model does not cover other IGMP- and MLD-related protocols such
+ as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc.,
+ which will be specified in separate documents.
+
+ This model can be used to configure and manage various versions of
+ IGMP and MLD protocols. The operational state data and statistics
+ can be retrieved by this model. Even though no protocol-specific
+ notifications are defined in this model, the subscription and push
+ mechanism defined in [RFC8639] and [RFC8641] can be implemented by
+ the user to subscribe to notifications on the data nodes in this
+ model.
+
+ The model contains all the basic configuration parameters to operate
+ the protocols listed above. Depending on the implementation choices,
+ some systems may not allow some of the advanced parameters to be
+ configurable. The occasionally implemented parameters are modeled as
+ optional features in this model, while the rarely implemented
+ parameters are not included in this model and left for augmentation.
+ This model can be extended, and it has been structured in a way that
+ such extensions can be conveniently made.
+
+ The protocol parameters covered in this model can been seen from the
+ model structure described in Section 3.
+
+ The protocol parameters that were considered but are not covered in
+ this model are described in the following sections.
+
+2.1.1. Parameters Not Covered at the Global Level
+
+ The configuration parameters and operational states not covered on an
+ IGMP instance or an MLD instance are:
+
+ * Explicit tracking
+
+ * Maximum transmit rate
+
+ * Last member query count
+
+ * Other querier present time
+
+ * Send router alert
+
+ * Startup query interval
+
+ * Startup query count
+
+2.1.2. Parameters Not Covered at the Interface Level
+
+ The configuration parameters and operational states not covered on an
+ IGMP interface or an MLD interface are:
+
+ * Disable router alert check
+
+ * Drop IGMP version 1, IGMP version 2, or MLD version 1
+
+ * Last member query count
+
+ * Maximum number of sources
+
+ * Other querier present time
+
+ * Passive mode
+
+ * Promiscuous mode
+
+ * Query before immediate leave
+
+ * Send router alert
+
+2.2. Optional Capabilities
+
+ This model is designed to represent the capabilities of IGMP and MLD
+ devices with various specifications, including the basic capability
+ subsets of the IGMP and MLD protocols. The main design goals of this
+ document are that the basic capabilities described in the model are
+ supported by any major now-existing implementation, and that the
+ configuration of all implementations meeting the specifications is
+ easy to express through some combination of the optional features in
+ the model and simple vendor augmentations.
+
+ There is also value in widely supported features being standardized,
+ to provide a standardized way to access these features, to save work
+ for individual vendors, and so that mapping between different
+ vendors' configuration is not needlessly complicated. Therefore,
+ this model declares a number of features representing capabilities
+ that not all deployed devices support.
+
+ The extensive use of feature declarations should also substantially
+ simplify the capability negotiation process for a vendor's IGMP and
+ MLD implementations.
+
+ On the other hand, operational state parameters are not so widely
+ designated as features, as there are many cases where the defaulting
+ of an operational state parameter would not cause any harm to the
+ system, and it is much more likely that an implementation without
+ native support for a piece of operational state would be able to
+ derive a suitable value for a state variable that is not natively
+ supported.
+
+2.3. Position of Address Family in Hierarchy
+
+ The protocol IGMP only supports IPv4, while the protocol MLD only
+ supports IPv6. The data model defined in this document can be used
+ for both IPv4 and IPv6 address families.
+
+ This document defines IGMP and MLD as separate schema branches in the
+ structure. The benefits are:
+
+ * The model can support IGMP (IPv4), MLD (IPv6), or both optionally
+ and independently. Such flexibility cannot be achieved cleanly
+ with a combined branch.
+
+ * The structure is consistent with other YANG data models such as
+ RFC 8344, which uses separate branches for IPv4 and IPv6.
+
+ * The separate branches for IGMP and MLD can accommodate their
+ differences better and cleaner. The two branches can better
+ support different features and node types.
+
+3. Module Structure
+
+ This model augments the core routing data model specified in
+ [RFC8349].
+
+ +--rw routing
+ +--rw router-id?
+ +--rw control-plane-protocols
+ | +--rw control-plane-protocol* [type name]
+ | +--rw type
+ | +--rw name
+ | +--rw igmp <= Augmented by this Model
+ ...
+ | +--rw mld <= Augmented by this Model
+ ...
+
+ The "igmp" container instantiates an IGMP protocol of version IGMPv1,
+ IGMPv2, or IGMPv3. The "mld" container instantiates an MLD protocol
+ of version MLDv1 or MLDv2.
+
+ The YANG data model defined in this document conforms to the Network
+ Management Datastore Architecture (NMDA) [RFC8342]. The operational
+ state data is combined with the associated configuration data in the
+ same hierarchy [RFC8407].
+
+ A configuration data node is marked as mandatory only when its value
+ must be provided by the user. Where nodes are not essential to
+ protocol operation, they are marked as optional. Some other nodes
+ are essential but have a default specified, so that they are also
+ optional and need not be configured explicitly.
+
+3.1. IGMP Configuration and Operational State
+
+ The IGMP data is modeled as a schema subtree augmenting the "control-
+ plane-protocol" data node under "/rt:routing/rt:control-plane-
+ protocols" in the module ietf-routing, following the convention
+ described in [RFC8349]. The augmentation to the module ietf-routing
+ allows this model to support multiple instances of IGMP, but a
+ restriction MAY be added depending on the implementation and the
+ device. The identity "igmp" is derived from the "rt:control-plane-
+ protocol" base identity and indicates that a control-plane-protocol
+ instance is IGMP.
+
+ The IGMP subtree is a three-level hierarchy structure as listed
+ below:
+
+ Global level: Including IGMP configuration and operational state
+ attributes for the entire IGMP protocol instance in this router.
+
+ Interface-global level: Including configuration data nodes that are
+ applicable to all the interfaces whose corresponding nodes are not
+ defined or not configured at the interface level. For such a node
+ at the interface level, the system uses the same value of the
+ corresponding node at the interface-global level.
+
+ Interface level: Including IGMP configuration and operational state
+ attributes specific to the given interface. For a configuration
+ node at the interface level, there may exist a corresponding
+ configuration node with the same name at the interface-global
+ level. The value configured on a node at the interface level
+ overrides the value configured on the corresponding node at the
+ interface-global level.
+
+ augment /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol:
+ +--rw igmp {feature-igmp}?
+ +--rw global
+ | +--rw enabled? boolean {global-admin-enable}?
+ | +--rw max-entries? uint32 {global-max-entries}?
+ | +--rw max-groups? uint32 {global-max-groups}?
+ | +--ro entries-count? uint32
+ | +--ro groups-count? uint32
+ | +--ro statistics
+ | +--ro discontinuity-time? yang:date-and-time
+ | +--ro error
+ | | +--ro total? yang:counter64
+ | | +--ro query? yang:counter64
+ | | +--ro report? yang:counter64
+ | | +--ro leave? yang:counter64
+ | | +--ro checksum? yang:counter64
+ | | +--ro too-short? yang:counter64
+ | +--ro received
+ | | +--ro total? yang:counter64
+ | | +--ro query? yang:counter64
+ | | +--ro report? yang:counter64
+ | | +--ro leave? yang:counter64
+ | +--ro sent
+ | +--ro total? yang:counter64
+ | +--ro query? yang:counter64
+ | +--ro report? yang:counter64
+ | +--ro leave? yang:counter64
+ +--rw interfaces
+ +--rw last-member-query-interval? uint16
+ +--rw query-interval? uint16
+ +--rw query-max-response-time? uint16
+ +--rw require-router-alert? boolean
+ | {intf-require-router-alert}?
+ +--rw robustness-variable? uint8
+ +--rw version? uint8
+ +--rw max-groups-per-interface? uint32
+ | {intf-max-groups}?
+ +--rw interface* [interface-name]
+ +--rw interface-name if:interface-ref
+ +--rw last-member-query-interval? uint16
+ +--rw query-interval? uint16
+ +--rw query-max-response-time? uint16
+ +--rw require-router-alert? boolean
+ | {intf-require-router-alert}?
+ +--rw robustness-variable? uint8
+ +--rw version? uint8
+ +--rw enabled? boolean
+ | {intf-admin-enable}?
+ +--rw group-policy?
+ | -> /acl:acls/acl/name
+ +--rw immediate-leave? empty
+ | {intf-immediate-leave}?
+ +--rw max-groups? uint32
+ | {intf-max-groups}?
+ +--rw max-group-sources? uint32
+ | {intf-max-group-sources}?
+ +--rw source-policy?
+ | -> /acl:acls/acl/name {intf-source-policy}?
+ +--rw verify-source-subnet? empty
+ | {intf-verify-source-subnet}?
+ +--rw explicit-tracking? empty
+ | {intf-explicit-tracking}?
+ +--rw lite-exclude-filter? empty
+ | {intf-lite-exclude-filter}?
+ +--rw join-group*
+ | rt-types:ipv4-multicast-group-address
+ | {intf-join-group}?
+ +--rw ssm-map*
+ | [ssm-map-source-addr ssm-map-group-policy]
+ | {intf-ssm-map}?
+ | +--rw ssm-map-source-addr ssm-map-ipv4-addr-type
+ | +--rw ssm-map-group-policy string
+ +--rw static-group* [group-addr source-addr]
+ | {intf-static-group}?
+ | +--rw group-addr
+ | | rt-types:ipv4-multicast-group-address
+ | +--rw source-addr
+ | rt-types:ipv4-multicast-source-address
+ +--ro oper-status enumeration
+ +--ro querier inet:ipv4-address
+ +--ro joined-group*
+ | rt-types:ipv4-multicast-group-address
+ | {intf-join-group}?
+ +--ro group* [group-address]
+ +--ro group-address
+ | rt-types:ipv4-multicast-group-address
+ +--ro expire uint32
+ +--ro filter-mode enumeration
+ +--ro up-time uint32
+ +--ro last-reporter? inet:ipv4-address
+ +--ro source* [source-address]
+ +--ro source-address inet:ipv4-address
+ +--ro expire uint32
+ +--ro up-time uint32
+ +--ro host-count? uint32
+ | {intf-explicit-tracking}?
+ +--ro last-reporter? inet:ipv4-address
+ +--ro host* [host-address]
+ {intf-explicit-tracking}?
+ +--ro host-address inet:ipv4-address
+ +--ro host-filter-mode enumeration
+
+3.2. MLD Configuration and Operational State
+
+ The MLD data is modeled as a schema subtree augmenting the "control-
+ plane-protocol" data node under "/rt:routing/rt:control-plane-
+ protocols" in the module ietf-routing, following the convention
+ described in [RFC8349]. The augmentation to the module ietf-routing
+ allows this model to support multiple instances of MLD, but a
+ restriction MAY be added depending on the implementation and the
+ device. The identity "mld" is derived from the "rt:control-plane-
+ protocol" base identity and indicates that a control-plane-protocol
+ instance is MLD.
+
+ The MLD subtree is a three-level hierarchy structure as listed below:
+
+ Global level: Including MLD configuration and operational state
+ attributes for the entire MLD protocol instance in this router.
+
+ Interface-global level: Including configuration data nodes that are
+ applicable to all the interfaces whose corresponding nodes are not
+ defined or not configured at the interface level. For such a node
+ at the interface level, the system uses the same value of the
+ corresponding node at the interface-global level.
+
+ Interface level: Including MLD configuration and operational state
+ attributes specific to the given interface. For a configuration
+ node at the interface level, there may exist a corresponding
+ configuration node with the same name at the interface-global
+ level. The value configured on a node at the interface level
+ overrides the value configured on the corresponding node at the
+ interface-global level.
+
+ augment /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol:
+ +--rw mld {feature-mld}?
+ +--rw global
+ | +--rw enabled? boolean {global-admin-enable}?
+ | +--rw max-entries? uint32 {global-max-entries}?
+ | +--rw max-groups? uint32 {global-max-groups}?
+ | +--ro entries-count? uint32
+ | +--ro groups-count? uint32
+ | +--ro statistics
+ | +--ro discontinuity-time? yang:date-and-time
+ | +--ro error
+ | | +--ro total? yang:counter64
+ | | +--ro query? yang:counter64
+ | | +--ro report? yang:counter64
+ | | +--ro leave? yang:counter64
+ | | +--ro checksum? yang:counter64
+ | | +--ro too-short? yang:counter64
+ | +--ro received
+ | | +--ro total? yang:counter64
+ | | +--ro query? yang:counter64
+ | | +--ro report? yang:counter64
+ | | +--ro leave? yang:counter64
+ | +--ro sent
+ | +--ro total? yang:counter64
+ | +--ro query? yang:counter64
+ | +--ro report? yang:counter64
+ | +--ro leave? yang:counter64
+ +--rw interfaces
+ +--rw last-member-query-interval? uint16
+ +--rw query-interval? uint16
+ +--rw query-max-response-time? uint16
+ +--rw require-router-alert? boolean
+ | {intf-require-router-alert}?
+ +--rw robustness-variable? uint8
+ +--rw version? uint8
+ +--rw max-groups-per-interface? uint32
+ | {intf-max-groups}?
+ +--rw interface* [interface-name]
+ +--rw interface-name if:interface-ref
+ +--rw last-member-query-interval? uint16
+ +--rw query-interval? uint16
+ +--rw query-max-response-time? uint16
+ +--rw require-router-alert? boolean
+ | {intf-require-router-alert}?
+ +--rw robustness-variable? uint8
+ +--rw version? uint8
+ +--rw enabled? boolean
+ | {intf-admin-enable}?
+ +--rw group-policy?
+ | -> /acl:acls/acl/name
+ +--rw immediate-leave? empty
+ | {intf-immediate-leave}?
+ +--rw max-groups? uint32
+ | {intf-max-groups}?
+ +--rw max-group-sources? uint32
+ | {intf-max-group-sources}?
+ +--rw source-policy?
+ | -> /acl:acls/acl/name {intf-source-policy}?
+ +--rw verify-source-subnet? empty
+ | {intf-verify-source-subnet}?
+ +--rw explicit-tracking? empty
+ | {intf-explicit-tracking}?
+ +--rw lite-exclude-filter? empty
+ | {intf-lite-exclude-filter}?
+ +--rw join-group*
+ | rt-types:ipv6-multicast-group-address
+ | {intf-join-group}?
+ +--rw ssm-map*
+ | [ssm-map-source-addr ssm-map-group-policy]
+ | {intf-ssm-map}?
+ | +--rw ssm-map-source-addr ssm-map-ipv6-addr-type
+ | +--rw ssm-map-group-policy string
+ +--rw static-group* [group-addr source-addr]
+ | {intf-static-group}?
+ | +--rw group-addr
+ | | rt-types:ipv6-multicast-group-address
+ | +--rw source-addr
+ | rt-types:ipv6-multicast-source-address
+ +--ro oper-status enumeration
+ +--ro querier inet:ipv6-address
+ +--ro joined-group*
+ | rt-types:ipv6-multicast-group-address
+ | {intf-join-group}?
+ +--ro group* [group-address]
+ +--ro group-address
+ | rt-types:ipv6-multicast-group-address
+ +--ro expire uint32
+ +--ro filter-mode enumeration
+ +--ro up-time uint32
+ +--ro last-reporter? inet:ipv6-address
+ +--ro source* [source-address]
+ +--ro source-address inet:ipv6-address
+ +--ro expire uint32
+ +--ro up-time uint32
+ +--ro host-count? uint32
+ | {intf-explicit-tracking}?
+ +--ro last-reporter? inet:ipv6-address
+ +--ro host* [host-address]
+ {intf-explicit-tracking}?
+ +--ro host-address inet:ipv6-address
+ +--ro host-filter-mode enumeration
+
+3.3. IGMP and MLD Actions
+
+ IGMP and MLD each have one action that clears the group membership
+ cache entries for that protocol.
+
+ augment /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol:
+ +--rw igmp {feature-igmp}?
+ +---x clear-groups {action-clear-groups}?
+ +---w input
+ +---w (interface)
+ | +--:(name)
+ | | +---w interface-name? leafref
+ | +--:(all)
+ | +---w all-interfaces? empty
+ +---w group-address union
+ +---w source-address
+ rt-types:ipv4-multicast-source-address
+
+ augment /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol:
+ +--rw mld {feature-mld}?
+ +---x clear-groups {action-clear-groups}?
+ +---w input
+ +---w (interface)
+ | +--:(name)
+ | | +---w interface-name? leafref
+ | +--:(all)
+ | +---w all-interfaces? empty
+ +---w group-address? union
+ +---w source-address?
+ rt-types:ipv6-multicast-source-address
+
+4. IGMP and MLD YANG Module
+
+ This module references [RFC1112], [RFC2236], [RFC2710], [RFC3376],
+ [RFC3810], [RFC5790], [RFC6636], [RFC6991], [RFC8294], [RFC8343],
+ [RFC8344], [RFC8349], and [RFC8519].
+
+ <CODE BEGINS> file "ietf-igmp-mld@2019-11-01.yang"
+ module ietf-igmp-mld {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld";
+ prefix igmp-mld;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-yang-types {
+ prefix yang;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-routing-types {
+ prefix rt-types;
+ reference
+ "RFC 8294: Common YANG Data Types for the Routing Area";
+ }
+ import ietf-access-control-list {
+ prefix acl;
+ reference
+ "RFC 8519: YANG Data Model for Network Access Control Lists
+ (ACLs)";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing Management (NMDA
+ Version)";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface Management";
+ }
+ import ietf-ip {
+ prefix ip;
+ reference
+ "RFC 8344: A YANG Data Model for IP Management";
+ }
+
+ organization
+ "IETF PIM Working Group";
+ contact
+ "WG Web: <http://datatracker.ietf.org/wg/pim/>
+ WG List: <mailto:pim@ietf.org>
+
+ Editor: Xufeng Liu
+ <mailto:xufeng.liu.ietf@gmail.com>
+
+ Editor: Feng Guo
+ <mailto:guofeng@huawei.com>
+
+ Editor: Mahesh Sivakumar
+ <mailto:sivakumar.mahesh@gmail.com>
+
+ Editor: Pete McAllister
+ <mailto:pete.mcallister@metaswitch.com>
+
+ Editor: Anish Peter
+ <mailto:anish.ietf@gmail.com>";
+ description
+ "The module defines the configuration and operational state for
+ the Internet Group Management Protocol (IGMP) and Multicast
+ Listener Discovery (MLD) protocols.
+
+ The key words 'MUST', 'MUST NOT', 'REQUIRED', 'SHALL', 'SHALL
+ NOT', 'SHOULD', 'SHOULD NOT', 'RECOMMENDED', 'NOT RECOMMENDED',
+ 'MAY', and 'OPTIONAL' in this document are to be interpreted as
+ described in BCP 14 (RFC 2119) (RFC 8174) when, and only when,
+ they appear in all capitals, as shown here.
+
+ Copyright (c) 2019 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Simplified BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (http://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 8652; see the
+ RFC itself for full legal notices.";
+
+ revision 2019-11-01 {
+ description
+ "Initial revision.";
+ reference
+ "RFC 8652: A YANG Data Model for the Internet Group Management
+ Protocol (IGMP) and Multicast Listener Discovery (MLD)";
+ }
+
+ /*
+ * Features
+ */
+
+ feature feature-igmp {
+ description
+ "Support IGMP protocol for IPv4 group membership record.";
+ }
+
+ feature feature-mld {
+ description
+ "Support MLD protocol for IPv6 group membership record.";
+ }
+
+ feature global-admin-enable {
+ description
+ "Support global configuration to enable or disable protocol.";
+ }
+
+ feature global-max-entries {
+ description
+ "Support configuration of global max-entries.";
+ }
+
+ feature global-max-groups {
+ description
+ "Support configuration of global max-groups.";
+ }
+
+ feature interface-global-config {
+ description
+ "Support global configuration applied for all interfaces.";
+ }
+
+ feature intf-admin-enable {
+ description
+ "Support configuration of interface administrative enabling.";
+ }
+
+ feature intf-immediate-leave {
+ description
+ "Support configuration of interface immediate-leave.";
+ }
+
+ feature intf-join-group {
+ description
+ "Support configuration of interface join-group.";
+ }
+
+ feature intf-max-groups {
+ description
+ "Support configuration of interface max-groups.";
+ }
+
+ feature intf-max-group-sources {
+ description
+ "Support configuration of interface max-group-sources.";
+ }
+
+ feature intf-require-router-alert {
+ description
+ "Support configuration of interface require-router-alert.";
+ }
+
+ feature intf-source-policy {
+ description
+ "Support configuration of interface source policy.";
+ }
+
+ feature intf-ssm-map {
+ description
+ "Support configuration of interface ssm-map.";
+ }
+
+ feature intf-static-group {
+ description
+ "Support configuration of interface static-group.";
+ }
+
+ feature intf-verify-source-subnet {
+ description
+ "Support configuration of interface verify-source-subnet.";
+ }
+
+ feature intf-explicit-tracking {
+ description
+ "Support configuration of interface explicit-tracking hosts.";
+ }
+
+ feature intf-lite-exclude-filter {
+ description
+ "Support configuration of interface lite-exclude-filter.";
+ }
+
+ feature per-interface-config {
+ description
+ "Support per-interface configuration.";
+ }
+
+ feature action-clear-groups {
+ description
+ "Support actions to clear groups.";
+ }
+
+ /*
+ * Typedefs
+ */
+
+ typedef ssm-map-ipv4-addr-type {
+ type union {
+ type enumeration {
+ enum policy {
+ description
+ "Source address is specified in SSM map policy.";
+ }
+ }
+ type inet:ipv4-address;
+ }
+ description
+ "Multicast source IP address type for SSM map.";
+ }
+ // source-ipv4-addr-type
+
+ typedef ssm-map-ipv6-addr-type {
+ type union {
+ type enumeration {
+ enum policy {
+ description
+ "Source address is specified in SSM map policy.";
+ }
+ }
+ type inet:ipv6-address;
+ }
+ description
+ "Multicast source IP address type for SSM map.";
+ }
+ // source-ipv6-addr-type
+
+ /*
+ * Identities
+ */
+
+ identity igmp {
+ if-feature "feature-igmp";
+ base rt:control-plane-protocol;
+ description
+ "IGMP protocol.";
+ reference
+ "RFC 3376: Internet Group Management Protocol, Version 3";
+ }
+
+ identity mld {
+ if-feature "feature-mld";
+ base rt:control-plane-protocol;
+ description
+ "MLD protocol.";
+ reference
+ "RFC 3810: Multicast Listener Discovery Version 2 (MLDv2) for
+ IPv6";
+ }
+
+ /*
+ * Groupings
+ */
+
+ grouping global-config-attributes {
+ description
+ "This grouping is used in either IGMP schema or MLD schema.
+ When used in IGMP schema, this grouping contains the global
+ configuration for IGMP;
+ when used in MLD schema, this grouping contains the global
+ configuration for MLD.";
+ leaf enabled {
+ if-feature "global-admin-enable";
+ type boolean;
+ default "true";
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ whether IGMP is enabled ('true') or disabled ('false')
+ in the routing instance.
+ When this grouping is used for MLD, this leaf indicates
+ whether MLD is enabled ('true') or disabled ('false')
+ in the routing instance.";
+ }
+ leaf max-entries {
+ if-feature "global-max-entries";
+ type uint32;
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ the maximum number of entries in the IGMP instance.
+ When this grouping is used for MLD, this leaf indicates
+ the maximum number of entries in the MLD instance.
+ If this leaf is not specified, the number of entries is not
+ limited.";
+ }
+ leaf max-groups {
+ if-feature "global-max-groups";
+ type uint32;
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ the maximum number of groups in the IGMP instance.
+ When this grouping is used for MLD, this leaf indicates
+ the maximum number of groups in the MLD instance.
+ If this leaf is not specified, the number of groups is not
+ limited.";
+ }
+ }
+ // global-config-attributes
+
+ grouping global-state-attributes {
+ description
+ "This grouping is used in either IGMP schema or MLD schema.
+ When used in IGMP schema, this grouping contains the global
+ IGMP state attributes;
+ when used in MLD schema, this grouping contains the global
+ MLD state attributes.";
+ leaf entries-count {
+ type uint32;
+ config false;
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ the number of entries in the IGMP instance.
+ When this grouping is used for MLD, this leaf indicates
+ the number of entries in the MLD instance.";
+ }
+ leaf groups-count {
+ type uint32;
+ config false;
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ the number of existing groups in the IGMP instance.
+ When this grouping is used for MLD, this leaf indicates
+ the number of existing groups in the MLD instance.";
+ }
+ container statistics {
+ config false;
+ description
+ "When this grouping is used for IGMP, this container contains
+ the statistics for the IGMP instance.
+ When this grouping is used for MLD, this leaf indicates
+ the statistics for the MLD instance.";
+ leaf discontinuity-time {
+ type yang:date-and-time;
+ description
+ "The time on the most recent occasion at which any one
+ or more of the statistic counters suffered a
+ discontinuity. If no such discontinuities have occurred
+ since the last re-initialization of the local
+ management subsystem, then this node contains the time
+ the local management subsystem re-initialized itself.";
+ }
+ container error {
+ description
+ "Statistics of errors.";
+ uses global-statistics-error;
+ }
+ container received {
+ description
+ "Statistics of received messages.";
+ uses global-statistics-sent-received;
+ }
+ container sent {
+ description
+ "Statistics of sent messages.";
+ uses global-statistics-sent-received;
+ }
+ }
+ // statistics
+ }
+ // global-state-attributes
+
+ grouping global-statistics-error {
+ description
+ "A grouping defining statistics attributes for errors.";
+ uses global-statistics-sent-received;
+ leaf checksum {
+ type yang:counter64;
+ description
+ "The number of checksum errors.";
+ }
+ leaf too-short {
+ type yang:counter64;
+ description
+ "The number of messages that are too short.";
+ }
+ }
+ // global-statistics-error
+
+ grouping global-statistics-sent-received {
+ description
+ "A grouping defining statistics attributes.";
+ leaf total {
+ type yang:counter64;
+ description
+ "The number of total messages.";
+ }
+ leaf query {
+ type yang:counter64;
+ description
+ "The number of query messages.";
+ }
+ leaf report {
+ type yang:counter64;
+ description
+ "The number of report messages.";
+ }
+ leaf leave {
+ type yang:counter64;
+ description
+ "The number of leave messages.";
+ }
+ }
+ // global-statistics-sent-received
+
+ grouping interface-global-config-attributes {
+ description
+ "Configuration attributes applied to the interface-global level
+ whose per-interface attributes are not configured.";
+ leaf max-groups-per-interface {
+ if-feature "intf-max-groups";
+ type uint32;
+ description
+ "The maximum number of groups associated with each interface.
+ If this leaf is not specified, the number of groups is not
+ limited.";
+ }
+ }
+ // interface-global-config-attributes
+
+ grouping interface-common-config-attributes {
+ description
+ "Configuration attributes applied to both the interface-global
+ level and interface level.";
+ leaf last-member-query-interval {
+ type uint16 {
+ range "1..1023";
+ }
+ units "seconds";
+ description
+ "When used in IGMP schema, this leaf indicates the Last
+ Member Query Interval, which may be tuned to modify the
+ leave latency of the network;
+ when used in MLD schema, this leaf indicates the Last
+ Listener Query Interval, which may be tuned to modify the
+ leave latency of the network.
+ This leaf is not applicable for version 1 of the IGMP. For
+ version 2 and version 3 of the IGMP, and for all versions of
+ the MLD, the default value of this leaf is 1.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "Section 8.8 of RFC 2236: Internet Group Management Protocol,
+ Version 2.
+ Section 8.8 of RFC 3376: Internet Group Management Protocol,
+ Version 3.
+ Section 7.8 of RFC 2710: Multicast Listener Discovery (MLD)
+ for IPv6.
+ Section 9.8 of RFC 3810: Multicast Listener Discovery
+ Version 2 (MLDv2) for IPv6.";
+ }
+ leaf query-interval {
+ type uint16 {
+ range "1..31744";
+ }
+ units "seconds";
+ description
+ "The Query Interval is the interval between General Queries
+ sent by the Querier. In RFC 3376, the Querier's Query
+ Interval (QQI) is represented from the Querier's Query
+ Interval Code (QQIC) in query message as follows:
+ If QQIC < 128, QQI = QQIC.
+ If QQIC >= 128, QQIC represents a floating-point value as
+ follows:
+ 0 1 2 3 4 5 6 7
+ +-+-+-+-+-+-+-+-+
+ |1| exp | mant |
+ +-+-+-+-+-+-+-+-+
+ QQI = (mant | 0x10) << (exp + 3).
+ The maximum value of QQI is 31744.
+ The default value is 125.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "Sections 4.1.7, 8.2, and 8.14.2 of RFC 3376: Internet Group
+ Management Protocol, Version 3";
+ }
+ leaf query-max-response-time {
+ type uint16 {
+ range "1..1023";
+ }
+ units "seconds";
+ description
+ "Query maximum response time specifies the maximum time
+ allowed before sending a responding report.
+ The default value is 10.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "Sections 4.1.1, 8.3, and 8.14.3 of RFC 3376: Internet Group
+ Management Protocol, Version 3";
+ }
+ leaf require-router-alert {
+ if-feature "intf-require-router-alert";
+ type boolean;
+ description
+ "Protocol packets should contain the router alert IP option.
+ When this leaf is not configured, the server uses the
+ following rules to determine the operational value of this
+ leaf:
+ if this grouping is used in IGMP schema and the value of the
+ leaf 'version' is 1, the value 'false' is operationally used
+ by the server;
+ if this grouping is used in IGMP schema and the value of the
+ leaf 'version' is 2 or 3, the value 'true' is operationally
+ used by the server;
+ if this grouping is used in MLD schema, the value 'true' is
+ operationally used by the server.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ }
+ leaf robustness-variable {
+ type uint8 {
+ range "1..7";
+ }
+ description
+ "The Querier's Robustness Variable allows tuning for the
+ expected packet loss on a network.
+ The default value is 2.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "Sections 4.1.6, 8.1, and 8.14.1 of RFC 3376: Internet Group
+ Management Protocol, Version 3";
+ }
+ }
+ // interface-common-config-attributes
+
+ grouping interface-common-config-attributes-igmp {
+ description
+ "Configuration attributes applied to both the interface-global
+ level and interface level for IGMP.";
+ uses interface-common-config-attributes;
+ leaf version {
+ type uint8 {
+ range "1..3";
+ }
+ description
+ "IGMP version.
+ The default value is 2.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "RFC 1112: Host Extensions for IP Multicasting,
+ RFC 2236: Internet Group Management Protocol, Version 2,
+ RFC 3376: Internet Group Management Protocol, Version 3.";
+ }
+ }
+
+ grouping interface-common-config-attributes-mld {
+ description
+ "Configuration attributes applied to both the interface-global
+ level and interface level for MLD.";
+ uses interface-common-config-attributes;
+ leaf version {
+ type uint8 {
+ range "1..2";
+ }
+ description
+ "MLD version.
+ The default value is 2.
+ This leaf may be configured at the interface level or the
+ interface-global level, with precedence given to the value
+ at the interface level. If the leaf is not configured at
+ either level, the default value is used.";
+ reference
+ "RFC 2710: Multicast Listener Discovery (MLD) for IPv6,
+ RFC 3810: Multicast Listener Discovery Version 2 (MLDv2)
+ for IPv6.";
+ }
+ }
+
+ grouping interfaces-config-attributes-igmp {
+ description
+ "Configuration attributes applied to the interface-global
+ level for IGMP.";
+ uses interface-common-config-attributes-igmp;
+ uses interface-global-config-attributes;
+ }
+
+ grouping interfaces-config-attributes-mld {
+ description
+ "Configuration attributes applied to the interface-global
+ level for MLD.";
+ uses interface-common-config-attributes-mld;
+ uses interface-global-config-attributes;
+ }
+
+ grouping interface-level-config-attributes {
+ description
+ "This grouping is used in either IGMP schema or MLD schema.
+ When used in IGMP schema, this grouping contains the IGMP
+ configuration attributes that are defined at the interface
+ level but are not defined at the interface-global level;
+ when used in MLD schema, this grouping contains the MLD
+ configuration attributes that are defined at the interface
+ level but are not defined at the interface-global level.";
+ leaf enabled {
+ if-feature "intf-admin-enable";
+ type boolean;
+ default "true";
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ whether IGMP is enabled ('true') or disabled ('false')
+ on the interface.
+ When this grouping is used for MLD, this leaf indicates
+ whether MLD is enabled ('true') or disabled ('false')
+ on the interface.";
+ }
+ leaf group-policy {
+ type leafref {
+ path "/acl:acls/acl:acl/acl:name";
+ }
+ description
+ "When this grouping is used for IGMP, this leaf specifies
+ the name of the access policy used to filter the
+ IGMP membership.
+ When this grouping is used for MLD, this leaf specifies
+ the name of the access policy used to filter the
+ MLD membership.
+ The value space of this leaf is restricted to the existing
+ policy instances defined by the referenced schema in
+ RFC 8519.
+ As specified by RFC 8519, the length of the name is between
+ 1 and 64; a device MAY further restrict the length of this
+ name; space and special characters are not allowed.
+ If this leaf is not specified, no policy is applied, and
+ all packets received from this interface are accepted.";
+ reference
+ "RFC 8519: YANG Data Model for Network Access Control Lists
+ (ACLs)";
+ }
+ leaf immediate-leave {
+ if-feature "intf-immediate-leave";
+ type empty;
+ description
+ "When this grouping is used for IGMP, the presence of this
+ leaf requests IGMP to perform an immediate leave upon
+ receiving an IGMPv2 leave message.
+ If the router is IGMP-enabled, it sends an IGMP last member
+ query with a last member query response time. However, the
+ router does not wait for the response time before it prunes
+ the group.
+ When this grouping is used for MLD, the presence of this
+ leaf requests MLD to perform an immediate leave upon
+ receiving an MLDv1 leave message.
+ If the router is MLD-enabled, it sends an MLD last member
+ query with a last member query response time. However, the
+ router does not wait for the response time before it prunes
+ the group.";
+ }
+ leaf max-groups {
+ if-feature "intf-max-groups";
+ type uint32;
+ description
+ "When this grouping is used for IGMP, this leaf indicates
+ the maximum number of groups associated with the IGMP
+ interface.
+ When this grouping is used for MLD, this leaf indicates
+ the maximum number of groups associated with the MLD
+ interface.
+ If this leaf is not specified, the number of groups is not
+ limited.";
+ }
+ leaf max-group-sources {
+ if-feature "intf-max-group-sources";
+ type uint32;
+ description
+ "The maximum number of group sources.
+ If this leaf is not specified, the number of group sources
+ is not limited.";
+ }
+ leaf source-policy {
+ if-feature "intf-source-policy";
+ type leafref {
+ path "/acl:acls/acl:acl/acl:name";
+ }
+ description
+ "Name of the access policy used to filter sources.
+ The value space of this leaf is restricted to the existing
+ policy instances defined by the referenced schema in
+ RFC 8519.
+ As specified by RFC 8519, the length of the name is between
+ 1 and 64; a device MAY further restrict the length of this
+ name; space and special characters are not allowed.
+ If this leaf is not specified, no policy is applied, and
+ all packets received from this interface are accepted.";
+ }
+ leaf verify-source-subnet {
+ if-feature "intf-verify-source-subnet";
+ type empty;
+ description
+ "If present, the interface accepts packets with matching
+ source IP subnet only.";
+ }
+ leaf explicit-tracking {
+ if-feature "intf-explicit-tracking";
+ type empty;
+ description
+ "When this grouping is used for IGMP, the presence of this
+ leaf enables an IGMP-based explicit membership tracking
+ function for multicast routers and IGMP proxy devices
+ supporting IGMPv3.
+ When this grouping is used for MLD, the presence of this
+ leaf enables an MLD-based explicit membership tracking
+ function for multicast routers and MLD proxy devices
+ supporting MLDv2.
+ The explicit membership tracking function contributes to
+ saving network resources and shortening leave latency.";
+ reference
+ "Section 3 of RFC 6636: Tuning the Behavior of the Internet
+ Group Management Protocol (IGMP) and Multicast Listener
+ Discovery (MLD) for Routers in Mobile and Wireless
+ Networks";
+ }
+ leaf lite-exclude-filter {
+ if-feature "intf-lite-exclude-filter";
+ type empty;
+ description
+ "When this grouping is used for IGMP, the presence of this
+ leaf enables the support of the simplified EXCLUDE filter
+ in the Lightweight IGMPv3 protocol, which simplifies the
+ standard versions of IGMPv3.
+ When this grouping is used for MLD, the presence of this
+ leaf enables the support of the simplified EXCLUDE filter
+ in the Lightweight MLDv2 protocol, which simplifies the
+ standard versions of MLDv2.";
+ reference
+ "RFC 5790: Lightweight Internet Group Management Protocol
+ Version 3 (IGMPv3) and Multicast Listener Discovery
+ Version 2 (MLDv2) Protocols";
+ }
+ }
+ // interface-level-config-attributes
+
+ grouping interface-config-attributes-igmp {
+ description
+ "Per-interface configuration attributes for IGMP.";
+ uses interface-common-config-attributes-igmp;
+ uses interface-level-config-attributes;
+ leaf-list join-group {
+ if-feature "intf-join-group";
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "The router joins this multicast group on the interface.";
+ }
+ list ssm-map {
+ if-feature "intf-ssm-map";
+ key "ssm-map-source-addr ssm-map-group-policy";
+ description
+ "The policy for (*,G) mapping to (S,G).";
+ leaf ssm-map-source-addr {
+ type ssm-map-ipv4-addr-type;
+ description
+ "Multicast source IPv4 address.";
+ }
+ leaf ssm-map-group-policy {
+ type string;
+ description
+ "Name of the policy used to define ssm-map rules.
+ A device can restrict the length
+ and value of this name, possibly space and special
+ characters are not allowed.";
+ }
+ }
+ list static-group {
+ if-feature "intf-static-group";
+ key "group-addr source-addr";
+ description
+ "A static multicast route, (*,G) or (S,G).
+ The version of IGMP must be 3 to support (S,G).";
+ leaf group-addr {
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "Multicast group IPv4 address.";
+ }
+ leaf source-addr {
+ type rt-types:ipv4-multicast-source-address;
+ description
+ "Multicast source IPv4 address.";
+ }
+ }
+ }
+ // interface-config-attributes-igmp
+
+ grouping interface-config-attributes-mld {
+ description
+ "Per-interface configuration attributes for MLD.";
+ uses interface-common-config-attributes-mld;
+ uses interface-level-config-attributes;
+ leaf-list join-group {
+ if-feature "intf-join-group";
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "The router joins this multicast group on the interface.";
+ }
+ list ssm-map {
+ if-feature "intf-ssm-map";
+ key "ssm-map-source-addr ssm-map-group-policy";
+ description
+ "The policy for (*,G) mapping to (S,G).";
+ leaf ssm-map-source-addr {
+ type ssm-map-ipv6-addr-type;
+ description
+ "Multicast source IPv6 address.";
+ }
+ leaf ssm-map-group-policy {
+ type string;
+ description
+ "Name of the policy used to define ssm-map rules.
+ A device can restrict the length
+ and value of this name, possibly space and special
+ characters are not allowed.";
+ }
+ }
+ list static-group {
+ if-feature "intf-static-group";
+ key "group-addr source-addr";
+ description
+ "A static multicast route, (*,G) or (S,G).
+ The version of MLD must be 2 to support (S,G).";
+ leaf group-addr {
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "Multicast group IPv6 address.";
+ }
+ leaf source-addr {
+ type rt-types:ipv6-multicast-source-address;
+ description
+ "Multicast source IPv6 address.";
+ }
+ }
+ }
+ // interface-config-attributes-mld
+
+ grouping interface-state-attributes {
+ description
+ "Per-interface state attributes for both IGMP and MLD.";
+ leaf oper-status {
+ type enumeration {
+ enum up {
+ description
+ "Ready to pass packets.";
+ }
+ enum down {
+ description
+ "The interface does not pass any packets.";
+ }
+ }
+ config false;
+ mandatory true;
+ description
+ "Indicates whether the operational state of the interface
+ is up or down.";
+ }
+ }
+ // interface-state-attributes
+
+ grouping interface-state-attributes-igmp {
+ description
+ "Per-interface state attributes for IGMP.";
+ uses interface-state-attributes;
+ leaf querier {
+ type inet:ipv4-address;
+ config false;
+ mandatory true;
+ description
+ "The querier address in the subnet.";
+ }
+ leaf-list joined-group {
+ if-feature "intf-join-group";
+ type rt-types:ipv4-multicast-group-address;
+ config false;
+ description
+ "The routers that joined this multicast group.";
+ }
+ list group {
+ key "group-address";
+ config false;
+ description
+ "Multicast group membership information
+ that joined on the interface.";
+ leaf group-address {
+ type rt-types:ipv4-multicast-group-address;
+ description
+ "Multicast group address.";
+ }
+ uses interface-state-group-attributes;
+ leaf last-reporter {
+ type inet:ipv4-address;
+ description
+ "The IPv4 address of the last host that has sent the
+ report to join the multicast group.";
+ }
+ list source {
+ key "source-address";
+ description
+ "List of multicast source information
+ of the multicast group.";
+ leaf source-address {
+ type inet:ipv4-address;
+ description
+ "Multicast source address in group record.";
+ }
+ uses interface-state-source-attributes;
+ leaf last-reporter {
+ type inet:ipv4-address;
+ description
+ "The IPv4 address of the last host that has sent the
+ report to join the multicast source and group.";
+ }
+ list host {
+ if-feature "intf-explicit-tracking";
+ key "host-address";
+ description
+ "List of hosts with the membership for the specific
+ multicast source-group.";
+ leaf host-address {
+ type inet:ipv4-address;
+ description
+ "The IPv4 address of the host.";
+ }
+ uses interface-state-host-attributes;
+ }
+ // list host
+ }
+ // list source
+ }
+ // list group
+ }
+ // interface-state-attributes-igmp
+
+ grouping interface-state-attributes-mld {
+ description
+ "Per-interface state attributes for MLD.";
+ uses interface-state-attributes;
+ leaf querier {
+ type inet:ipv6-address;
+ config false;
+ mandatory true;
+ description
+ "The querier address in the subnet.";
+ }
+ leaf-list joined-group {
+ if-feature "intf-join-group";
+ type rt-types:ipv6-multicast-group-address;
+ config false;
+ description
+ "The routers that joined this multicast group.";
+ }
+ list group {
+ key "group-address";
+ config false;
+ description
+ "Multicast group membership information
+ that joined on the interface.";
+ leaf group-address {
+ type rt-types:ipv6-multicast-group-address;
+ description
+ "Multicast group address.";
+ }
+ uses interface-state-group-attributes;
+ leaf last-reporter {
+ type inet:ipv6-address;
+ description
+ "The IPv6 address of the last host that has sent the
+ report to join the multicast group.";
+ }
+ list source {
+ key "source-address";
+ description
+ "List of multicast sources of the multicast group.";
+ leaf source-address {
+ type inet:ipv6-address;
+ description
+ "Multicast source address in group record.";
+ }
+ uses interface-state-source-attributes;
+ leaf last-reporter {
+ type inet:ipv6-address;
+ description
+ "The IPv6 address of the last host that has sent the
+ report to join the multicast source and group.";
+ }
+ list host {
+ if-feature "intf-explicit-tracking";
+ key "host-address";
+ description
+ "List of hosts with the membership for the specific
+ multicast source-group.";
+ leaf host-address {
+ type inet:ipv6-address;
+ description
+ "The IPv6 address of the host.";
+ }
+ uses interface-state-host-attributes;
+ }
+ // list host
+ }
+ // list source
+ }
+ // list group
+ }
+ // interface-state-attributes-mld
+
+ grouping interface-state-group-attributes {
+ description
+ "Per-interface state attributes for both IGMP and MLD
+ groups.";
+ leaf expire {
+ type uint32;
+ units "seconds";
+ mandatory true;
+ description
+ "The time left before the multicast group state expires.";
+ }
+ leaf filter-mode {
+ type enumeration {
+ enum include {
+ description
+ "In include mode, reception of packets sent
+ to the specified multicast address is requested
+ only from those IP source addresses listed in the
+ source-list parameter";
+ }
+ enum exclude {
+ description
+ "In exclude mode, reception of packets sent
+ to the given multicast address is requested
+ from all IP source addresses except those
+ listed in the source-list parameter.";
+ }
+ }
+ mandatory true;
+ description
+ "Filter mode for a multicast group,
+ may be either include or exclude.";
+ }
+ leaf up-time {
+ type uint32;
+ units "seconds";
+ mandatory true;
+ description
+ "The elapsed time since the device created multicast group
+ record.";
+ }
+ }
+ // interface-state-group-attributes
+
+ grouping interface-state-source-attributes {
+ description
+ "Per-interface state attributes for both IGMP and MLD
+ source-group records.";
+ leaf expire {
+ type uint32;
+ units "seconds";
+ mandatory true;
+ description
+ "The time left before multicast source-group state expires.";
+ }
+ leaf up-time {
+ type uint32;
+ units "seconds";
+ mandatory true;
+ description
+ "The elapsed time since the device created multicast
+ source-group record.";
+ }
+ leaf host-count {
+ if-feature "intf-explicit-tracking";
+ type uint32;
+ description
+ "The number of host addresses.";
+ }
+ }
+ // interface-state-source-attributes
+
+ grouping interface-state-host-attributes {
+ description
+ "Per-interface state attributes for both IGMP and MLD
+ hosts of source-group records.";
+ leaf host-filter-mode {
+ type enumeration {
+ enum include {
+ description
+ "In include mode.";
+ }
+ enum exclude {
+ description
+ "In exclude mode.";
+ }
+ }
+ mandatory true;
+ description
+ "Filter mode for a multicast membership
+ host may be either include or exclude.";
+ }
+ }
+ // interface-state-host-attributes
+
+ /*
+ * Configuration and Operational state data nodes (NMDA version)
+ */
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol" {
+ when "derived-from-or-self(rt:type, 'igmp-mld:igmp')" {
+ description
+ "This augmentation is only valid for a control-plane
+ protocol instance of IGMP (type 'igmp').";
+ }
+ description
+ "IGMP augmentation to routing control-plane protocol
+ configuration and state.";
+ container igmp {
+ if-feature "feature-igmp";
+ description
+ "IGMP configuration and operational state data.";
+ container global {
+ description
+ "Global attributes.";
+ uses global-config-attributes;
+ uses global-state-attributes;
+ }
+ container interfaces {
+ description
+ "Containing a list of interfaces.";
+ uses interfaces-config-attributes-igmp {
+ if-feature "interface-global-config";
+ refine "query-interval" {
+ default "125";
+ }
+ refine "query-max-response-time" {
+ default "10";
+ }
+ refine "robustness-variable" {
+ default "2";
+ }
+ refine "version" {
+ default "2";
+ }
+ }
+ list interface {
+ key "interface-name";
+ description
+ "List of IGMP interfaces.";
+ leaf interface-name {
+ type if:interface-ref;
+ must
+ '/if:interfaces/if:interface[if:name = current()]/'
+ + 'ip:ipv4' {
+ error-message
+ "The interface must have IPv4 configured, either "
+ + "enabled or disabled.";
+ }
+ description
+ "Reference to an entry in the global interface list.";
+ }
+ uses interface-config-attributes-igmp {
+ if-feature "per-interface-config";
+ refine "last-member-query-interval" {
+ must '../version != 1 or '
+ + '(not(../version) and '
+ + '(../../version != 1 or not(../../version)))' {
+ error-message "IGMPv1 does not support "
+ + "last-member-query-interval.";
+ }
+ }
+ refine "max-group-sources" {
+ must '../version = 3 or '
+ + '(not(../version) and (../../version = 3))' {
+ error-message
+ "The version of IGMP must be 3 to support the "
+ + "source-specific parameters.";
+ }
+ }
+ refine "source-policy" {
+ must '../version = 3 or '
+ + '(not(../version) and (../../version = 3))' {
+ error-message
+ "The version of IGMP must be 3 to support the "
+ + "source-specific parameters.";
+ }
+ }
+ refine "explicit-tracking" {
+ must '../version = 3 or '
+ + '(not(../version) and (../../version = 3))' {
+ error-message
+ "The version of IGMP must be 3 to support the "
+ + "explicit tracking function.";
+ }
+ }
+ refine "lite-exclude-filter" {
+ must '../version = 3 or '
+ + '(not(../version) and (../../version = 3))' {
+ error-message
+ "The version of IGMP must be 3 to support the "
+ + "simplified EXCLUDE filter in the Lightweight "
+ + "IGMPv3 protocol.";
+ }
+ }
+ }
+ uses interface-state-attributes-igmp;
+ }
+ // interface
+ }
+ // interfaces
+
+ /*
+ * Actions
+ */
+ action clear-groups {
+ if-feature "action-clear-groups";
+ description
+ "Clears the specified IGMP cache entries.";
+ input {
+ choice interface {
+ mandatory true;
+ description
+ "Indicates the interface(s) from which the cache
+ entries are cleared.";
+ case name {
+ leaf interface-name {
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/"
+ + "igmp-mld:igmp/igmp-mld:interfaces/"
+ + "igmp-mld:interface/igmp-mld:interface-name";
+ }
+ description
+ "Name of the IGMP interface.";
+ }
+ }
+ case all {
+ leaf all-interfaces {
+ type empty;
+ description
+ "IGMP groups from all interfaces are cleared.";
+ }
+ }
+ }
+ leaf group-address {
+ type union {
+ type enumeration {
+ enum * {
+ description
+ "Any group address.";
+ }
+ }
+ type rt-types:ipv4-multicast-group-address;
+ }
+ mandatory true;
+ description
+ "Multicast group IPv4 address.
+ If the value '*' is specified, all IGMP group entries
+ are cleared.";
+ }
+ leaf source-address {
+ type rt-types:ipv4-multicast-source-address;
+ mandatory true;
+ description
+ "Multicast source IPv4 address.
+ If the value '*' is specified, all IGMP source-group
+ entries are cleared.";
+ }
+ }
+ }
+ // action clear-groups
+ }
+ // igmp
+ }
+ // augment
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol" {
+ when "derived-from-or-self(rt:type, 'igmp-mld:mld')" {
+ description
+ "This augmentation is only valid for a control-plane
+ protocol instance of IGMP (type 'mld').";
+ }
+ description
+ "MLD augmentation to routing control-plane protocol
+ configuration and state.";
+ container mld {
+ if-feature "feature-mld";
+ description
+ "MLD configuration and operational state data.";
+ container global {
+ description
+ "Global attributes.";
+ uses global-config-attributes;
+ uses global-state-attributes;
+ }
+ container interfaces {
+ description
+ "Containing a list of interfaces.";
+ uses interfaces-config-attributes-mld {
+ if-feature "interface-global-config";
+ refine "last-member-query-interval" {
+ default "1";
+ }
+ refine "query-interval" {
+ default "125";
+ }
+ refine "query-max-response-time" {
+ default "10";
+ }
+ refine "require-router-alert" {
+ default "true";
+ }
+ refine "robustness-variable" {
+ default "2";
+ }
+ refine "version" {
+ default "2";
+ }
+ }
+ list interface {
+ key "interface-name";
+ description
+ "List of MLD interfaces.";
+ leaf interface-name {
+ type if:interface-ref;
+ must
+ '/if:interfaces/if:interface[if:name = current()]/'
+ + 'ip:ipv6' {
+ error-message
+ "The interface must have IPv6 configured, either "
+ + "enabled or disabled.";
+ }
+ description
+ "Reference to an entry in the global interface list.";
+ }
+ uses interface-config-attributes-mld {
+ if-feature "per-interface-config";
+ refine "max-group-sources" {
+ must '../version = 2 or '
+ + '(not(../version) and '
+ + '(../../version = 2 or not(../../version)))' {
+ error-message
+ "The version of MLD must be 2 to support the "
+ + "source-specific parameters.";
+ }
+ }
+ refine "source-policy" {
+ must '../version = 2 or '
+ + '(not(../version) and '
+ + '(../../version = 2 or not(../../version)))' {
+ error-message
+ "The version of MLD must be 2 to support the "
+ + "source-specific parameters.";
+ }
+ }
+ refine "explicit-tracking" {
+ must '../version = 2 or '
+ + '(not(../version) and '
+ + '(../../version = 2 or not(../../version)))' {
+ error-message
+ "The version of MLD must be 2 to support the "
+ + "explicit tracking function.";
+ }
+ }
+ refine "lite-exclude-filter" {
+ must '../version = 2 or '
+ + '(not(../version) and '
+ + '(../../version = 2 or not(../../version)))' {
+ error-message
+ "The version of MLD must be 2 to support the "
+ + "simplified EXCLUDE filter in the Lightweight "
+ + "MLDv2 protocol.";
+ }
+ }
+ }
+ uses interface-state-attributes-mld;
+ }
+ // interface
+ }
+ // interfaces
+
+ /*
+ * Actions
+ */
+ action clear-groups {
+ if-feature "action-clear-groups";
+ description
+ "Clears the specified MLD cache entries.";
+ input {
+ choice interface {
+ mandatory true;
+ description
+ "Indicates the interface(s) from which the cache
+ entries are cleared.";
+ case name {
+ leaf interface-name {
+ type leafref {
+ path "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/"
+ + "igmp-mld:mld/igmp-mld:interfaces/"
+ + "igmp-mld:interface/igmp-mld:interface-name";
+ }
+ description
+ "Name of the MLD interface.";
+ }
+ }
+ case all {
+ leaf all-interfaces {
+ type empty;
+ description
+ "MLD groups from all interfaces are cleared.";
+ }
+ }
+ }
+ leaf group-address {
+ type union {
+ type enumeration {
+ enum * {
+ description
+ "Any group address.";
+ }
+ }
+ type rt-types:ipv6-multicast-group-address;
+ }
+ description
+ "Multicast group IPv6 address.
+ If the value '*' is specified, all MLD group entries
+ are cleared.";
+ }
+ leaf source-address {
+ type rt-types:ipv6-multicast-source-address;
+ description
+ "Multicast source IPv6 address.
+ If the value '*' is specified, all MLD source-group
+ entries are cleared.";
+ }
+ }
+ }
+ // action clear-mld-groups
+ }
+ // mld
+ }
+ // augment
+ }
+ <CODE ENDS>
+
+5. Security Considerations
+
+ The YANG module specified in this document defines a schema for data
+ that is designed to be accessed via network management protocols such
+ as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer
+ is the secure transport layer, and the mandatory-to-implement secure
+ transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer
+ is HTTPS, and the mandatory-to-implement secure transport is TLS
+ [RFC8446].
+
+ The Network Configuration Access Control Model (NACM) [RFC8341]
+ provides the means to restrict access for particular NETCONF or
+ RESTCONF users to a preconfigured subset of all available NETCONF or
+ RESTCONF protocol operations and content.
+
+ There are a number of data nodes defined in this YANG module that are
+ writable/creatable/deletable (i.e., config true, which is the
+ default). These data nodes may be considered sensitive or vulnerable
+ in some network environments. Write operations (e.g., edit-config)
+ to these data nodes without proper protection can have a negative
+ effect on network operations. These are the subtrees and data nodes
+ and their sensitivity/vulnerability:
+
+ Under /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmp-mld:igmp,
+
+ igmp-mld:global
+ This subtree specifies the configuration for the IGMP attributes
+ at the global level on an IGMP instance. Modifying the
+ configuration can cause IGMP membership to be deleted or
+ reconstructed on all the interfaces of an IGMP instance.
+
+ igmp-mld:interfaces
+ This subtree specifies the configuration for the IGMP attributes
+ at the interface-global level on an IGMP instance. Modifying the
+ configuration can cause IGMP membership to be deleted or
+ reconstructed on all the interfaces of an IGMP instance.
+
+ igmp-mld:interfaces/interface
+ This subtree specifies the configuration for the IGMP attributes
+ at the interface level on an IGMP instance. Modifying the
+ configuration can cause IGMP membership to be deleted or
+ reconstructed on a specific interface of an IGMP instance.
+
+ Under /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmp-mld:mld,
+
+ igmp-mld:global
+ This subtree specifies the configuration for the MLD attributes at
+ the global level on an MLD instance. Modifying the configuration
+ can cause MLD membership to be deleted or reconstructed on all the
+ interfaces of an MLD instance.
+
+ igmp-mld:interfaces
+ This subtree specifies the configuration for the MLD attributes at
+ the interface-global level on an MLD instance. Modifying the
+ configuration can cause MLD membership to be deleted or
+ reconstructed on all the interfaces of an MLD instance.
+
+ igmp-mld:interfaces/interface
+ This subtree specifies the configuration for the MLD attributes at
+ the interface level on a device. Modifying the configuration can
+ cause MLD membership to be deleted or reconstructed on a specific
+ interface of an MLD instance.
+
+ Unauthorized access to any data node of these subtrees can adversely
+ affect the membership records of multicast routing subsystem on the
+ local device. This may lead to network malfunctions, delivery of
+ packets to inappropriate destinations, and other problems.
+
+ Some of the readable data nodes in this YANG module may be considered
+ sensitive or vulnerable in some network environments. It is thus
+ important to control read access (e.g., via get, get-config, or
+ notification) to these data nodes. These are the subtrees and data
+ nodes and their sensitivity/vulnerability:
+
+ /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmmp-mld:igmp
+
+ /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmp-mld:mld
+
+ Unauthorized access to any data node of the above subtree can
+ disclose the operational state information of IGMP or MLD on this
+ device.
+
+ Some of the action operations in this YANG module may be considered
+ sensitive or vulnerable in some network environments. It is thus
+ important to control access to these operations. These are the
+ operations and their sensitivity/vulnerability:
+
+ /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmmp-mld:igmp/igmmp-mld:clear-groups
+
+ /rt:routing/rt:control-plane-protocols
+ /rt:control-plane-protocol/igmp-mld:mld/igmp-mld:clear-groups
+
+ Unauthorized access to any of the above action operations can delete
+ the IGMP or MLD membership records on this device.
+
+6. IANA Considerations
+
+ This document registers the following namespace URIs in the IETF XML
+ registry [RFC3688]:
+
+ URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld
+
+ Registrant Contact: The IESG.
+
+ XML: N/A; the requested URI is an XML namespace.
+
+ This document registers the following YANG modules in the YANG Module
+ Names registry [RFC6020]:
+
+ Name: ietf-igmp-mld
+
+ Namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld
+
+ Prefix: igmp-mld
+
+ Reference: RFC 8652
+
+7. References
+
+7.1. Normative References
+
+ [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
+ RFC 1112, DOI 10.17487/RFC1112, August 1989,
+ <https://www.rfc-editor.org/info/rfc1112>.
+
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
+ Requirement Levels", BCP 14, RFC 2119,
+ DOI 10.17487/RFC2119, March 1997,
+ <https://www.rfc-editor.org/info/rfc2119>.
+
+ [RFC2236] Fenner, W., "Internet Group Management Protocol, Version
+ 2", RFC 2236, DOI 10.17487/RFC2236, November 1997,
+ <https://www.rfc-editor.org/info/rfc2236>.
+
+ [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast
+ Listener Discovery (MLD) for IPv6", RFC 2710,
+ DOI 10.17487/RFC2710, October 1999,
+ <https://www.rfc-editor.org/info/rfc2710>.
+
+ [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
+ Thyagarajan, "Internet Group Management Protocol, Version
+ 3", RFC 3376, DOI 10.17487/RFC3376, October 2002,
+ <https://www.rfc-editor.org/info/rfc3376>.
+
+ [RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
+ DOI 10.17487/RFC3688, January 2004,
+ <https://www.rfc-editor.org/info/rfc3688>.
+
+ [RFC3810] Vida, R., Ed. and L. Costa, Ed., "Multicast Listener
+ Discovery Version 2 (MLDv2) for IPv6", RFC 3810,
+ DOI 10.17487/RFC3810, June 2004,
+ <https://www.rfc-editor.org/info/rfc3810>.
+
+ [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for
+ IP", RFC 4607, DOI 10.17487/RFC4607, August 2006,
+ <https://www.rfc-editor.org/info/rfc4607>.
+
+ [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
+ the Network Configuration Protocol (NETCONF)", RFC 6020,
+ DOI 10.17487/RFC6020, October 2010,
+ <https://www.rfc-editor.org/info/rfc6020>.
+
+ [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
+ and A. Bierman, Ed., "Network Configuration Protocol
+ (NETCONF)", RFC 6241, DOI 10.17487/RFC6241, June 2011,
+ <https://www.rfc-editor.org/info/rfc6241>.
+
+ [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure
+ Shell (SSH)", RFC 6242, DOI 10.17487/RFC6242, June 2011,
+ <https://www.rfc-editor.org/info/rfc6242>.
+
+ [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types",
+ RFC 6991, DOI 10.17487/RFC6991, July 2013,
+ <https://www.rfc-editor.org/info/rfc6991>.
+
+ [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
+ RFC 7950, DOI 10.17487/RFC7950, August 2016,
+ <https://www.rfc-editor.org/info/rfc7950>.
+
+ [RFC8040] Bierman, A., Bjorklund, M., and K. Watsen, "RESTCONF
+ Protocol", RFC 8040, DOI 10.17487/RFC8040, January 2017,
+ <https://www.rfc-editor.org/info/rfc8040>.
+
+ [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
+ 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
+ May 2017, <https://www.rfc-editor.org/info/rfc8174>.
+
+ [RFC8294] Liu, X., Qu, Y., Lindem, A., Hopps, C., and L. Berger,
+ "Common YANG Data Types for the Routing Area", RFC 8294,
+ DOI 10.17487/RFC8294, December 2017,
+ <https://www.rfc-editor.org/info/rfc8294>.
+
+ [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration
+ Access Control Model", STD 91, RFC 8341,
+ DOI 10.17487/RFC8341, March 2018,
+ <https://www.rfc-editor.org/info/rfc8341>.
+
+ [RFC8342] Bjorklund, M., Schoenwaelder, J., Shafer, P., Watsen, K.,
+ and R. Wilton, "Network Management Datastore Architecture
+ (NMDA)", RFC 8342, DOI 10.17487/RFC8342, March 2018,
+ <https://www.rfc-editor.org/info/rfc8342>.
+
+ [RFC8343] Bjorklund, M., "A YANG Data Model for Interface
+ Management", RFC 8343, DOI 10.17487/RFC8343, March 2018,
+ <https://www.rfc-editor.org/info/rfc8343>.
+
+ [RFC8344] Bjorklund, M., "A YANG Data Model for IP Management",
+ RFC 8344, DOI 10.17487/RFC8344, March 2018,
+ <https://www.rfc-editor.org/info/rfc8344>.
+
+ [RFC8349] Lhotka, L., Lindem, A., and Y. Qu, "A YANG Data Model for
+ Routing Management (NMDA Version)", RFC 8349,
+ DOI 10.17487/RFC8349, March 2018,
+ <https://www.rfc-editor.org/info/rfc8349>.
+
+ [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol
+ Version 1.3", RFC 8446, DOI 10.17487/RFC8446, August 2018,
+ <https://www.rfc-editor.org/info/rfc8446>.
+
+ [RFC8519] Jethanandani, M., Agarwal, S., Huang, L., and D. Blair,
+ "YANG Data Model for Network Access Control Lists (ACLs)",
+ RFC 8519, DOI 10.17487/RFC8519, March 2019,
+ <https://www.rfc-editor.org/info/rfc8519>.
+
+7.2. Informative References
+
+ [RFC3569] Bhattacharyya, S., Ed., "An Overview of Source-Specific
+ Multicast (SSM)", RFC 3569, DOI 10.17487/RFC3569, July
+ 2003, <https://www.rfc-editor.org/info/rfc3569>.
+
+ [RFC4541] Christensen, M., Kimball, K., and F. Solensky,
+ "Considerations for Internet Group Management Protocol
+ (IGMP) and Multicast Listener Discovery (MLD) Snooping
+ Switches", RFC 4541, DOI 10.17487/RFC4541, May 2006,
+ <https://www.rfc-editor.org/info/rfc4541>.
+
+ [RFC4605] Fenner, B., He, H., Haberman, B., and H. Sandick,
+ "Internet Group Management Protocol (IGMP) / Multicast
+ Listener Discovery (MLD)-Based Multicast Forwarding
+ ("IGMP/MLD Proxying")", RFC 4605, DOI 10.17487/RFC4605,
+ August 2006, <https://www.rfc-editor.org/info/rfc4605>.
+
+ [RFC5790] Liu, H., Cao, W., and H. Asaeda, "Lightweight Internet
+ Group Management Protocol Version 3 (IGMPv3) and Multicast
+ Listener Discovery Version 2 (MLDv2) Protocols", RFC 5790,
+ DOI 10.17487/RFC5790, February 2010,
+ <https://www.rfc-editor.org/info/rfc5790>.
+
+ [RFC6636] Asaeda, H., Liu, H., and Q. Wu, "Tuning the Behavior of
+ the Internet Group Management Protocol (IGMP) and
+ Multicast Listener Discovery (MLD) for Routers in Mobile
+ and Wireless Networks", RFC 6636, DOI 10.17487/RFC6636,
+ May 2012, <https://www.rfc-editor.org/info/rfc6636>.
+
+ [RFC8340] Bjorklund, M. and L. Berger, Ed., "YANG Tree Diagrams",
+ BCP 215, RFC 8340, DOI 10.17487/RFC8340, March 2018,
+ <https://www.rfc-editor.org/info/rfc8340>.
+
+ [RFC8407] Bierman, A., "Guidelines for Authors and Reviewers of
+ Documents Containing YANG Data Models", BCP 216, RFC 8407,
+ DOI 10.17487/RFC8407, October 2018,
+ <https://www.rfc-editor.org/info/rfc8407>.
+
+ [RFC8639] Voit, E., Clemm, A., Gonzalez Prieto, A., Nilsen-Nygaard,
+ E., and A. Tripathy, "Subscription to YANG Notifications",
+ RFC 8639, DOI 10.17487/RFC8639, September 2019,
+ <https://www.rfc-editor.org/info/rfc8639>.
+
+ [RFC8641] Clemm, A. and E. Voit, "Subscription to YANG Notifications
+ for Datastore Updates", RFC 8641, DOI 10.17487/RFC8641,
+ September 2019, <https://www.rfc-editor.org/info/rfc8641>.
+
+Acknowledgments
+
+ The authors would like to thank Steve Baillargeon, Hu Fangwei, Robert
+ Kebler, Tanmoy Kundu, and Stig Venaas for their valuable
+ contributions.
+
+Contributors
+
+ Yisong Liu
+ Huawei Technologies
+ China
+
+ Email: liuyisong@huawei.com
+
+Authors' Addresses
+
+ Xufeng Liu
+ Volta Networks
+
+ Email: xufeng.liu.ietf@gmail.com
+
+
+ Feng Guo
+ China
+ 100095
+ Beijing
+ Huawei Bldg., No. 156 Beiqing Rd., Haidian District
+ Huawei Technologies
+
+ Email: guofeng@huawei.com
+
+
+ Mahesh Sivakumar
+ Juniper Networks
+ 1133 Innovation Way
+ Sunnyvale, California
+ United States of America
+
+ Email: sivakumar.mahesh@gmail.com
+
+
+ Pete McAllister
+ Metaswitch Networks
+ 100 Church Street
+ Enfield
+ EN2 6BQ
+ United Kingdom
+
+ Email: pete.mcallister@metaswitch.com
+
+
+ Anish Peter
+ IP Infusion India
+ RMZ Centennial, Block D 401
+ Kundanahalli Main Road, Mahadevapura Post
+ Bangalore
+ India
+
+ Email: anish.ietf@gmail.com