draft-ietf-pim-igmp-mld-yang-04.txt   draft-ietf-pim-igmp-mld-yang-05.txt 
PIM Working Group X. Liu PIM Working Group X. Liu
Internet-Draft Jabil Internet-Draft Jabil
Intended Status: Standard Track F. Guo Intended Status: Standard Track F. Guo
Expires: December 31, 2017 Huawei Expires: March 19, 2018 Huawei
M. Sivakumar M. Sivakumar
Cisco Cisco
P. McAllister P. McAllister
Metaswitch Networks Metaswitch Networks
A. Peter A. Peter
Juniper Networks Juniper Networks
June 30, 2017 Sep 19, 2017
A YANG data model for Internet Group Management Protocol (IGMP) and A YANG data model for Internet Group Management Protocol (IGMP) and
Multicast Listener Discovery (MLD) Multicast Listener Discovery (MLD)
draft-ietf-pim-igmp-mld-yang-04 draft-ietf-pim-igmp-mld-yang-05
Status of this Memo Status of this Memo
This Internet-Draft is submitted in full conformance with the This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79. provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF), its areas, and its working groups. Note that Task Force (IETF), its areas, and its working groups. Note that
other groups may also distribute working documents as Internet- other groups may also distribute working documents as Internet-
Drafts. Drafts.
skipping to change at page 1, line 39 skipping to change at page 1, line 39
months and may be updated, replaced, or obsoleted by other documents months and may be updated, replaced, or obsoleted by other documents
at any time. It is inappropriate to use Internet-Drafts as at any time. It is inappropriate to use Internet-Drafts as
reference material or to cite them other than as "work in progress." reference material or to cite them other than as "work in progress."
The list of current Internet-Drafts can be accessed at The list of current Internet-Drafts can be accessed at
http://www.ietf.org/ietf/1id-abstracts.txt http://www.ietf.org/ietf/1id-abstracts.txt
The list of Internet-Draft Shadow Directories can be accessed at The list of Internet-Draft Shadow Directories can be accessed at
http://www.ietf.org/shadow.html http://www.ietf.org/shadow.html
This Internet-Draft will expire on December 31, 2017. This Internet-Draft will expire on March 20, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents Provisions Relating to IETF Documents
(http://trustee.ietf.org/license-info) in effect on the date of (http://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents publication of this document. Please review these documents
skipping to change at page 2, line 26 skipping to change at page 2, line 26
Table of Contents Table of Contents
1. Introduction ................................................ 2 1. Introduction ................................................ 2
1.1. Requirements Language................................... 3 1.1. Requirements Language................................... 3
1.2. Terminology ............................................ 3 1.2. Terminology ............................................ 3
2. Design of Data model......................................... 3 2. Design of Data model......................................... 3
2.1. Scope of model ......................................... 3 2.1. Scope of model ......................................... 3
2.2. Optional capabilities................................... 3 2.2. Optional capabilities................................... 3
2.3. Position of address family in hierarchy................. 4 2.3. Position of address family in hierarchy................. 4
3. Module Structure ............................................ 4 3. Module Structure ............................................ 4
3.1. IGMP and MLD Configuration.............................. 4 3.1. IGMP Configuration and Operational state................ 4
3.2. IGMP and MLD Operational State.......................... 8 3.2. MLD Configuration and Operational State................. 6
3.3. IGMP and MLD RPC....................................... 12 3.3. IGMP and MLD RPC........................................ 8
4. IGMP and MLD YANG Modules................................... 13 4. IGMP and MLD YANG Modules.................................... 8
5. Security Considerations..................................... 38 5. Security Considerations..................................... 30
6. IANA Considerations ........................................ 39 6. IANA Considerations ........................................ 30
7. References ................................................. 39 7. References ................................................. 31
7.1. Normative References................................... 39 7.1. Normative References................................... 31
7.2. Informative References................................. 40 7.2. Informative References................................. 32
8. Acknowledgments ............................................ 41 8. Acknowledgments ............................................ 32
1. Introduction 1. Introduction
YANG [RFC6020] [RFC6087] is a data definition language that was YANG [RFC6020] [RFC7950] is a data definition language that was
introduced to model the configuration and running state of a device introduced to model the configuration and running state of a device
managed using NETCONF [RFC6241]. YANG is now also being used as a managed using NETCONF [RFC6241]. YANG is now also being used as a
component of wider management interfaces, such as CLIs. component of wider management interfaces, such as CLIs.
This document defines a YANG data model that can be used to This document defines a YANG data model that can be used to
configure and manage Internet Group Management Protocol (IGMP) and configure and manage Internet Group Management Protocol (IGMP) and
Multicast Listener Discovery (MLD) devices. This model will support Multicast Listener Discovery (MLD) devices. This model will support
the core IGMP and MLD protocols, as well as many other features the core IGMP and MLD protocols, as well as many other features
mentioned in separate IGMP and MLD RFCs. Non-core features are mentioned in separate IGMP and MLD RFCs. Non-core features are
defined as optional in the provided data model. defined as optional in the provided data model.
1.1. Requirements Language 1.1. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in RFC-2119 [RFC2119]. document are to be interpreted as described in RFC-2119 [RFC2119].
1.2. Terminology 1.2. Terminology
The terminology for describing YANG data models is found in The terminology for describing YANG data models is found in
[RFC6020]. [RFC6020] [RFC7950].
This document employs YANG tree diagrams, which are explained in [I- This document employs YANG tree diagrams, which are explained in [I-
D.ietf-netmod-rfc6087bis]. D.ietf-netmod-rfc6087bis].
2. Design of Data model 2. Design of Data model
2.1. Scope of model 2.1. Scope of model
The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3 The model covers IGMPv1 [RFC1112], IGMPv2 [RFC2236], IGMPv3
[RFC3376] and MLDv1 [RFC2710], MLDv2 [RFC3810]. [RFC3376] and MLDv1 [RFC2710], MLDv2 [RFC3810].
The configuration of IGMP and MLD features are not all included in The configuration of IGMP and MLD features, and the operational
this document of the data model. This model is being circulated in state fields and RPC definitions are not all included in this
its mainly form of the basic hierarchy. document of the data model. This model can be extended, though the
structure of what has been written may be taken as representative of
The operational state fields and RPC definitions of this model can the structure of the whole model.
also be extended, though the structure of what has been written may
be taken as representative of the structure of the whole model.
This model does not cover other IGMP and MLD related protocols such This model does not cover other IGMP and MLD related protocols such
as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc., as IGMP/MLD Proxy [RFC4605] or IGMP/MLD Snooping [RFC4541] etc.,
these will be specified in separate documents. these will be specified in separate documents.
2.2. Optional capabilities 2.2. Optional capabilities
This model is designed to represent the capabilities of IGMP and MLD This model is designed to represent the capabilities of IGMP and MLD
devices with various specifications, including some with basic devices with various specifications, including some with basic
subsets of the IGMP and MLD protocols. The main design goals of subsets of the IGMP and MLD protocols. The main design goals of
skipping to change at page 4, line 17 skipping to change at page 4, line 17
MLD implementations. MLD implementations.
On the other hand, operational state parameters are not so widely On the other hand, operational state parameters are not so widely
designated as features, as there are many cases where the defaulting designated as features, as there are many cases where the defaulting
of an operational state parameter would not cause any harm to the of an operational state parameter would not cause any harm to the
system, and it is much more likely that an implementation without system, and it is much more likely that an implementation without
native support for a piece of operational state would be able to native support for a piece of operational state would be able to
derive a suitable value for a state variable that is not natively derive a suitable value for a state variable that is not natively
supported. supported.
For the same reason, basic constant ranges (for example, query For the same reason, wide constant ranges (for example, timer
interval maximum and minimum value) will be used in the model, as maximum and minimum) will be used in the model. It is expected that
defined with "-basic" postfix form. It is expected that vendors will vendors will augment the model with any specific restrictions that
augment the model with extended specific restrictions that might be might be required. Vendors may also extend the features list with
required, as defined a feature with "-extended" postfix form. proprietary extensions.
Vendors may also extend the features list with proprietary
extensions.
2.3. Position of address family in hierarchy 2.3. Position of address family in hierarchy
The current document contains IGMP and MLD as separate schema The current document contains IGMP and MLD as separate schema
branches in the structure. The reason for this is to make it easier branches in the structure. The reason for this is to make it easier
for implementations which may optionally choose to support specific for implementations which may optionally choose to support specific
address families. And the names of objects may be different between address families. And the names of objects may be different between
the IPv4 (IGMP) and IPv6 (MLD) address families. the IPv4 (IGMP) and IPv6 (MLD) address families.
3. Module Structure 3. Module Structure
3.1. IGMP and MLD Configuration 3.1. IGMP Configuration and Operational state
The IGMP and MLD modules define the routing-control-plane-protocol- The IGMP YANG model follows the Guidelines for YANG Module Authors
wide configuration options separately in a three-level hierarchy as (NMDA) [draft-dsdt-nmda-guidelines-01]. The IGMP module defines the
listed below: routing-control-plane-protocol-wide configuration and operational
state options separately in a three-level hierarchy as listed below:
Global level: IGMP or MLD configuration attributes for the entire Global level: IGMP configuration and operational state attributes
routing system. for the entire routing system.
Interface-global: IGMP or MLD configuration attributes are Interface-global: Only including configuration data nodes now.
applicable to all the interfaces whose interface-level corresponding IGMP configuration attributes are applicable to all the interfaces
attributes are not existing, with same attributes' value for these whose interface-level corresponding attributes are not existing,
interfaces. with same attributes' value for these interfaces.
Interface-level: IGMP or MLD configuration attributes specific to Interface-level: IGMP configuration and operational state
the given interface. attributes specific to the given interface.
Where fields are not genuinely essential to protocol operation, they Where fields are not genuinely essential to protocol operation, they
are marked as optional. Some fields will be essential but have a are marked as optional. Some fields will be essential but have a
default specified, so that they need not be configured explicitly. default specified, so that they need not be configured explicitly.
The module structure also applies, where applicable, to the
operational state and notifications as well.
We define the IGMP and MLD model as a protocol-centric model , and We define the IGMP model as a protocol-centric model , and the IGMP
the IGMP and MLD model augments "/rt:routing/rt:control-plane- model augments "/rt:routing/rt:control-plane-protocols/ rt:control-
protocols/ rt:control-plane-protocol" and would allow a single plane-protocol" in [draft-acee-netmod-rfc8022bis-01] and would allow
protocol instance per VRF. a single protocol instance per VRF.
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw igmp +--rw igmp
+--rw global +--rw global
| +--rw enable? boolean {global-admin-enable}? | +--rw enable? boolean {global-admin-enable}?
| +--rw max-entries? uint32 {global-max-entries}? | +--rw max-entries? uint32 {global-max-entries}?
| +--rw max-groups? uint32 {global-max-groups}? | +--rw max-groups? uint32 {global-max-groups}?
+--rw interfaces
+--rw (last-member-query-interval)?
| +--:(last-member-query-interval-basic)
| | +--rw last-member-query-interval-basic? uint16
| +--:(last-member-query-interval-extended)
| +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--rw max-groups-per-interface? uint32 {intf-max-groups}?
+--rw (query-interval)?
| +--:(query-interval-basic)
| | +--rw query-interval-basic? uint16
| +--:(query-interval-extended)
| +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
+--rw (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--rw query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--rw require-router-alert? boolean {intf-require-router-alert}?
+--rw (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--rw robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--rw version? uint8
+--rw interface* [interface-name]
+--rw interface-name if:interface-ref
+--rw enable? boolean {intf-admin-enable}?
+--rw group-policy? string
+--rw immediate-leave? empty {intf-immediate-leave}?
+--rw (last-member-query-interval)?
| +--:(last-member-query-interval-basic)
| | +--rw last-member-query-interval-basic? uint16
| +--:(last-member-query-interval-extended)
| +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--rw max-groups? uint32 {intf-max-groups}?
+--rw max-group-sources? uint32 {intf-max-group-sources}?
+--rw (query-interval)?
| +--:(query-interval-basic)
| | +--rw query-interval-basic? uint16
| +--:(query-interval-extended)
| +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
+--rw (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--rw query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--rw require-router-alert? boolean {intf-require-router-alert}?
+--rw (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--rw robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--rw source-policy? string {intf-source-policy}?
+--rw verify-source-subnet? empty {intf-verify-source-subnet}?
+--rw version? uint8
+--rw join-group* inet:ipv4-address {intf-join-group}?
+--rw ssm-map* [source-addr group-policy] {intf-ssm-map}?
| +--rw source-addr ssm-map-ipv4-addr-type
| +--rw group-policy string
+--rw static-group* [group source-addr] {intf-static-group}?
+--rw group inet:ipv4-address
+--rw source-addr source-ipv4-addr-type
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw mld
+--rw global
| +--rw enable? boolean {global-admin-enable}?
| +--rw max-entries? uint32 {global-max-entries}?
| +--rw max-groups? uint32 {global-max-groups}?
+--rw interfaces
+--rw (last-member-query-interval)?
| +--:(last-member-query-interval-basic)
| | +--rw last-member-query-interval-basic? uint16
| +--:(last-member-query-interval-extended)
| +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--rw max-groups-per-interface? uint32 {intf-max-groups}?
+--rw (query-interval)?
| +--:(query-interval-basic)
| | +--rw query-interval-basic? uint16
| +--:(query-interval-extended)
| +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
+--rw (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--rw query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--rw require-router-alert? boolean {intf-require-router-alert}?
+--rw (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--rw robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--rw version? uint8
+--rw interface* [interface-name]
+--rw interface-name if:interface-ref
+--rw enable? boolean {intf-admin-enable}?
+--rw group-policy? string
+--rw immediate-leave? empty {intf-immediate-leave}?
+--rw (last-member-query-interval)?
| +--:(last-member-query-interval-basic)
| | +--rw last-member-query-interval-basic? uint16
| +--:(last-member-query-interval-extended)
| +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--rw max-groups? uint32 {intf-max-groups}?
+--rw max-group-sources? uint32 {intf-max-group-sources}?
+--rw (query-interval)?
| +--:(query-interval-basic)
| | +--rw query-interval-basic? uint16
| +--:(query-interval-extended)
| +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
+--rw (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--rw query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--rw require-router-alert? boolean {intf-require-router-alert}?
+--rw (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--rw robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--rw source-policy? string {intf-source-policy}?
+--rw verify-source-subnet? empty {intf-verify-source-subnet}?
+--rw version? uint8
+--rw join-group* inet:ipv6-address {intf-join-group}?
+--rw ssm-map* [source-addr group-policy] {intf-ssm-map}?
| +--rw source-addr ssm-map-ipv6-addr-type
| +--rw group-policy string
+--rw static-group* [group source-addr] {intf-static-group}?
+--rw group inet:ipv6-address
+--rw source-addr source-ipv6-addr-type
3.2. IGMP and MLD Operational State
The IGMP or MLD module contains operational state information also
in a three-level hierarchy as mentioned earlier and separately
listed as below.
Global level: IGMP or MLD operational state attributes for the
entire routing system
Interface-global: IGMP or MLD interface level operational state
attributes are applicable to all the interfaces whose interface-
level corresponding attributes are not existing, with same
attributes' value for these interfaces.
Interface-specific: IGMP or MLD operational state attributes
specific to the given interface.
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol:
+--ro igmp
+--ro global
| +--ro enable? boolean {global-admin-enable}?
| +--ro max-entries? uint32 {global-max-entries}?
| +--ro max-groups? uint32 {global-max-groups}?
| +--ro entries-count? uint32 | +--ro entries-count? uint32
| +--ro groups-count? uint32 | +--ro groups-count? uint32
| +--ro statistics | +--ro statistics
| +--ro discontinuity-time? yang:date-and-time | +--ro discontinuity-time? yang:date-and-time
| +--ro error | +--ro error
| | +--ro total? yang:counter64 | | +--ro total? yang:counter64
| | +--ro query? yang:counter64 | | +--ro query? yang:counter64
| | +--ro report? yang:counter64 | | +--ro report? yang:counter64
| | +--ro leave? yang:counter64 | | +--ro leave? yang:counter64
| | +--ro checksum? yang:counter64 | | +--ro checksum? yang:counter64
skipping to change at page 8, line 49 skipping to change at page 5, line 37
| +--ro received | +--ro received
| | +--ro total? yang:counter64 | | +--ro total? yang:counter64
| | +--ro query? yang:counter64 | | +--ro query? yang:counter64
| | +--ro report? yang:counter64 | | +--ro report? yang:counter64
| | +--ro leave? yang:counter64 | | +--ro leave? yang:counter64
| +--ro sent | +--ro sent
| +--ro total? yang:counter64 | +--ro total? yang:counter64
| +--ro query? yang:counter64 | +--ro query? yang:counter64
| +--ro report? yang:counter64 | +--ro report? yang:counter64
| +--ro leave? yang:counter64 | +--ro leave? yang:counter64
+--ro interfaces +--rw interfaces
+--ro (last-member-query-interval)? +--rw last-member-query-interval? uint16
| +--:(last-member-query-interval-basic) +--rw max-groups-per-interface? uint32 {intf-max-groups}?
| | +--ro last-member-query-interval-basic? uint16 +--rw query-interval? uint16
| +--:(last-member-query-interval-extended) +--rw query-max-response-time? uint16
| +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? +--rw require-router-alert? boolean {intf-require-router-alert}?
+--ro max-groups-per-interface? uint32 {intf-max-groups}? +--rw robustness-variable? uint8
+--ro (query-interval)? +--rw version? uint8
| +--:(query-interval-basic) +--rw interface* [interface-name]
| | +--ro query-interval-basic? uint16 +--rw interface-name if:interface-ref
| +--:(query-interval-extended) +--rw enable? boolean {intf-admin-enable}?
| +--ro query-interval-extended? uint16 {intf-query-interval-extended}? +--rw group-policy? string
+--ro (query-max-response-time)? +--rw immediate-leave? empty {intf-immediate-leave}?
| +--:(query-max-response-time-basic) +--rw last-member-query-interval? uint16
| | +--ro query-max-response-time-basic? uint16 +--rw max-groups? uint32 {intf-max-groups}?
| +--:(query-max-response-time-extended) +--rw max-group-sources? uint32 {intf-max-group-sources}?
| +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? +--rw query-interval? uint16
+--ro require-router-alert? boolean {intf-require-router-alert}? +--rw query-max-response-time? uint16
+--ro (robustness-variable)? +--rw require-router-alert? boolean {intf-require-router-alert}?
| +--:(robustness-variable-basic) +--rw robustness-variable? uint8
| | +--ro robustness-variable-basic? uint8 +--rw source-policy? string {intf-source-policy}?
| +--:(robustness-variable-extended) +--rw verify-source-subnet? empty {intf-verify-source-subnet}?
| +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? +--rw version? uint8
+--ro interface* [interface-name] +--rw join-group* inet:ipv4-address {intf-join-group}?
+--ro interface-name if:interface-ref +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}?
+--ro enable? boolean {intf-admin-enable}? | +--rw source-addr ssm-map-ipv4-addr-type
+--ro group-policy? string | +--rw group-policy string
+--ro immediate-leave? empty {intf-immediate-leave}? +--rw static-group* [group-addr source-addr] {intf-static-group}
+--ro (last-member-query-interval)? | +--rw group-addr inet:ipv4-address
| +--:(last-member-query-interval-basic) | +--rw source-addr source-ipv4-addr-type
| | +--ro last-member-query-interval-basic? uint16 +--ro oper-status? enumeration
| +--:(last-member-query-interval-extended) +--ro querier? inet:ipv4-address
| +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? +--ro joined-group* inet:ipv4-address {intf-join-group}?
+--ro max-groups? uint32 {intf-max-groups}?
+--ro max-group-sources? uint32 {intf-max-group-sources}?
+--ro (query-interval)?
| +--:(query-interval-basic)
| | +--ro query-interval-basic? uint16
| +--:(query-interval-extended)
| +--ro query-interval-extended? uint16 {intf-query-interval-extended}?
+--ro (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--ro query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--ro require-router-alert? boolean {intf-require-router-alert}?
+--ro (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--ro robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--ro source-policy? string {intf-source-policy}?
+--ro verify-source-subnet? empty {intf-verify-source-subnet}?
+--ro version? uint8
+--ro join-group* inet:ipv4-address {intf-join-group}?
+--ro ssm-map* [source-addr group-policy] {intf-ssm-map}?
| +--ro source-addr ssm-map-ipv4-addr-type
| +--ro group-policy string
+--ro static-group* [group source-addr] {intf-static-group}?
| +--ro group inet:ipv4-address
| +--ro source-addr source-ipv4-addr-type
+--ro oper-status? enumeration
+--ro querier? inet:ipv4-address
+--ro joined-group* inet:ipv4-address {intf-join-group}?
+--ro group* [address] +--ro group* [address]
+--ro address inet:ipv4-address +--ro address inet:ipv4-address
+--ro expire? uint32 +--ro expire? uint32
+--ro filter-mode? enumeration +--ro filter-mode? enumeration
+--ro host-count? uint32 +--ro host-count? uint32
+--ro up-time? uint32 +--ro up-time? uint32
+--ro host* inet:ipv4-address +--ro host* inet:ipv4-address
+--ro last-reporter? inet:ipv4-address +--ro last-reporter? inet:ipv4-address
+--ro source* [address] +--ro source* [address]
+--ro address inet:ipv4-address +--ro address inet:ipv4-address
+--ro expire? uint32 +--ro expire? uint32
+--ro up-time? uint32 +--ro up-time? uint32
+--ro last-reporter? inet:ipv4-address +--ro last-reporter? inet:ipv4-address
augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol:
+--ro mld 3.2. MLD Configuration and Operational State
+--ro global
| +--ro enable? boolean {global-admin-enable}? The MLD YANG model uses the same structure as IGMP YANG model. The
| +--ro max-entries? uint32 {global-max-entries}? MLD module also defines the routing-control-plane-protocol-wide
| +--ro max-groups? uint32 {global-max-groups}? configuration and operational state options separately in a three-
level hierarchy.
augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw mld
+--rw global
| +--rw enable? boolean {global-admin-enable}?
| +--rw max-entries? uint32 {global-max-entries}?
| +--rw max-groups? uint32 {global-max-groups}?
| +--ro entries-count? uint32 | +--ro entries-count? uint32
| +--ro groups-count? uint32 | +--ro groups-count? uint32
| +--ro statistics | +--ro statistics
| +--ro discontinuity-time? yang:date-and-time | +--ro discontinuity-time? yang:date-and-time
| +--ro error | +--ro error
| | +--ro total? yang:counter64 | | +--ro total? yang:counter64
| | +--ro query? yang:counter64 | | +--ro query? yang:counter64
| | +--ro report? yang:counter64 | | +--ro report? yang:counter64
| | +--ro leave? yang:counter64 | | +--ro leave? yang:counter64
| | +--ro checksum? yang:counter64 | | +--ro checksum? yang:counter64
skipping to change at page 11, line 6 skipping to change at page 7, line 20
| +--ro received | +--ro received
| | +--ro total? yang:counter64 | | +--ro total? yang:counter64
| | +--ro query? yang:counter64 | | +--ro query? yang:counter64
| | +--ro report? yang:counter64 | | +--ro report? yang:counter64
| | +--ro leave? yang:counter64 | | +--ro leave? yang:counter64
| +--ro sent | +--ro sent
| +--ro total? yang:counter64 | +--ro total? yang:counter64
| +--ro query? yang:counter64 | +--ro query? yang:counter64
| +--ro report? yang:counter64 | +--ro report? yang:counter64
| +--ro leave? yang:counter64 | +--ro leave? yang:counter64
+--ro interfaces +--rw interfaces
+--ro (last-member-query-interval)? +--rw last-member-query-interval? uint16
| +--:(last-member-query-interval-basic) +--rw max-groups-per-interface? uint32 {intf-max-groups}?
| | +--ro last-member-query-interval-basic? uint16 +--rw query-interval? uint16
| +--:(last-member-query-interval-extended) +--rw query-max-response-time? uint16
| +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? +--rw require-router-alert? boolean {intf-require-router-alert}?
+--ro max-groups-per-interface? uint32 {intf-max-groups}? +--rw robustness-variable? uint8
+--ro (query-interval)? +--rw version? uint8
| +--:(query-interval-basic) +--rw interface* [interface-name]
| | +--ro query-interval-basic? uint16 +--rw interface-name if:interface-ref
| +--:(query-interval-extended) +--rw enable? boolean {intf-admin-enable}?
| +--ro query-interval-extended? uint16 {intf-query-interval-extended}? +--rw group-policy? string
+--ro (query-max-response-time)? +--rw immediate-leave? empty {intf-immediate-leave}?
| +--:(query-max-response-time-basic) +--rw last-member-query-interval? uint16
| | +--ro query-max-response-time-basic? uint16 +--rw max-groups? uint32 {intf-max-groups}?
| +--:(query-max-response-time-extended) +--rw max-group-sources? uint32 {intf-max-group-sources}?
| +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? +--rw query-interval? uint16
+--ro require-router-alert? boolean {intf-require-router-alert}? +--rw query-max-response-time? uint16
+--ro (robustness-variable)? +--rw require-router-alert? boolean {intf-require-router-alert}?
| +--:(robustness-variable-basic) +--rw robustness-variable? uint8
| | +--ro robustness-variable-basic? uint8 +--rw source-policy? string {intf-source-policy}?
| +--:(robustness-variable-extended) +--rw verify-source-subnet? empty {intf-verify-source-subnet}?
| +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? +--rw version? uint8
+--ro interface* [interface-name] +--rw join-group* inet:ipv6-address {intf-join-group}?
+--ro interface-name if:interface-ref +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}?
+--ro enable? boolean {intf-admin-enable}? | +--rw source-addr ssm-map-ipv6-addr-type
+--ro group-policy? string | +--rw group-policy string
+--ro immediate-leave? empty {intf-immediate-leave}? +--rw static-group* [group source-addr] {intf-static-group}?
+--ro (last-member-query-interval)? | +--rw group inet:ipv6-address
| +--:(last-member-query-interval-basic) | +--rw source-addr source-ipv6-addr-type
| | +--ro last-member-query-interval-basic? uint16 +--ro oper-status? enumeration
| +--:(last-member-query-interval-extended) +--ro querier? inet:ipv6-address
| +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? +--ro joined-group* inet:ipv6-address {intf-join-group}?
+--ro max-groups? uint32 {intf-max-groups}?
+--ro max-group-sources? uint32 {intf-max-group-sources}?
+--ro (query-interval)?
| +--:(query-interval-basic)
| | +--ro query-interval-basic? uint16
| +--:(query-interval-extended)
| +--ro query-interval-extended? uint16 {intf-query-interval-extended}?
+--ro (query-max-response-time)?
| +--:(query-max-response-time-basic)
| | +--ro query-max-response-time-basic? uint16
| +--:(query-max-response-time-extended)
| +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}
+--ro require-router-alert? boolean {intf-require-router-alert}?
+--ro (robustness-variable)?
| +--:(robustness-variable-basic)
| | +--ro robustness-variable-basic? uint8
| +--:(robustness-variable-extended)
| +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--ro source-policy? string {intf-source-policy}?
+--ro verify-source-subnet? empty {intf-verify-source-subnet}?
+--ro version? uint8
+--ro join-group* inet:ipv6-address {intf-join-group}?
+--ro ssm-map* [source-addr group-policy] {intf-ssm-map}?
| +--ro source-addr ssm-map-ipv6-addr-type
| +--ro group-policy string
+--ro static-group* [group source-addr] {intf-static-group}?
| +--ro group inet:ipv6-address
| +--ro source-addr source-ipv6-addr-type
+--ro oper-status? enumeration
+--ro querier? inet:ipv6-address
+--ro joined-group* inet:ipv6-address {intf-join-group}?
+--ro group* [address] +--ro group* [address]
+--ro address inet:ipv6-address +--ro address inet:ipv6-address
+--ro expire? uint32 +--ro expire? uint32
+--ro filter-mode? enumeration +--ro filter-mode? enumeration
+--ro host-count? uint32 +--ro host-count? uint32
+--ro up-time? uint32 +--ro up-time? uint32
+--ro host* inet:ipv6-address +--ro host* inet:ipv6-address
+--ro last-reporter? inet:ipv6-address +--ro last-reporter? inet:ipv6-address
+--ro source* [address] +--ro source* [address]
+--ro address inet:ipv6-address +--ro address inet:ipv6-address
+--ro expire? uint32 +--ro expire? uint32
+--ro up-time? uint32 +--ro up-time? uint32
+--ro last-reporter? inet:ipv6-address +--ro last-reporter? inet:ipv6-address
3.3. IGMP and MLD RPC 3.3. IGMP and MLD RPC
IGMP and MLD RPC clears the specified IGMP and MLD group membership.
rpcs: rpcs:
+---x clear-igmp-groups {rpc-clear-groups}? +---x clear-igmp-groups {rpc-clear-groups}?
| +---w input | +---w input
| +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/igmp/interfaces/interface/interface-name | +---w interface? string
| +---w group? inet:ipv4-address | +---w group? inet:ipv4-address
| +---w source? inet:ipv4-address | +---w source? inet:ipv4-address
+---x clear-mld-groups {rpc-clear-groups}? +---x clear-mld-groups {rpc-clear-groups}?
+---w input +---w input
+---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/mld/interfaces/interface/interface-name +---w interface? string
+---w group? inet:ipv6-address +---w group? inet:ipv6-address
+---w source? inet:ipv6-address +---w source? inet:ipv6-address
4. IGMP and MLD YANG Modules 4. IGMP and MLD YANG Modules
<CODE BEGINS> file "ietf-igmp-mld@2017-06-30.yang"
module ietf-igmp-mld { <CODE BEGINS> file "ietf-igmp-mld@2017-09-19.yang"
module ietf-igmp-mld {
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld";
// replace with IANA namespace when assigned // replace with IANA namespace when assigned
prefix igmp-mld; prefix igmp-mld;
import ietf-inet-types { import ietf-inet-types {
prefix "inet"; prefix "inet";
} }
import ietf-yang-types { import ietf-yang-types {
prefix "yang"; prefix "yang";
} }
import ietf-routing { import ietf-routing-2 {
prefix "rt"; prefix "rt";
} }
import ietf-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
import ietf-ip { import ietf-ip {
prefix ip; prefix ip;
} }
skipping to change at page 14, line 27 skipping to change at page 10, line 9
Editor: Pete McAllister Editor: Pete McAllister
<mailto:pete.mcallister@metaswitch.com> <mailto:pete.mcallister@metaswitch.com>
Editor: Anish Peter Editor: Anish Peter
<mailto:anish.ietf@gmail.com>"; <mailto:anish.ietf@gmail.com>";
description description
"The module defines a collection of YANG definitions common for "The module defines a collection of YANG definitions common for
IGMP and MLD."; IGMP and MLD.";
revision 2017-06-30 { revision 2017-09-19 {
description description
"Updated for model description and errata."; "Updated yang data model for NMDA version and errata.";
reference reference
"RFC XXXX: A YANG Data Model for IGMP and MLD"; "RFC XXXX: A YANG Data Model for IGMP and MLD";
} }
/* /*
* Features * Features
*/ */
feature global-admin-enable { feature global-admin-enable {
description description
"Support global configuration to enable or disable protocol."; "Support global configuration to enable or disable protocol.";
skipping to change at page 15, line 13 skipping to change at page 10, line 44
feature global-max-groups { feature global-max-groups {
description description
"Support configuration of global max-groups."; "Support configuration of global max-groups.";
} }
feature intf-admin-enable { feature intf-admin-enable {
description description
"Support configuration of interface administrative enabling."; "Support configuration of interface administrative enabling.";
} }
feature intf-last-member-query-interval-extended {
description
"Support configuration of interface last member query interval
different value range.";
}
feature intf-query-interval-extended {
description
"Support configuration of interface query interval
different value range.";
}
feature intf-query-max-response-time-extended {
description
"Support configuration of interface query max response time
different value range.";
}
feature intf-robustness-variable-extended {
description
"Support configuration of interface robustness-variable
different value range.";
}
feature intf-immediate-leave { feature intf-immediate-leave {
description description
"Support configuration of interface immediate-leave."; "Support configuration of interface immediate-leave.";
} }
feature intf-join-group { feature intf-join-group {
description description
"Support configuration of interface join-group."; "Support configuration of interface join-group.";
} }
feature intf-max-groups { feature intf-max-groups {
description description
"Support configuration of interface max-groups."; "Support configuration of interface max-groups.";
} }
feature intf-max-group-sources { feature intf-max-group-sources {
description description
"Support configuration of interface max-group-sources."; "Support configuration of interface max-group-sources.";
} }
skipping to change at page 18, line 38 skipping to change at page 13, line 46
leaf max-groups { leaf max-groups {
if-feature global-max-groups; if-feature global-max-groups;
type uint32; type uint32;
description description
"The maximum number of groups that IGMP "The maximum number of groups that IGMP
or MLD can join."; or MLD can join.";
} }
} // global-config-attributes } // global-config-attributes
grouping global-state-attributes { grouping global-state-attributes {
description "Global IGMP and MLD state attributes."; description "Global IGMP and MLD state attributes.";
leaf entries-count { leaf entries-count {
type uint32; type uint32;
config false;
description description
"The number of entries in IGMP or MLD."; "The number of entries in IGMP or MLD.";
} }
leaf groups-count { leaf groups-count {
type uint32; type uint32;
config false;
description description
"The number of groups that IGMP or MLD can join."; "The number of groups that IGMP or MLD can join.";
} }
container statistics { container statistics {
config false;
description "Global statistics."; description "Global statistics.";
leaf discontinuity-time { leaf discontinuity-time {
type yang:date-and-time; type yang:date-and-time;
description description
"The time on the most recent occasion at which any one "The time on the most recent occasion at which any one
or more of the statistic counters suffered a or more of the statistic counters suffered a
discontinuity. If no such discontinuities have occurred discontinuity. If no such discontinuities have occurred
since the last re-initialization of the local since the last re-initialization of the local
management subsystem, then this node contains the time management subsystem, then this node contains the time
the local management subsystem re-initialized itself."; the local management subsystem re-initialized itself.";
} }
skipping to change at page 20, line 29 skipping to change at page 15, line 40
description description
"The number of leave messages."; "The number of leave messages.";
} }
} // global-statistics-sent-received } // global-statistics-sent-received
grouping interfaces-config-attributes { grouping interfaces-config-attributes {
description description
"Configuration attributes applied to the interfaces whose "Configuration attributes applied to the interfaces whose
per interface attributes are not existing."; per interface attributes are not existing.";
choice last-member-query-interval { leaf last-member-query-interval {
description type uint16 {
"Different vendors can restrict different range to the range "1..65535";
Last Member Query Interval parameter.";
leaf last-member-query-interval-basic {
type uint16 {
range "1..65535";
}
units seconds;
default 1;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
}
leaf last-member-query-interval-extended {
if-feature intf-last-member-query-interval-extended;
type uint16;
units seconds;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
} }
units seconds;
default 1;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
} }
leaf max-groups-per-interface { leaf max-groups-per-interface {
if-feature intf-max-groups; if-feature intf-max-groups;
type uint32; type uint32;
description description
"The maximum number of groups that IGMP or MLD can join."; "The maximum number of groups that IGMP or MLD can join.";
} }
choice query-interval {
description
"Different vendors can restrict different range to the
Query Interval parameter.";
leaf query-interval-basic { leaf query-interval {
type uint16 { type uint16 {
range "1..31744"; range "1..31744";
}
units seconds;
default 125;
description
"The Query Interval is the interval between General Queries
sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
}
leaf query-interval-extended {
if-feature intf-query-interval-extended;
type uint16;
units seconds;
description
"The Query Interval is the interval between General Queries
sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
} }
} units seconds;
choice query-max-response-time { default 125;
description description
"Different vendors can restrict different range to the "The Query Interval is the interval between General Queries
Query maximum response time parameter."; sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
leaf query-max-response-time-basic { }
type uint16 {
range "1..65535";
}
units seconds;
default 10;
description
"Query maximum response time specifies the maximum time
allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
leaf query-max-response-time {
type uint16 {
range "1..65535";
} }
leaf query-max-response-time-extended { units seconds;
if-feature intf-query-max-response-time-extended; default 10;
type uint16; description
units seconds; "Query maximum response time specifies the maximum time
description allowed before sending a responding report.";
"Query maximum response time specifies the maximum time reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
}
} }
leaf require-router-alert { leaf require-router-alert {
if-feature intf-require-router-alert; if-feature intf-require-router-alert;
type boolean; type boolean;
default false; default false;
description description
"Protocol packets should contain router alert IP option."; "Protocol packets should contain router alert IP option.";
} }
choice robustness-variable {
description
"Different vendors can restrict different range to the
Robustness Variable parameter.";
leaf robustness-variable-basic { leaf robustness-variable {
type uint8 { type uint8 {
range "2..7"; range "2..7";
}
default 2;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
}
leaf robustness-variable-extended {
if-feature intf-robustness-variable-extended;
type uint8;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
default 2;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
} // interfaces-config-attributes } // interfaces-config-attributes
grouping interfaces-config-attributes-igmp {
description "interfaces configuration for IGMP.";
uses interfaces-config-attributes;
leaf version {
type uint8 {
range "1..3";
}
description "IGMP version.";
reference "RFC1112, RFC2236, RFC3376.";
}
}
grouping interfaces-config-attributes-mld {
description "interfaces configuration for MLD.";
uses interfaces-config-attributes;
leaf version {
type uint8 {
range "1..2";
}
description "MLD version.";
reference "RFC2710, RFC3810.";
}
}
grouping interface-config-attributes-igmp { grouping interface-config-attributes-igmp {
description "Per interface igmp configuration for IGMP."; description "Per interface configuration for IGMP.";
uses interface-config-attributes-igmp-mld; uses interface-config-attributes-igmp-mld;
leaf version { leaf version {
type uint8 { type uint8 {
range "1..3"; range "1..3";
} }
description "IGMP version."; description "IGMP version.";
reference "RFC1112, RFC2236, RFC3376."; reference "RFC1112, RFC2236, RFC3376.";
} }
leaf-list join-group { leaf-list join-group {
if-feature intf-join-group; if-feature intf-join-group;
type inet:ipv4-address; type inet:ipv4-address;
skipping to change at page 23, line 39 skipping to change at page 18, line 24
description description
"Name of the access policy used to filter IGMP "Name of the access policy used to filter IGMP
membership.A device can restrict the length membership.A device can restrict the length
and value of this name, possibly space and special and value of this name, possibly space and special
characters are not allowed. "; characters are not allowed. ";
} }
} }
list static-group { list static-group {
if-feature intf-static-group; if-feature intf-static-group;
key "group source-addr"; key "group-addr source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group-addr {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast group IP address."; "Multicast group IP address.";
} }
leaf source-addr { leaf source-addr {
type source-ipv4-addr-type; type source-ipv4-addr-type;
description description
"Multicast source IP address."; "Multicast source IP address.";
} }
} }
} // interface-config-attributes-igmp } // interface-config-attributes-igmp
grouping interface-config-attributes-igmp-mld { grouping interface-config-attributes-igmp-mld {
description description
"Per interface configuration for both IGMP and MLD."; "Per interface configuration for both IGMP and MLD.";
leaf enable { leaf enable {
if-feature intf-admin-enable; if-feature intf-admin-enable;
skipping to change at page 24, line 40 skipping to change at page 19, line 23
if-feature intf-immediate-leave; if-feature intf-immediate-leave;
type empty; type empty;
description description
"If present, IGMP or MLD perform an immediate leave upon "If present, IGMP or MLD perform an immediate leave upon
receiving an IGMPv2 or MLDv1 leave message. receiving an IGMPv2 or MLDv1 leave message.
If the router is IGMP-enabled or MLD-enabled, it sends an If the router is IGMP-enabled or MLD-enabled, it sends an
IGMP or MLD last member query with a last member query IGMP or MLD last member query with a last member query
response time. However, the router does not wait for response time. However, the router does not wait for
the response time before it prunes off the group."; the response time before it prunes off the group.";
} }
choice last-member-query-interval {
description
"Different vendors can restrict different range to the
Last Member Query Interval parameter.";
leaf last-member-query-interval-basic { leaf last-member-query-interval {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
}
units seconds;
default 1;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
}
leaf last-member-query-interval-extended {
if-feature intf-last-member-query-interval-extended;
type uint16;
units seconds;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
} }
units seconds;
default 1;
description
"Last Member Query Interval, which may be tuned to modify the
leave latency of the network.";
reference "RFC3376. Sec. 8.8.";
} }
leaf max-groups { leaf max-groups {
if-feature intf-max-groups; if-feature intf-max-groups;
type uint32; type uint32;
description description
"The maximum number of groups that IGMP ro MLD can join."; "The maximum number of groups that IGMP ro MLD can join.";
} }
leaf max-group-sources { leaf max-group-sources {
if-feature intf-max-group-sources; if-feature intf-max-group-sources;
type uint32; type uint32;
description description
skipping to change at page 25, line 29 skipping to change at page 19, line 48
type uint32; type uint32;
description description
"The maximum number of groups that IGMP ro MLD can join."; "The maximum number of groups that IGMP ro MLD can join.";
} }
leaf max-group-sources { leaf max-group-sources {
if-feature intf-max-group-sources; if-feature intf-max-group-sources;
type uint32; type uint32;
description description
"The maximum number of group sources."; "The maximum number of group sources.";
} }
choice query-interval {
description
"Different vendors can restrict different range to the
Query Interval parameter.";
leaf query-interval-basic { leaf query-interval {
type uint16 { type uint16 {
range "1..31744"; range "1..31744";
}
units seconds;
default 125;
description
"The Query Interval is the interval between General Queries
sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
}
leaf query-interval-extended {
if-feature intf-query-interval-extended;
type uint16;
units seconds;
description
"The Query Interval is the interval between General Queries
sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
} }
units seconds;
} default 125;
choice query-max-response-time {
description description
"Different vendors can restrict different range to the "The Query Interval is the interval between General Queries
Query maximum response time parameter."; sent by the Querier.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
}
leaf query-max-response-time-basic { leaf query-max-response-time {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
}
units seconds;
default 10;
description
"Query maximum response time specifies the maximum time
allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
}
leaf query-max-response-time-extended {
if-feature intf-query-max-response-time-extended;
type uint16;
units seconds;
description
"Query maximum response time specifies the maximum time
allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
} }
units seconds;
default 10;
description
"Query maximum response time specifies the maximum time
allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
} }
leaf require-router-alert { leaf require-router-alert {
if-feature intf-require-router-alert; if-feature intf-require-router-alert;
type boolean; type boolean;
description description
"Protocol packets should contain router alert IP option."; "Protocol packets should contain router alert IP option.";
} }
choice robustness-variable {
description
"Different vendors can restrict different range to the
Robustness Variable parameter.";
leaf robustness-variable-basic { leaf robustness-variable {
type uint8 { type uint8 {
range "2..7"; range "2..7";
}
default 2;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
}
leaf robustness-variable-extended {
if-feature intf-robustness-variable-extended;
type uint8;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
default 2;
description
"Querier's Robustness Variable allows tuning for the expected
packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
leaf source-policy { leaf source-policy {
if-feature intf-source-policy; if-feature intf-source-policy;
type string; type string;
description description
"Name of the access policy used to filter sources. "Name of the access policy used to filter sources.
A device can restrict the length A device can restrict the length
and value of this name, possibly space and special and value of this name, possibly space and special
characters are not allowed."; characters are not allowed.";
} }
leaf verify-source-subnet { leaf verify-source-subnet {
skipping to change at page 27, line 32 skipping to change at page 21, line 13
if-feature intf-verify-source-subnet; if-feature intf-verify-source-subnet;
type empty; type empty;
description description
"If present, the interface accepts packets with matching "If present, the interface accepts packets with matching
source IP subnet only."; source IP subnet only.";
} }
} // interface-config-attributes-igmp-mld } // interface-config-attributes-igmp-mld
grouping interface-config-attributes-mld { grouping interface-config-attributes-mld {
description "Per interface mld configuration for MLD."; description "Per interface configuration for MLD.";
uses interface-config-attributes-igmp-mld; uses interface-config-attributes-igmp-mld;
leaf version { leaf version {
type uint8 { type uint8 {
range "1..2"; range "1..2";
} }
description "MLD version."; description "MLD version.";
reference "RFC2710, RFC3810."; reference "RFC2710, RFC3810.";
} }
skipping to change at page 28, line 40 skipping to change at page 22, line 21
} }
leaf source-addr { leaf source-addr {
type source-ipv6-addr-type; type source-ipv6-addr-type;
description description
"Multicast source IPv6 address."; "Multicast source IPv6 address.";
} }
} }
} // interface-config-attributes-mld } // interface-config-attributes-mld
grouping interface-state-attributes-igmp { grouping interface-state-attributes-igmp {
description description
"Per interface state attributes for IGMP."; "Per interface state attributes for IGMP.";
uses interface-state-attributes-igmp-mld; uses interface-state-attributes-igmp-mld;
leaf querier { leaf querier {
type inet:ipv4-address; type inet:ipv4-address;
config false;
description "The querier address in the subnet"; description "The querier address in the subnet";
} }
leaf-list joined-group { leaf-list joined-group {
if-feature intf-join-group; if-feature intf-join-group;
type inet:ipv4-address; type inet:ipv4-address;
config false;
description description
"The routers that joined this multicast group."; "The routers that joined this multicast group.";
} }
list group { list group {
key "address"; key "address";
config false;
description description
"Multicast group membership information "Multicast group membership information
that joined on the interface."; that joined on the interface.";
leaf address { leaf address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast group address."; "Multicast group address.";
} }
uses interface-state-group-attributes-igmp-mld; uses interface-state-group-attributes-igmp-mld;
skipping to change at page 30, line 19 skipping to change at page 24, line 4
type enumeration { type enumeration {
enum up { enum up {
description description
"Ready to pass packets."; "Ready to pass packets.";
} }
enum down { enum down {
description description
"The interface does not pass any packets."; "The interface does not pass any packets.";
} }
} }
config false;
description description
"interface up or down state for IGMP or MLD protocol"; "interface up or down state for IGMP or MLD protocol";
} }
} // interface-config-attributes-igmp-mld } // interface-config-attributes-igmp-mld
grouping interface-state-attributes-mld { grouping interface-state-attributes-mld {
description description
"Per interface state attributes for MLD."; "Per interface state attributes for MLD.";
uses interface-state-attributes-igmp-mld; uses interface-state-attributes-igmp-mld;
leaf querier { leaf querier {
type inet:ipv6-address; type inet:ipv6-address;
config false;
description description
"The querier address in the subnet."; "The querier address in the subnet.";
} }
leaf-list joined-group { leaf-list joined-group {
if-feature intf-join-group; if-feature intf-join-group;
type inet:ipv6-address; type inet:ipv6-address;
config false;
description description
"The routers that joined this multicast group."; "The routers that joined this multicast group.";
} }
list group { list group {
key "address"; key "address";
config false;
description description
"Multicast group membership information "Multicast group membership information
that joined on the interface."; that joined on the interface.";
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast group address."; "Multicast group address.";
} }
uses interface-state-group-attributes-igmp-mld; uses interface-state-group-attributes-igmp-mld;
skipping to change at page 33, line 4 skipping to change at page 26, line 43
description description
"The time left before multicast source-group state expires."; "The time left before multicast source-group state expires.";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
description description
"The elapsed time since the device created multicast "The elapsed time since the device created multicast
source-group record."; source-group record.";
} }
} // interface-state-source-attributes-igmp-mld } // interface-state-source-attributes-igmp-mld
/* /*
* Configuration data nodes * Configuration and Operational state data nodes (NMDA version)
*/ */
augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol"
{ {
description description
"IGMP augmentation to routing control plane protocol configuration."; "IGMP augmentation to routing control plane protocol
configuration and state.";
container igmp {
description
"IGMP configuration data.";
container global {
description
"Global attributes.";
uses global-config-attributes;
}
container interfaces {
description
"Containing a list of interfaces.";
uses interfaces-config-attributes {
if-feature global-interface-config;
}
leaf version {
type uint8 {
range "1..3";
}
description "IGMP version.";
reference "RFC1112, RFC2236, RFC3376.";
}
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" {
description
"The interface must have IPv4 enabled.";
}
description
"Reference to an entry in the global interface
list.";
}
uses interface-config-attributes-igmp {
if-feature per-interface-config;
}
} // interface
} // interfaces
} // igmp
}//augment
augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol"
{
description
"MLD augmentation to routing control plane protocol configuration.";
container mld {
description
"MLD configuration data.";
container global {
description
"Global attributes.";
uses global-config-attributes;
}
container interfaces {
description
"Containing a list of interfaces.";
uses interfaces-config-attributes {
if-feature global-interface-config;
}
leaf version {
type uint8 {
range "1..2";
}
description "MLD version.";
reference "RFC2710,RFC3810.";
}
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" {
description
"The interface must have IPv6 enabled.";
}
description
"Reference to an entry in the global interface
list.";
}
uses interface-config-attributes-mld {
if-feature per-interface-config;
}
} // interface
} // interfaces
} // mld
} // augment
/*
* Operational state data nodes
*/
augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol"
{
description
"IGMP augmentation to routing control plane protocol state.";
container igmp { container igmp {
description description
"IGMP operational state data."; "IGMP operational state data.";
container global { container global {
description description
"Global attributes."; "Global attributes.";
uses global-config-attributes; uses global-config-attributes;
uses global-state-attributes; uses global-state-attributes;
} }
container interfaces { container interfaces {
description description
"Containing a list of interfaces."; "Containing a list of interfaces.";
uses interfaces-config-attributes { uses interfaces-config-attributes-igmp {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface-name"; key "interface-name";
description description
"List of IGMP interfaces."; "List of IGMP interfaces.";
leaf interface-name { leaf interface-name {
type if:interface-ref; type if:interface-ref;
must "/if:interfaces/if:interface[if:name = current()]/" must "/if:interfaces/if:interface[if:name = current()]/"
skipping to change at page 36, line 4 skipping to change at page 27, line 34
list interface { list interface {
key "interface-name"; key "interface-name";
description description
"List of IGMP interfaces."; "List of IGMP interfaces.";
leaf interface-name { leaf interface-name {
type if:interface-ref; type if:interface-ref;
must "/if:interfaces/if:interface[if:name = current()]/" must "/if:interfaces/if:interface[if:name = current()]/"
+ "ip:ipv4" { + "ip:ipv4" {
description description
"The interface must have IPv4 enabled."; "The interface must have IPv4 enabled.";
} }
description description
"Reference to an entry in the global interface "Reference to an entry in the global interface list.";
list.";
} }
uses interface-config-attributes-igmp { uses interface-config-attributes-igmp {
if-feature per-interface-config; if-feature per-interface-config;
} }
uses interface-state-attributes-igmp; uses interface-state-attributes-igmp;
} // interface } // interface
} // interfaces } // interfaces
} // igmp } // igmp
}//augment }//augment
augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol" augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol"
{ {
description description
"MLD augmentation to routing control plane protocol state."; "MLD augmentation to routing control plane protocol
configuration and state.";
container mld { container mld {
description description
"MLD operational state data."; "MLD operational state data.";
container global { container global {
description description
"Global attributes."; "Global attributes.";
uses global-config-attributes; uses global-config-attributes;
uses global-state-attributes; uses global-state-attributes;
} }
container interfaces { container interfaces {
description description
"Containing a list of interfaces."; "Containing a list of interfaces.";
uses interfaces-config-attributes { uses interfaces-config-attributes-mld {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface-name"; key "interface-name";
description description
"List of MLD interfaces."; "List of MLD interfaces.";
leaf interface-name { leaf interface-name {
type if:interface-ref; type if:interface-ref;
must "/if:interfaces/if:interface[if:name = current()]/" must "/if:interfaces/if:interface[if:name = current()]/"
+ "ip:ipv6" { + "ip:ipv6" {
description description
"The interface must have IPv6 enabled."; "The interface must have IPv6 enabled.";
} }
description description
"Reference to an entry in the global interface "Reference to an entry in the global interface list.";
list.";
} }
uses interface-config-attributes-mld { uses interface-config-attributes-mld {
if-feature per-interface-config; if-feature per-interface-config;
} }
uses interface-state-attributes-mld; uses interface-state-attributes-mld;
} // interface } // interface
} // interfaces } // interfaces
} // mld } // mld
} // augment } // augment
/* /*
* RPCs * RPCs
*/ */
rpc clear-igmp-groups { rpc clear-igmp-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified IGMP cache entries."; "Clears the specified IGMP cache entries.";
input { input {
leaf interface { leaf interface {
type leafref { type string;
path "/rt:routing/rt:control-plane-protocols"
+ "/rt:control-plane-protocol/"
+ "igmp/interfaces/interface/"
+ "interface-name";
}
description description
"Name of the IGMP interface. "Name of the IGMP interface.
If it is not specified, groups from all interfaces are If it is not specified, groups from all interfaces are
cleared."; cleared.";
} }
leaf group { leaf group {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast group IPv4 address. "Multicast group IPv4 address.
If it is not specified, all IGMP group entries are If it is not specified, all IGMP group entries are
skipping to change at page 38, line 4 skipping to change at page 29, line 28
cleared."; cleared.";
} }
leaf source { leaf source {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast source IPv4 address. "Multicast source IPv4 address.
If it is not specified, all IGMP source-group entries are If it is not specified, all IGMP source-group entries are
cleared."; cleared.";
} }
} }
} // rpc clear-igmp-groups } // rpc clear-igmp-groups
rpc clear-mld-groups { rpc clear-mld-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified MLD cache entires."; "Clears the specified MLD cache entires.";
input { input {
leaf interface { leaf interface {
type leafref { type string;
path "/rt:routing/rt:control-plane-protocols"
+ "/rt:control-plane-protocol/"
+ "mld/interfaces/interface/"
+ "interface-name";
}
description description
"Name of the MLD interface. "Name of the MLD interface.
If it is not specified, groups from all interfaces are If it is not specified, groups from all interfaces are
cleared."; cleared.";
} }
leaf group { leaf group {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast group IPv6 address. "Multicast group IPv6 address.
If it is not specified, all MLD group entries are If it is not specified, all MLD group entries are
skipping to change at page 40, line 5 skipping to change at page 31, line 19
7.1. Normative References 7.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997. Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for
the Network Configuration Protocol (NETCONF)", RFC 6020, the Network Configuration Protocol (NETCONF)", RFC 6020,
October 2010 October 2010
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
Data Model Documents", RFC 6087, January 2011
[RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed.,
and A. Bierman, Ed., "Network Configuration Protocol and A. Bierman, Ed., "Network Configuration Protocol
(NETCONF)", RFC 6241, June 2011 (NETCONF)", RFC 6241, June 2011
[RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language",
RFC 7950, August 2016 RFC 7950, August 2016
[RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing
Management", RFC 8022, November 2016 Management", RFC 8022, November 2016
[I-D.dsdt-nmda-guidelines] M. Bjorklund, J. Schoenwaelder, P.
Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module
Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017
[draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data
Model for Interface Management", draft-bjorklund-netmod-
rfc7223bis-00, August 2017
[draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data
Model for IP Management", draft-bjorklund-netmod-
rfc7277bis-00, August 2017
[I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors
and Reviewers of YANG Data Model Documents", draft-ietf-
netmod-rfc6087bis-14, September 2017
[I-D.acee-netmod-rfc8022bis] L. Lhotka, A. Lindem and Y.Qu, "A YANG
Data Model for Routing Management (NDMA Version)", draft-
acee-netmod-rfc8022bis-02, September 2017
7.2. Informative References 7.2. Informative References
[RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5,
RFC 1112, August 1989. RFC 1112, August 1989.
[RFC2236] Fenner, W., "Internet Group Management Protocol, Version [RFC2236] Fenner, W., "Internet Group Management Protocol, Version
2", RFC 2236, November 1997. 2", RFC 2236, November 1997.
[RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast
Listener Discovery (MLD) for IPv6", RFC 2710, October Listener Discovery (MLD) for IPv6", RFC 2710, October
skipping to change at page 40, line 44 skipping to change at page 32, line 34
[RFC4541] M. Christensen, K. Kimball and F. Solensky, [RFC4541] M. Christensen, K. Kimball and F. Solensky,
"Considerations for Internet Group Management Protocol "Considerations for Internet Group Management Protocol
(IGMP) and Multicast Listener Discovery (MLD) Snooping (IGMP) and Multicast Listener Discovery (MLD) Snooping
Switches", RFC 4541, May 2006. Switches", RFC 4541, May 2006.
[RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet
Group Management Protocol (IGMP) / Multicast Listener Group Management Protocol (IGMP) / Multicast Listener
Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD
Proxying")", RFC 4605, August 2006. Proxying")", RFC 4605, August 2006.
[RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG
Data Model Documents", RFC 6087, January 2011
[I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors
and Reviewers of YANG Data Model Documents", draft-ietf-
netmod-rfc6087bis-12(work in progress), March 2017.
8. Acknowledgments 8. Acknowledgments
The authors would like to thank Steve Baillargeon, Hu Fangwei, The authors would like to thank Steve Baillargeon, Hu Fangwei,
Robert Kebler, Tanmoy Kundu, Liu Yisong, and Stig Venaas for their Robert Kebler, Tanmoy Kundu, Liu Yisong, and Stig Venaas for their
valuable contributions. valuable contributions.
Authors' Addresses Authors' Addresses
Xufeng Liu Xufeng Liu
Jabil Jabil
 End of changes. 96 change blocks. 
702 lines changed or deleted 293 lines changed or added

This html diff was produced by rfcdiff 1.45. The latest version is available from http://tools.ietf.org/tools/rfcdiff/