draft-ietf-pim-igmp-mld-yang-02.txt   draft-ietf-pim-igmp-mld-yang-03.txt 
PIM Working Group X. Liu PIM Working Group X. Liu
Internet-Draft Ericsson Internet-Draft Jabil
Intended Status: Standard Track F. Guo Intended Status: Standard Track F. Guo
Expires: August 8, 2017 Huawei Expires: September 13, 2017 Huawei
M. Sivakumar M. Sivakumar
Cisco Cisco
P. McAllister P. McAllister
Metaswitch Networks Metaswitch Networks
A. Peter A. Peter
Juniper Networks Juniper Networks
February 7, 2017 March 13, 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-02 draft-ietf-pim-igmp-mld-yang-03
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 August 8, 2017. This Internet-Draft will expire on September 13, 2017.
Copyright Notice Copyright Notice
Copyright (c) 2016 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
carefully, as they describe your rights and restrictions with carefully, as they describe your rights and restrictions with
respect to this document. Code Components extracted from this respect to this document. Code Components extracted from this
document must include Simplified BSD License text as described in document must include Simplified BSD License text as described in
Section 4.e of the Trust Legal Provisions and are provided without Section 4.e of the Trust Legal Provisions and are provided without
skipping to change at page 2, line 19 skipping to change at page 2, line 19
Abstract Abstract
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. Multicast Listener Discovery (MLD) devices.
Table of Contents Table of Contents
1. Introduction ................................................ 2 1. Introduction ................................................ 2
1.1. Requirements Languag ................................... 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 and MLD Configuration.............................. 4
3.2. IGMP and MLD Operational State.......................... 6 3.2. IGMP and MLD Operational State.......................... 8
3.3. IGMP and MLD RPC....................................... 10 3.3. IGMP and MLD RPC....................................... 12
4. IGMP and MLD YANG Modules................................... 10 4. IGMP and MLD YANG Modules................................... 13
5. Security Considerations..................................... 31 5. Security Considerations..................................... 38
6. IANA Considerations ........................................ 31 6. IANA Considerations ........................................ 38
7. References ................................................. 31 7. References ................................................. 39
7.1. Normative References................................... 31 7.1. Normative References................................... 39
7.2. Informative References................................. 32 7.2. Informative References................................. 40
8. Acknowledgments ............................................ 32 8. Acknowledgments ............................................ 40
1. Introduction 1. Introduction
YANG [RFC6020] [RFC6087] is a data definition language that was YANG [RFC6020] [RFC6087] 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 draft YANG data model that can be used to This document defines a draft 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
skipping to change at page 3, line 26 skipping to change at page 3, line 26
This draft employs YANG tree diagrams, which are explained in [I- This draft 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[RFC3376] The model covers IGMPv1 [RFC1112], IGMPv2[RFC2236], IGMPv3[RFC3376]
and MLDv1[RFC2710], MLDv2[RFC3810]. and MLDv1[RFC2710], MLDv2[RFC3810].
The representation of some extension features of IGMP and MLD is not The representation of some of extension features is not specified in
specified in this draft of the data model. This model is being this draft of the data model. This model is being circulated in its
circulated in its current form for early oversight and review of the current form for early oversight and review of the basic hierarchy.
basic hierarchy.
The operational state fields and rpcs of this model can also The operational state fields and rpcs of this model can also be
be extended, and the structure of what has been written may be extended, though the structure of what has been written may be taken
taken as representative of the structure of the whole model. 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., these as IGMP/MLD Proxy[RFC4605] or IGMP/MLD Snooping[RFC4541] etc., these
will be specified in separate documents. 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 20 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, wide constant ranges (for example, timer For the same reason, basic constant ranges (for example, timer
maximum and minimum) will be used in the model. It is expected that maximum and minimum) will be used in the model. It is expected that
vendors will augment the model with any specific restrictions that vendors will augment the model with extended specific restrictions
might be required. Vendors may also extend the features list with that might be required. Vendors may also extend the features list
proprietary extensions. with proprietary extensions.
2.3. Position of address family in hierarchy 2.3. Position of address family in hierarchy
The current draft contains IGMP and MLD as separate schema branches The current draft contains IGMP and MLD as separate schema branches
in the structure. The reason for this is to make it easier for in the structure. The reason for this is to make it easier for
implementations which may optionally choose to support specific 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 and MLD Configuration
The IGMP and MLD modules define the routing-instance-wide The IGMP and MLD modules define the routing-control-plane-protocol-
configuration options in a three-level hierarchy as listed below: wide configuration options separately in a three-level hierarchy as
listed below:
Global level: IGMP MLD configuration attributes for the entire Global level: IGMP or MLD configuration attributes for the entire
routing instance routing system
Interface-global: IGMP MLD configuration attributes applicable to Interface-global: IGMP or MLD configuration attributes applicable
all interfaces IGMP MLD configuration attributes applied to to all interfaces IGMP MLD configuration attributes applied to
interfaces whose interface level attributes are not existing, with interfaces whose interface level attributes are not existing, with
same attributes' value for those same attributes' value for those
Interface-level: IGMP MLD configuration attributes specific to Interface-level: IGMP or MLD configuration attributes specific to
the given interface 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 The module structure also applies, where applicable, to the
operational state and notifications as well. operational state and notifications as well.
Our current direction is to agree to a routing-instance-centric Our current direction is to agree to a protocol-centric model , and
(VRF) model as opposed to protocol-centric mainly because it fits the IGMP and MLD model augments "/rt:routing/rt:control-plane-
well into the routing-instance model, and it is easier to map from protocols/ rt:control-plane-protocol" and would allow a single
the VRF-centric to the protocol-centric than the other way around protocol instance per VRF.
due to forward references.
The IGMP and MLD model augments "/rt:routing/rt:control-plane-
protocols" as opposed to augmenting "/rt:routing/rt:control-plane-
protocols/ rt:control-plane-protocol" as the latter would allow
multiple protocol instances per VRF, which does not make sense for
IGMP and MLD.
augment /rt:routing/rt:control-plane-protocols: 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 interfaces
| +--rw last-member-query-interval? uint16 +--rw (last-member-query-interval)?
| +--rw max-groups-per-interface? uint32 {intf-max-groups}? | +--:(last-member-query-interval-basic)
| +--rw query-interval? uint16 | | +--rw last-member-query-interval-basic? uint16
| +--rw query-max-response-time? uint16 | +--:(last-member-query-interval-extended)
| +--rw require-router-alert? boolean {intf-require-router-alert}? | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
| +--rw robustness-variable? uint8 +--rw max-groups-per-interface? uint32 {intf-max-groups}?
| +--rw version? uint8 +--rw (query-interval)?
| +--rw interface* [interface] | +--:(query-interval-basic)
| +--rw interface if:interface-ref | | +--rw query-interval-basic? uint16
| +--rw enable? boolean {intf-admin-enable}? | +--:(query-interval-extended)
| +--rw group-policy? string | +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
| +--rw immediate-leave? empty {intf-immediate-leave}? +--rw (query-max-response-time)?
| +--rw last-member-query-interval? uint16 | +--:(query-max-response-time-basic)
| +--rw max-groups? uint32 {intf-max-groups}? | | +--rw query-max-response-time-basic? uint16
| +--rw max-group-sources? uint32 {intf-max-group-sources}? | +--:(query-max-response-time-extended)
| +--rw query-interval? uint16 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
| +--rw query-max-response-time? uint16 +--rw require-router-alert? boolean {intf-require-router-alert}?
| +--rw require-router-alert? boolean {intf-require-router-alert}? +--rw (robustness-variable)?
| +--rw robustness-variable? uint8 | +--:(robustness-variable-basic)
| +--rw source-policy? string {intf-source-policy}? | | +--rw robustness-variable-basic? uint8
| +--rw verify-source-subnet? empty {intf-verify-source-subnet}? | +--:(robustness-variable-extended)
| +--rw version? uint8 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
| +--rw join-group* inet:ipv4-address {intf-join-group}? +--rw version? uint8
| +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? +--rw interface* [interface-name]
| | +--rw source-addr ssm-map-ipv4-addr-type +--rw interface-name if:interface-ref
| | +--rw group-policy string +--rw enable? boolean {intf-admin-enable}?
| +--rw static-group* [group source-addr] {intf-static-group}? +--rw group-policy? string
| +--rw group inet:ipv4-address +--rw immediate-leave? empty {intf-immediate-leave}?
| +--rw source-addr source-ipv4-addr-type +--rw (last-member-query-interval)?
+--rw mld | +--:(last-member-query-interval-basic)
+--rw global | | +--rw last-member-query-interval-basic? uint16
| +--rw enable? boolean {global-admin-enable}? | +--:(last-member-query-interval-extended)
| +--rw max-entries? uint32 {global-max-entries}? | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
| +--rw max-groups? uint32 {global-max-groups}? +--rw max-groups? uint32 {intf-max-groups}?
+--rw interfaces +--rw max-group-sources? uint32 {intf-max-group-sources}?
+--rw last-member-query-interval? uint16 +--rw (query-interval)?
+--rw max-groups-per-interface? uint32 {intf-max-groups}? | +--:(query-interval-basic)
+--rw query-interval? uint16 | | +--rw query-interval-basic? uint16
+--rw query-max-response-time? uint16 | +--:(query-interval-extended)
+--rw require-router-alert? boolean {intf-require-router-alert}? | +--rw query-interval-extended? uint16 {intf-query-interval-extended}?
+--rw robustness-variable? uint8 +--rw (query-max-response-time)?
+--rw version? uint8 | +--:(query-max-response-time-basic)
+--rw interface* [interface] | | +--rw query-max-response-time-basic? uint16
+--rw interface if:interface-ref | +--:(query-max-response-time-extended)
+--rw enable? boolean {intf-admin-enable}? | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
+--rw group-policy? string +--rw require-router-alert? boolean {intf-require-router-alert}?
+--rw immediate-leave? empty {intf-immediate-leave}? +--rw (robustness-variable)?
+--rw last-member-query-interval? uint16 | +--:(robustness-variable-basic)
+--rw max-groups? uint32 {intf-max-groups}? | | +--rw robustness-variable-basic? uint8
+--rw max-group-sources? uint32 {intf-max-group-sources}? | +--:(robustness-variable-extended)
+--rw query-interval? uint16 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
+--rw query-max-response-time? uint16 +--rw source-policy? string {intf-source-policy}?
+--rw require-router-alert? boolean {intf-require-router-alert}? +--rw verify-source-subnet? empty {intf-verify-source-subnet}?
+--rw robustness-variable? uint8 +--rw version? uint8
+--rw source-policy? string {intf-source-policy}? +--rw join-group* inet:ipv4-address {intf-join-group}?
+--rw verify-source-subnet? empty {intf-verify-source-subnet}? +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}?
+--rw version? uint8 | +--rw source-addr ssm-map-ipv4-addr-type
+--rw join-group* inet:ipv6-address {intf-join-group}? | +--rw group-policy string
+--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? +--rw static-group* [group source-addr] {intf-static-group}?
| +--rw source-addr ssm-map-ipv6-addr-type +--rw group inet:ipv4-address
| +--rw group-policy string +--rw source-addr source-ipv4-addr-type
+--rw static-group* [group source-addr] {intf-static-group}? augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw group inet:ipv6-address +--rw mld
+--rw source-addr source-ipv6-addr-type +--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 3.2. IGMP and MLD Operational State
The IGMP and MLD module contains operational state information also The IGMP or MLD module contains operational state information also
in a three-level hierarchy as mentioned earlier. in a three-level hierarchy as mentioned earlier and separately
listed as below.
Global level: IGMP MLD operational state attributes for the Global level: IGMP or MLD operational state attributes for the
entire routing instance entire routing system
Interface-global: IGMP MLD interface level operational state
Interface-global: IGMP or MLD interface level operational state
attributes applied to interfaces whose interface level attributes do attributes applied to interfaces whose interface level attributes do
not exist, with same attributes' value for those interfaces not exist, with same attributes' value for those interfaces
Interface-specific: IGMP MLD operational state attributes Interface-specific: IGMP or MLD operational state attributes
specific to the given interface. specific to the given interface.
augment /rt:routing-state/rt:control-plane-protocols: augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol:
+--ro igmp +--ro igmp
| +--ro global +--ro global
| | +--ro enable? boolean {global-admin-enable}? | +--ro enable? boolean {global-admin-enable}?
| | +--ro max-entries? uint32 {global-max-entries}? | +--ro max-entries? uint32 {global-max-entries}?
| | +--ro max-groups? uint32 {global-max-groups}? | +--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
| | | +--ro too-short? yang:counter64 | | +--ro too-short? yang:counter64
| | +--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 +--ro interfaces
| +--ro last-member-query-interval? uint16 +--ro (last-member-query-interval)?
| +--ro max-groups-per-interface? uint32 {intf-max-groups}? | +--:(last-member-query-interval-basic)
| +--ro query-interval? uint16 | | +--ro last-member-query-interval-basic? uint16
| +--ro query-max-response-time? uint16 | +--:(last-member-query-interval-extended)
| +--ro require-router-alert? boolean {intf-require-router-alert}? | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
| +--ro robustness-variable? uint8 +--ro max-groups-per-interface? uint32 {intf-max-groups}?
| +--ro version? uint8 +--ro (query-interval)?
| +--ro interface* [interface] | +--:(query-interval-basic)
| +--ro interface if:interface-ref | | +--ro query-interval-basic? uint16
| +--ro enable? boolean {intf-admin-enable}? | +--:(query-interval-extended)
| +--ro group-policy? string | +--ro query-interval-extended? uint16 {intf-query-interval-extended}?
| +--ro immediate-leave? empty {intf-immediate-leave}? +--ro (query-max-response-time)?
| +--ro last-member-query-interval? uint16 | +--:(query-max-response-time-basic)
| +--ro max-groups? uint32 {intf-max-groups}? | | +--ro query-max-response-time-basic? uint16
| +--ro max-group-sources? uint32 {intf-max-group-source | +--:(query-max-response-time-extended)
| +--ro query-interval? uint16 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
| +--ro query-max-response-time? uint16 +--ro require-router-alert? boolean {intf-require-router-alert}?
| +--ro require-router-alert? boolean {intf-require-router-alert}? +--ro (robustness-variable)?
| +--ro robustness-variable? uint8 | +--:(robustness-variable-basic)
| +--ro source-policy? string {intf-source-policy}? | | +--ro robustness-variable-basic? uint8
| +--ro verify-source-subnet? empty {intf-verify-source-subnet}? | +--:(robustness-variable-extended)
| +--ro version? uint8 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
| +--ro join-group* inet:ipv4-address {intf-join-group}? +--ro version? uint8
| +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? +--ro interface* [interface-name]
| | +--ro source-addr ssm-map-ipv4-addr-type +--ro interface-name if:interface-ref
| | +--ro group-policy string +--ro enable? boolean {intf-admin-enable}?
| +--ro static-group* [group source-addr] {intf-static-group}? +--ro group-policy? string
| | +--ro group inet:ipv4-address +--ro immediate-leave? empty {intf-immediate-leave}?
| | +--ro source-addr source-ipv4-addr-type +--ro (last-member-query-interval)?
| +--ro oper-status? enumeration | +--:(last-member-query-interval-basic)
| +--ro dr? inet:ipv4-address | | +--ro last-member-query-interval-basic? uint16
| +--ro querier? inet:ipv4-address | +--:(last-member-query-interval-extended)
| +--ro joined-group* inet:ipv4-address {intf-join-group}? | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
| +--ro group* [address] +--ro max-groups? uint32 {intf-max-groups}?
| +--ro address inet:ipv4-address +--ro max-group-sources? uint32 {intf-max-group-sources}?
| +--ro expire? uint32 +--ro (query-interval)?
| +--ro filter-mode? enumeration | +--:(query-interval-basic)
| +--ro host-count? uint32 | | +--ro query-interval-basic? uint16
| +--ro up-time? uint32 | +--:(query-interval-extended)
| +--ro host* inet:ipv4-address | +--ro query-interval-extended? uint16 {intf-query-interval-extended}?
| +--ro last-reporter? inet:ipv4-address +--ro (query-max-response-time)?
| +--ro source* [address] | +--:(query-max-response-time-basic)
| +--ro address inet:ipv4-address | | +--ro query-max-response-time-basic? uint16
| +--ro expire? uint32 | +--:(query-max-response-time-extended)
| +--ro up-time? uint32 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}?
| +--ro last-reporter? inet:ipv4-address +--ro require-router-alert? boolean {intf-require-router-alert}?
+--ro mld +--ro (robustness-variable)?
+--ro global | +--:(robustness-variable-basic)
| +--ro enable? boolean {global-admin-enable}? | | +--ro robustness-variable-basic? uint8
| +--ro max-entries? uint32 {global-max-entries}? | +--:(robustness-variable-extended)
| +--ro max-groups? uint32 {global-max-groups}? | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}?
| +--ro entries-count? uint32 +--ro source-policy? string {intf-source-policy}?
| +--ro groups-count? uint32 +--ro verify-source-subnet? empty {intf-verify-source-subnet}?
| +--ro statistics +--ro version? uint8
| +--ro discontinuity-time? yang:date-and-time +--ro join-group* inet:ipv4-address {intf-join-group}?
| +--ro error +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}?
| | +--ro total? yang:counter64 | +--ro source-addr ssm-map-ipv4-addr-type
| | +--ro query? yang:counter64 | +--ro group-policy string
| | +--ro report? yang:counter64 +--ro static-group* [group source-addr] {intf-static-group}?
| | +--ro leave? yang:counter64 | +--ro group inet:ipv4-address
| | +--ro checksum? yang:counter64 | +--ro source-addr source-ipv4-addr-type
| | +--ro too-short? yang:counter64 +--ro oper-status? enumeration
| +--ro received +--ro querier? inet:ipv4-address
| | +--ro total? yang:counter64 +--ro joined-group* inet:ipv4-address {intf-join-group}?
| | +--ro query? yang:counter64 +--ro group* [address]
| | +--ro report? yang:counter64 +--ro address inet:ipv4-address
| | +--ro leave? yang:counter64 +--ro expire? uint32
| +--ro sent +--ro filter-mode? enumeration
| +--ro total? yang:counter64 +--ro host-count? uint32
| +--ro query? yang:counter64 +--ro up-time? uint32
| +--ro report? yang:counter64 +--ro host* inet:ipv4-address
| +--ro leave? yang:counter64 +--ro last-reporter? inet:ipv4-address
+--ro interfaces +--ro source* [address]
+--ro last-member-query-interval? uint16 +--ro address inet:ipv4-address
+--ro max-groups-per-interface? uint32 {intf-max-groups}? +--ro expire? uint32
+--ro query-interval? uint16 +--ro up-time? uint32
+--ro query-max-response-time? uint16 +--ro last-reporter? inet:ipv4-address
+--ro require-router-alert? boolean {intf-require-router-alert}? augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol:
+--ro robustness-variable? uint8 +--ro mld
+--ro version? uint8 +--ro global
+--ro interface* [interface] | +--ro enable? boolean {global-admin-enable}?
+--ro interface if:interface-ref | +--ro max-entries? uint32 {global-max-entries}?
+--ro enable? boolean {intf-admin-enable}? | +--ro max-groups? uint32 {global-max-groups}?
+--ro group-policy? string | +--ro entries-count? uint32
+--ro immediate-leave? empty {intf-immediate-leave}? | +--ro groups-count? uint32
+--ro last-member-query-interval? uint16 | +--ro statistics
+--ro max-groups? uint32 {intf-max-groups}? | +--ro discontinuity-time? yang:date-and-time
+--ro max-group-sources? uint32 {intf-max-group-sources}? | +--ro error
+--ro query-interval? uint16 | | +--ro total? yang:counter64
+--ro query-max-response-time? uint16 | | +--ro query? yang:counter64
+--ro require-router-alert? boolean {intf-require-router-alert}? | | +--ro report? yang:counter64
+--ro robustness-variable? uint8 | | +--ro leave? yang:counter64
+--ro source-policy? string {intf-source-policy}? | | +--ro checksum? yang:counter64
+--ro verify-source-subnet? empty {intf-verify-source-subnet}? | | +--ro too-short? yang:counter64
+--ro version? uint8 | +--ro received
+--ro join-group* inet:ipv6-address {intf-join-group}? | | +--ro total? yang:counter64
+--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? | | +--ro query? yang:counter64
| +--ro source-addr ssm-map-ipv6-addr-type | | +--ro report? yang:counter64
| +--ro group-policy string | | +--ro leave? yang:counter64
+--ro static-group* [group source-addr] {intf-static-group}? | +--ro sent
| +--ro group inet:ipv6-address | +--ro total? yang:counter64
| +--ro source-addr source-ipv6-addr-type | +--ro query? yang:counter64
+--ro oper-status? enumeration | +--ro report? yang:counter64
+--ro querier? inet:ipv6-address | +--ro leave? yang:counter64
+--ro joined-group* inet:ipv6-address {intf-join-group}? +--ro interfaces
+--ro group* [address] +--ro (last-member-query-interval)?
+--ro address inet:ipv6-address | +--:(last-member-query-interval-basic)
+--ro expire? uint32 | | +--ro last-member-query-interval-basic? uint16
+--ro filter-mode? enumeration | +--:(last-member-query-interval-extended)
+--ro host-count? uint32 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--ro up-time? uint32 +--ro max-groups-per-interface? uint32 {intf-max-groups}?
+--ro host* inet:ipv6-address +--ro (query-interval)?
+--ro last-reporter? inet:ipv6-address | +--:(query-interval-basic)
+--ro source* [address] | | +--ro query-interval-basic? uint16
+--ro address inet:ipv6-address | +--:(query-interval-extended)
+--ro expire? uint32 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}?
+--ro up-time? uint32 +--ro (query-max-response-time)?
+--ro last-reporter? inet:ipv6-address | +--:(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 version? uint8
+--ro interface* [interface-name]
+--ro interface-name if:interface-ref
+--ro enable? boolean {intf-admin-enable}?
+--ro group-policy? string
+--ro immediate-leave? empty {intf-immediate-leave}?
+--ro (last-member-query-interval)?
| +--:(last-member-query-interval-basic)
| | +--ro last-member-query-interval-basic? uint16
| +--:(last-member-query-interval-extended)
| +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}?
+--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 address inet:ipv6-address
+--ro expire? uint32
+--ro filter-mode? enumeration
+--ro host-count? uint32
+--ro up-time? uint32
+--ro host* inet:ipv6-address
+--ro last-reporter? inet:ipv6-address
+--ro source* [address]
+--ro address inet:ipv6-address
+--ro expire? uint32
+--ro up-time? uint32
+--ro last-reporter? inet:ipv6-address
3.3. IGMP and MLD RPC 3.3. IGMP and MLD RPC
rpcs: rpcs:
+---x clear-igmp-groups {rpc-clear-groups}? +---x clear-igmp-groups {rpc-clear-groups}?
| +---w input
| +---w interface? -> /rt:routing/control-plane-protocols/igmp/interfaces/interface/interface | +---w input
| +---w group? inet:ipv4-address | +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/igmp/interfaces/interface/interface-name
| +---w source? inet:ipv4-address | +---w group? inet:ipv4-address
+---x clear-mld-groups {rpc-clear-groups}? | +---w source? inet:ipv4-address
+---w input +---x clear-mld-groups {rpc-clear-groups}?
+---w input
+---w interface? -> /rt:routing/control-plane-protocols/mld/interfaces/interface/interface +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/mld/interfaces/interface/interface-name
+---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@2016-10-28.yang" <CODE BEGINS> file "ietf-igmp-mld@2017-03-13.yang"
module ietf-igmp-mld { 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 {
skipping to change at page 11, line 32 skipping to change at page 14, line 8
contact contact
"WG Web: <http://tools.ietf.org/wg/pim/> "WG Web: <http://tools.ietf.org/wg/pim/>
WG List: <mailto:pim@ietf.org> WG List: <mailto:pim@ietf.org>
WG Chair: Stig Venaas WG Chair: Stig Venaas
<mailto:stig@venaas.com> <mailto:stig@venaas.com>
WG Chair: Mike McBride WG Chair: Mike McBride
<mailto:mmcbride7@gmail.com> <mailto:mmcbride7@gmail.com>
Editors: "; Editor: Xufeng Liu
<mailto:Xufeng_Liu@jabil.com>
Editor: Feng Guo
<mailto:guofeng@huawei.com>
Editor: Mahesh Sivakumar
<mailto:masivaku@cisco.com>
Editor: Pete McAllister
<mailto:pete.mcallister@metaswitch.com>
Editor: Anish Peter
<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 2016-10-28 { revision 2017-03-13 {
description description
"Initial revision."; "Initial revision.";
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 {
skipping to change at page 12, line 24 skipping to change at page 15, line 13
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.";
} }
skipping to change at page 17, line 15 skipping to change at page 20, line 28
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 interfaces whose "Configuration attributes applied to interfaces whose
per interface attributes are not existing."; per interface attributes are not existing.";
leaf last-member-query-interval { choice last-member-query-interval {
type uint16 {
range "1..65535";
}
description description
"Last Member Query Interval, which may be tuned to modify the "Different vendors can restrict different range to the
leave latency of the network."; Last Member Query Interval parameter.";
reference "RFC3376. Sec. 8.8.";
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;
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 can join."; "The maximum number of groups that IGMP can join.";
} }
leaf query-interval { choice query-interval {
type uint16;
units seconds;
default 125;
description description
"The Query Interval is the interval between General Queries "Different vendors can restrict different range to the
sent by the Querier."; Query Interval parameter.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
leaf query-interval-basic {
type uint16 {
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;
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-max-response-time { choice query-max-response-time {
type uint16;
units seconds;
description description
"Query maximum response time specifies the maximum time "Different vendors can restrict different range to the
allowed before sending a responding report."; Query maximum response time parameter.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
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-extended {
if-feature intf-query-max-response-time-extended;
type uint16;
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;
default false;
description description
""; "Protocol packets should contain router alert IP option.";
} }
leaf robustness-variable { choice robustness-variable {
type uint8 {
range "2..7";
}
default 2;
description description
"Querier's Robustness Variable allows tuning for the expected "Different vendors can restrict different range to the
packet loss on a network."; Robustness Variable parameter.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
leaf robustness-variable-basic {
type uint8 {
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;
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 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.";
} }
} // interfaces-config-attributes } // interfaces-config-attributes
skipping to change at page 18, line 38 skipping to change at page 23, line 24
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;
description description
"The router joins this multicast group on the interface."; "The router joins this multicast group on the interface.";
} }
list ssm-map { list ssm-map {
if-feature intf-ssm-map; if-feature intf-ssm-map;
key "source-addr group-policy"; key "source-addr group-policy";
description ""; description "The policy for (*,G) mapping to (S,G).";
leaf source-addr { leaf source-addr {
type ssm-map-ipv4-addr-type; type ssm-map-ipv4-addr-type;
description description
"Multicast source IP address."; "Multicast source IP address.";
} }
leaf group-policy { leaf group-policy {
type string; type string;
description description
"Name of the access policy used to filter IGMP "Name of the access policy used to filter IGMP
membership."; membership.A device MAY restrict the length
and value of this name, possibly space and special
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 source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
skipping to change at page 19, line 29 skipping to change at page 24, line 17
} }
} // 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;
type boolean; type boolean;
default false;
description description
"true to enable IGMP on the interface; "true to enable IGMP on the interface;
false to disable IGMP on the interface."; false to disable IGMP on the interface.";
} }
leaf group-policy { leaf group-policy {
type string; type string;
description description
"Name of the access policy used to filter IGMP membership."; "Name of the access policy used to filter IGMP
membership.A device MAY restrict the length
and value of this name, possibly space and special
characters are not allowed.";
} }
leaf immediate-leave { leaf immediate-leave {
if-feature intf-immediate-leave; if-feature intf-immediate-leave;
type empty; type empty;
description description
"If present, IGMP perform an immediate leave upon receiving an "If present, IGMP perform an immediate leave upon receiving an
IGMP Version 2 (IGMPv2) leave message. IGMP Version 2 (IGMPv2) leave message.
If the router is IGMP-enabled, it sends an IGMP last member If the router is IGMP-enabled, it sends an IGMP last member
query with a last member query response time. However, the query with a last member query response time. However, the
router does not wait for the response time before it prunes router does not wait for the response time before it prunes
off the group."; off the group.";
} }
leaf last-member-query-interval { choice last-member-query-interval {
type uint16 {
range "1..65535";
}
description description
"Last Member Query Interval, which may be tuned to modify the "Different vendors can restrict different range to the
leave latency of the network."; Last Member Query Interval parameter.";
reference "RFC3376. Sec. 8.8.";
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;
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 can join."; "The maximum number of groups that IGMP 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.";
} }
leaf query-interval { choice query-interval {
type uint16;
units seconds;
default 125;
description description
"The Query Interval is the interval between General Queries "Different vendors can restrict different range to the
sent by the Querier."; Query Interval parameter.";
reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2.";
leaf query-interval-basic {
type uint16 {
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;
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-max-response-time { choice query-max-response-time {
type uint16;
units seconds;
description description
"Query maximum response time specifies the maximum time "Different vendors can restrict different range to the
allowed before sending a responding report."; Query maximum response time parameter.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
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-extended {
if-feature intf-query-max-response-time-extended;
type uint16;
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.";
} }
leaf robustness-variable { choice robustness-variable {
type uint8 {
range "2..7";
}
default 2;
description description
"Querier's Robustness Variable allows tuning for the expected "Different vendors can restrict different range to the
packet loss on a network."; Robustness Variable parameter.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
leaf robustness-variable-basic {
type uint8 {
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;
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 MAY restrict the length
and value of this name, possibly space and special
characters are not allowed.";
} }
leaf verify-source-subnet { leaf verify-source-subnet {
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.";
} }
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.";
} }
} // interface-config-attributes-igmp-mld } // interface-config-attributes-igmp-mld
grouping interface-config-attributes-mld { grouping interface-config-attributes-mld {
description "Per interface igmp configuration for mld."; description "Per interface mld configuration for MLD.";
uses interface-config-attributes-igmp-mld; uses interface-config-attributes-igmp-mld;
leaf-list join-group { leaf-list join-group {
if-feature intf-join-group; if-feature intf-join-group;
type inet:ipv6-address; type inet:ipv6-address;
description description
"The router joins this multicast group on the interface."; "The router joins this multicast group on the interface.";
} }
list ssm-map { list ssm-map {
if-feature intf-ssm-map; if-feature intf-ssm-map;
key "source-addr group-policy"; key "source-addr group-policy";
description ""; description "The policy for (*,G) mapping to (S,G).";
leaf source-addr { leaf source-addr {
type ssm-map-ipv6-addr-type; type ssm-map-ipv6-addr-type;
description description
"Multicast source IP address."; "Multicast source IPv6 address.";
} }
leaf group-policy { leaf group-policy {
type string; type string;
description description
"Name of the access policy used to filter IGMP "Name of the access policy used to filter MLD
membership."; membership.A device MAY restrict the length
and value of this name, possibly space and special
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 source-addr";
description description
"A static multicast route, (*,G) or (S,G)."; "A static multicast route, (*,G) or (S,G).";
leaf group { leaf group {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast group IP address."; "Multicast group IPv6 address.";
} }
leaf source-addr { leaf source-addr {
type source-ipv6-addr-type; type source-ipv6-addr-type;
description description
"Multicast source IP 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 dr {
type inet:ipv4-address;
description "";
}
leaf querier { leaf querier {
type inet:ipv4-address; type inet:ipv4-address;
description ""; 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;
description description
"The routers that joined this multicast group."; "The routers that joined this multicast group.";
} }
list group { list group {
key "address"; key "address";
description ""; description
"Multicast group membership information
that joined on the interface.";
leaf address { leaf address {
type inet:ipv4-address; type inet:ipv4-address;
description description
""; "Multicast group address.";
} }
uses interface-state-group-attributes-igmp-mld; uses interface-state-group-attributes-igmp-mld;
leaf-list host { leaf-list host {
type inet:ipv4-address; type inet:ipv4-address;
description description
""; "List of host address that
joined the multicast group";
} }
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description ""; description
"The last host address which has sent the
report to join the multicast group.";
} }
list source { list source {
key "address"; key "address";
description ""; description
"List of multicast source information
of the multicast group.";
leaf address { leaf address {
type inet:ipv4-address; type inet:ipv4-address;
description ""; description
"Multicast source address";
} }
uses interface-state-source-attributes-igmp-mld; uses interface-state-source-attributes-igmp-mld;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description ""; description
"The last host address which has sent the
report to join the multicast source and group.";
} }
} // list source } // list source
} // list group } // list group
} // interface-state-attributes-igmp } // interface-state-attributes-igmp
grouping interface-state-attributes-igmp-mld { grouping interface-state-attributes-igmp-mld {
description description
"Per interface state attributes for both IGMP and MLD."; "Per interface state attributes for both IGMP and MLD.";
leaf oper-status { leaf oper-status {
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.";
} }
} }
description ""; description
"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;
description ""; 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:ipv6-address; type inet:ipv6-address;
description description
"The routers that joined this multicast group."; "The routers that joined this multicast group.";
} }
list group { list group {
key "address"; key "address";
description ""; description
"Multicast group membership information
that joined on the interface.";
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description description
""; "Multicast group address.";
} }
uses interface-state-group-attributes-igmp-mld; uses interface-state-group-attributes-igmp-mld;
leaf-list host { leaf-list host {
type inet:ipv6-address; type inet:ipv6-address;
description description
""; "List of host address that
joined the multicast group";
} }
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description ""; description
"The last host address which has sent the
report to join the multicast group.";
} }
list source { list source {
key "address"; key "address";
description ""; description
"List of multicast source information
of the multicast group.";
leaf address { leaf address {
type inet:ipv6-address; type inet:ipv6-address;
description ""; description
"Multicast source address";
} }
uses interface-state-source-attributes-igmp-mld; uses interface-state-source-attributes-igmp-mld;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description ""; description
"The last host address which has sent the
report to join the multicast source and group.";
} }
} // list source } // list source
} // list group } // list group
} // interface-state-attributes-mld } // interface-state-attributes-mld
grouping interface-state-group-attributes-igmp-mld { grouping interface-state-group-attributes-igmp-mld {
description description
"Per interface state attributes for both IGMP and MLD "Per interface state attributes for both IGMP and MLD
groups."; groups.";
leaf expire { leaf expire {
skipping to change at page 25, line 17 skipping to change at page 31, line 53
} // interface-state-attributes-mld } // interface-state-attributes-mld
grouping interface-state-group-attributes-igmp-mld { grouping interface-state-group-attributes-igmp-mld {
description description
"Per interface state attributes for both IGMP and MLD "Per interface state attributes for both IGMP and MLD
groups."; groups.";
leaf expire { leaf expire {
type uint32; type uint32;
units seconds; units seconds;
description ""; description
"The time left before multicast group timeout.";
} }
leaf filter-mode { leaf filter-mode {
type enumeration { type enumeration {
enum "include" { enum "include" {
description 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" { enum "exclude" {
description 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.";
} }
} }
description ""; description
"Filter mode for a multicast group,
may be either include or exclude.";
} }
leaf host-count { leaf host-count {
type uint32; type uint32;
description ""; description
"The number of host address.";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
description ""; description
"The time after the device created multicast group record.";
} }
} // interface-state-group-attributes-igmp-mld } // interface-state-group-attributes-igmp-mld
grouping interface-state-source-attributes-igmp-mld { grouping interface-state-source-attributes-igmp-mld {
description description
"Per interface state attributes for both IGMP and MLD "Per interface state attributes for both IGMP and MLD
groups."; groups.";
leaf expire { leaf expire {
type uint32; type uint32;
units seconds; units seconds;
description ""; description
"The time left before multicast group timeout.";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
description ""; description
"The time after the device created multicast group record.";
} }
} // interface-state-source-attributes-igmp-mld } // interface-state-source-attributes-igmp-mld
/* /*
* Configuration data nodes * Configuration data nodes
*/ */
augment "/rt:routing/rt:control-plane-protocols" augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol"
{ {
description description
"IGMP and MLD augmentation to routing instance configuration."; "IGMP augmentation to routing control plane protocol configuration.";
container igmp { container igmp {
description description
"IGMP configuration data."; "IGMP configuration data.";
container global { container global {
description description
"Global attributes."; "Global attributes.";
uses global-config-attributes; uses global-config-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 {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface"; key "interface-name";
description description
"List of IGMP interfaces."; "List of IGMP interfaces.";
leaf interface { 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;
} }
} // interface } // interface
} // interfaces } // interfaces
} // igmp } // igmp
}//augment
augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol"
{
description
"MLD augmentation to routing control plane protocol configuration.";
container mld { container mld {
description description
"MLD configuration data."; "MLD configuration data.";
container global { container global {
description description
"Global attributes."; "Global attributes.";
uses global-config-attributes; uses global-config-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 {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface"; key "interface-name";
description description
"List of MLD interfaces."; "List of MLD interfaces.";
leaf interface { 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 IPv4 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;
} }
} // interface } // interface
} // interfaces } // interfaces
skipping to change at page 27, line 48 skipping to change at page 35, line 4
} }
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;
} }
} // interface } // interface
} // interfaces } // interfaces
} // mld } // mld
} // augment } // augment
/* /*
* Operational state data nodes * Operational state data nodes
*/ */
augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol"
augment "/rt:routing-state/rt:control-plane-protocols"
{ {
description description
"IGMP and MLD augmentation to routing instance state."; "IGMP augmentation to routing control plane protocol state.";
container igmp { container igmp {
description description
"IGMP configuration data."; "IGMP configuration 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;
skipping to change at page 28, line 30 skipping to change at page 35, line 36
container interfaces { container interfaces {
description description
"Containing a list of interfaces."; "Containing a list of interfaces.";
uses interfaces-config-attributes { uses interfaces-config-attributes {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface"; key "interface-name";
description description
"List of IGMP interfaces."; "List of IGMP interfaces.";
leaf interface { 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.";
} }
skipping to change at page 28, line 48 skipping to change at page 36, line 4
"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 "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol"
{
description
"MLD augmentation to routing control plane protocol state.";
container mld { container mld {
description description
"MLD configuration data."; "MLD configuration 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;
skipping to change at page 29, line 22 skipping to change at page 36, line 35
container interfaces { container interfaces {
description description
"Containing a list of interfaces."; "Containing a list of interfaces.";
uses interfaces-config-attributes { uses interfaces-config-attributes {
if-feature global-interface-config; if-feature global-interface-config;
} }
list interface { list interface {
key "interface"; key "interface-name";
description description
"List of MLD interfaces."; "List of MLD interfaces.";
leaf interface { 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 IPv4 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
skipping to change at page 30, line 8 skipping to change at page 37, line 20
* 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 tables."; "Clears the specified IGMP cache tables.";
input { input {
leaf interface { leaf interface {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols"
+ "/rt:control-plane-protocol/"
+ "igmp/interfaces/interface/" + "igmp/interfaces/interface/"
+ "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.
skipping to change at page 30, line 42 skipping to change at page 38, line 5
} // 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 tables."; "Clears the specified MLD cache tables.";
input { input {
leaf interface { leaf interface {
type leafref { type leafref {
path "/rt:routing/rt:control-plane-protocols/" path "/rt:routing/rt:control-plane-protocols"
+ "/rt:control-plane-protocol/"
+ "mld/interfaces/interface/" + "mld/interfaces/interface/"
+ "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.
skipping to change at page 31, line 35 skipping to change at page 38, line 49
The data model defined does not introduce any security implications. The data model defined does not introduce any security implications.
This draft does not change any underlying security issues inherent This draft does not change any underlying security issues inherent
in [RFC8022]. in [RFC8022].
6. IANA Considerations 6. IANA Considerations
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number (and remove this note). actual RFC number (and remove this note).
This document registers the following namespace URIs in the IETF XML This document registers the following namespace URIs in the IETF XML
registry [RFC3688]: registry [RFC3688]:
-------------------------------------------------------------------- --------------------------------------------------------------------
URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld
Registrant Contact: The IESG. Registrant Contact: The IESG.
XML: N/A, the requested URI is an XML namespace. XML: N/A, the requested URI is an XML namespace.
-------------------------------------------------------------------- --------------------------------------------------------------------
This document registers the following YANG modules in the YANG Module This document registers the following YANG modules in the YANG Module
Names registry [RFC7950]: Names registry [RFC7950]:
-------------------------------------------------------------------- --------------------------------------------------------------------
name: ietf-igmp-mld name: ietf-igmp-mld
namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld
prefix: igmp-mld prefix: igmp-mld
reference: RFC XXXX reference: RFC XXXX
-------------------------------------------------------------------- --------------------------------------------------------------------
7. References 7. References
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.
[RFC3688] Mealling, M., "The IETF XML Registry", BCP 81, RFC 3688,
DOI 10.17487/RFC3688, January 2004.
[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
[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, DOI 10.17487/RFC7950, 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, DOI 10.17487/RFC8022, November Management", RFC 8022, November 2016
2016.
[I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors
and Reviewers of YANG Data Model Documents", draft-ietf-
netmod-rfc6087bis-10 (work in progress), January 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
1999. 1999.
[RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
Thyagarajan, "Internet Group Management Protocol, Version Thyagarajan, "Internet Group Management Protocol, Version
3", RFC 3376, October 2002. 3", RFC 3376, October 2002.
[RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery
Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. Version 2 (MLDv2) for IPv6", RFC 3810, June 2004.
[RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet [RFC4541] M. Christensen, K. Kimball and F. Solensky,
Group Management Protocol Version 3 (IGMPv3) and Multicast "Considerations for Internet Group Management Protocol
Listener Discovery Protocol Version 2 (MLDv2) for Source- (IGMP) and Multicast Listener Discovery (MLD) Snooping
Specific Multicast", RFC 4604, August 2006. Switches", RFC 4541, May 2006.
[RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet
IP", RFC 4607, August 2006. Group Management Protocol (IGMP) / Multicast Listener
Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD
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
Ericsson Jabil
1595 Spring Hill Road, Suite 500 8281 Greensboro Drive, Suite 200
Vienna VA 22182 McLean VA 22102
USA USA
EMail: xufeng.liu@ericsson.com EMail: Xufeng_Liu@jabil.com
Feng Guo Feng Guo
Huawei Huawei
Huawei Bld., No.156 Beiqing Rd. Huawei Bld., No.156 Beiqing Rd.
Beijing 100095 Beijing 100095
China China
Email: guofeng@huawei.com Email: guofeng@huawei.com
Mahesh Sivakumar Mahesh Sivakumar
Cisco Systems, Inc. Cisco Systems, Inc.
510 McCarthy Blvd 510 McCarthy Boulevard
Milpitas, California 95035 Milpitas, California 95035
United States USA
Email: masivaku@cisco.com Email: masivaku@cisco.com
Pete McAllister Pete McAllister
Metaswitch Networks Metaswitch Networks
100 Church Street 100 Church Street
Enfield EN2 6BQ Enfield EN2 6BQ
UK UK
EMail: pete.mcallister@metaswitch.com EMail: pete.mcallister@metaswitch.com
Anish Peter Anish Peter
Juniper Networks Individual
Electra, Exora Business Park
Bangalore, KA 560103
India
EMail: anishp@juniper.net EMail: anish.ietf@gmail.com
 End of changes. 142 change blocks. 
433 lines changed or deleted 803 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/