draft-ietf-pim-igmp-mld-snooping-yang-00.txt   draft-ietf-pim-igmp-mld-snooping-yang-01.txt 
PIM Working Group H. Zhao PIM Working Group H. Zhao
Internet Draft Ericsson Internet Draft Ericsson
Intended status: Standards Track X. Liu Intended status: Standards Track X. Liu
Expires: August 7, 2018 Jabil Expires: August 23, 2018 Jabil
Y. Liu Y. Liu
Huawei Huawei
M. Sivakumar M. Sivakumar
Cisco Cisco
A. Peter A. Peter
Individual Individual
February 8, 2018 February 24, 2018
A Yang Data Model for IGMP and MLD Snooping A Yang Data Model for IGMP and MLD Snooping
draft-ietf-pim-igmp-mld-snooping-yang-00 draft-ietf-pim-igmp-mld-snooping-yang-01.txt
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) Snooping devices. Multicast Listener Discovery (MLD) Snooping devices.
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
skipping to change at page 1, line 45 skipping to change at page 1, line 45
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." 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 7, 2018. This Internet-Draft will expire on August 23, 2018.
Copyright Notice Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the Copyright (c) 2018 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 respect carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License. described in the Simplified BSD License.
Table of Contents Table of Contents
1. Introduction...................................................2 1. Introduction...................................................2
1.1. Terminology...............................................3 1.1. Terminology...............................................3
1.2. Tree Diagrams.............................................3 1.2. Tree Diagrams.............................................3
2. Design of Data Model...........................................3 2. Design of Data Model...........................................3
2.1. Overview..................................................4 2.1. Overview..................................................4
2.2. IGMP and MLD Snooping Instances...........................4 2.2. IGMP and MLD Snooping Instances...........................4
2.3. IGMP and MLD Snooping References.........................10 2.3. IGMP and MLD Snooping References..........................9
2.4. IGMP and MLD Snooping RPC................................13 2.4. Augment /if:interfaces/if:interface......................10
2.5. IGMP and MLD Snooping RPC................................12
3. IGMP and MLD Snooping YANG Module.............................13 3. IGMP and MLD Snooping YANG Module.............................13
4. Security Considerations.......................................42 4. Security Considerations.......................................42
5. IANA Considerations...........................................42 5. IANA Considerations...........................................42
6. Normative References..........................................42 6. Normative References..........................................43
1. Introduction 1. Introduction
This document defines a YANG [RFC6020] data model for the management This document defines a YANG [RFC6020] data model for the management
of Internet Group Management Protocol (IGMP) and Multicast Listener of Internet Group Management Protocol (IGMP) and Multicast Listener
Discovery (MLD) Snooping devices. Discovery (MLD) Snooping devices.
This data model follows the Guidelines for YANG Module Authors This data model follows the Guidelines for YANG Module Authors
NMDA)[draft-dsdt-nmda-guidelines-01]. The "Network Management NMDA)[draft-dsdt-nmda-guidelines-01]. The "Network Management
Datastore Architecture" (NMDA) adds the ability to inspect the Datastore Architecture" (NMDA) adds the ability to inspect the
skipping to change at page 4, line 37 skipping to change at page 4, line 37
Snooping. The attribute who could be read and written shows Snooping. The attribute who could be read and written shows
configuration data. The read-only attribute shows state data. The key configuration data. The read-only attribute shows state data. The key
attribute is name. attribute is name.
module: ietf-igmp-mld-snooping module: ietf-igmp-mld-snooping
+--rw igmp-snooping-instances +--rw igmp-snooping-instances
| +--rw igmp-snooping-instance* [name] | +--rw igmp-snooping-instance* [name]
| +--rw name string | +--rw name string
| +--rw id? uint32 | +--rw type? enumeration
| +--rw type? enumeration | +--rw enable? boolean {admin-enable}?
| +--rw enable? boolean {admin-enable}? | +--rw forwarding-mode? enumeration
| +--rw forwarding-mode? enumeration | +--rw explicit-tracking? boolean {explicit-tracking}?
| +--rw explicit-tracking? boolean {explicit-tracking}? | +--rw exclude-lite? boolean {exclude-lite}?
| +--rw exclude-lite? boolean {exclude-lite}? | +--rw send-query? boolean
| +--rw send-query? boolean
| +--rw fast-leave? empty {fast-leave}? | +--rw immediate-leave? empty {immediate-leave}?
| +--rw last-member-query-interval? uint16
| +--rw last-member-query-interval? uint16 | +--rw query-interval? uint16
| +--rw query-interval? uint16 | +--rw query-max-response-time? uint16
| +--rw query-max-response-time? uint16 | +--rw require-router-alert? boolean {require-router-
alert}?
| +--rw require-router-alert? boolean {require-router-alert}? | +--rw robustness-variable? uint8
| +--rw robustness-variable? uint8 | +--rw version? uint8
| +--rw version? uint8 | +--rw static-bridge-mrouter-interface* if:interface-ref {static-
mrouter-interface}?
| +--rw static-bridge-mrouter-interface* if:interface-ref {static-l2- | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static-
multicast-group}? mrouter-interface}?
| +--rw static-vpls-mrouter-interface* l2vpn-instance-pw-ref {static- | +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
l2-multicast-group}? {static-mrouter-interface}?
| +--rw querier-source? inet:ipv4-address | +--rw querier-source? inet:ipv4-address
| +--rw static-l2-multicast-group* [group source-addr] {static-l2- | +--rw static-l2-multicast-group* [group source-addr] {static-l2-
multicast-group}? multicast-group}?
| | +--rw group inet:ipv4-address | | +--rw group inet:ipv4-address
| | +--rw source-addr source-ipv4-addr-type | | +--rw source-addr source-ipv4-addr-type
| | +--rw bridge-outgoing-interface* if:interface-ref | | +--rw bridge-outgoing-interface* if:interface-ref
| | +--rw vpls-outgoing-ac* l2vpn-instance-ac-ref | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| | +--rw vpls-outgoing-pw* l2vpn-instance-pw-ref
| +--ro entries-count? uint32
| +--ro bridge-mrouter-interface* if:interface-ref
| +--ro vpls-mrouter-interface* l2vpn-instance-pw-ref
| +--ro group* [address]
| | +--ro address inet:ipv4-address
| | +--ro mac-address? yang:phys-address
| | +--ro expire? uint32
| | +--ro up-time? uint32
| | +--ro last-reporter? inet:ipv4-address
| | +--ro source* [address]
| | +--ro address inet:ipv4-address
| | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro vpls-outgoing-ac* l2vpn-instance-ac-ref
| | +--ro vpls-outgoing-pw* l2vpn-instance-pw-ref | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | +--ro up-time? uint32 | +--ro entries-count? uint32
| | +--ro expire? uint32 | +--ro bridge-mrouter-interface* if:interface-ref
| | +--ro host-count? uint32 {explicit-tracking}? | +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| | +--ro last-reporter? inet:ipv4-address | +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| | +--ro host* [host-address] {explicit-tracking}? | +--ro group* [address]
| | +--ro host-address inet:ipv4-address | +--ro address inet:ipv4-address
| | +--ro host-filter-mode? enumeration | +--ro mac-address? yang:phys-address
| +--ro expire? uint32
| +--ro statistics | +--ro up-time? uint32
| +--ro received | +--ro last-reporter? inet:ipv4-address
| | +--ro query? yang:counter64 | +--ro source* [address]
| | +--ro membership-report-v1? yang:counter64 | +--ro address inet:ipv4-address
| | +--ro membership-report-v2? yang:counter64 | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro membership-report-v3? yang:counter64 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| | +--ro leave? yang:counter64 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | +--ro pim? yang:counter64 | +--ro up-time? uint32
| +--ro sent
| +--ro query? yang:counter64 | +--ro expire? uint32
| +--ro membership-report-v1? yang:counter64 | +--ro host-count? uint32 {explicit-tracking}?
| +--ro membership-report-v2? yang:counter64 | +--ro last-reporter? inet:ipv4-address
| +--ro membership-report-v3? yang:counter64 | +--ro host* [host-address] {explicit-tracking}?
| +--ro leave? yang:counter64 | +--ro host-address inet:ipv4-address
| +--ro pim? yang:counter64 | +--ro host-filter-mode? enumeration
+--rw mld-snooping-instances +--rw mld-snooping-instances
| +--rw mld-snooping-instance* [name] | +--rw mld-snooping-instance* [name]
| +--rw name string | +--rw name string
| +--rw id? uint32 | +--rw type? enumeration
| +--rw type? enumeration | +--rw enable? boolean {admin-enable}?
| +--rw enable? boolean {admin-enable}? | +--rw forwarding-mode? enumeration
| +--rw forwarding-mode? enumeration | +--rw explicit-tracking? boolean {explicit-tracking}?
| +--rw explicit-tracking? boolean {explicit-tracking}? | +--rw exclude-lite? boolean {exclude-lite}?
| +--rw exclude-lite? boolean {exclude-lite}? | +--rw send-query? boolean
| +--rw send-query? boolean | +--rw immediate-leave? empty {immediate-leave}?
| +--rw last-member-query-interval? uint16
| +--rw fast-leave? empty {fast-leave}? | +--rw query-interval? uint16
| +--rw last-member-query-interval? uint16 | +--rw query-max-response-time? uint16
| +--rw query-interval? uint16 | +--rw require-router-alert? boolean {require-router-
alert}?
| +--rw query-max-response-time? uint16 | +--rw robustness-variable? uint8
| +--rw require-router-alert? boolean {require-router-alert}? | +--rw version? uint8
| +--rw robustness-variable? uint8 | +--rw static-bridge-mrouter-interface* if:interface-ref {static-
mrouter-interface}?
| +--rw version? uint8 | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref {static-
| +--rw static-bridge-mrouter-interface* if:interface-ref {static-l2- mrouter-interface}?
multicast-group}?
| +--rw static-vpls-mrouter-interface* l2vpn-instance-pw-ref {static- | +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
l2-multicast-group}? {static-mrouter-interface}?
| +--rw querier-source? inet:ipv6-address | +--rw querier-source? inet:ipv6-address
| +--rw static-l2-multicast-group* [group source-addr] {static-l2- | +--rw static-l2-multicast-group* [group source-addr] {static-l2-
multicast-group}? multicast-group}?
| | +--rw group inet:ipv6-address | | +--rw group inet:ipv6-address
| | +--rw source-addr source-ipv6-addr-type | | +--rw source-addr source-ipv6-addr-type
| | +--rw bridge-outgoing-interface* if:interface-ref | | +--rw bridge-outgoing-interface* if:interface-ref
| | +--rw vpls-outgoing-ac* l2vpn-instance-ac-ref | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| | +--rw vpls-outgoing-pw* l2vpn-instance-pw-ref
| +--ro entries-count? uint32
| +--ro bridge-mrouter-interface* if:interface-ref
| +--ro vpls-mrouter-interface* l2vpn-instance-pw-ref
| +--ro group* [address]
| | +--ro address inet:ipv6-address
| | +--ro mac-address? yang:phys-address
| | +--ro expire? uint32
| | +--ro up-time? uint32
| | +--ro last-reporter? inet:ipv6-address
| | +--ro source* [address]
| | +--ro address inet:ipv6-address
| | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro vpls-outgoing-ac* l2vpn-instance-ac-ref
| | +--ro vpls-outgoing-pw* l2vpn-instance-pw-ref
| | +--ro up-time? uint32 | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | +--ro expire? uint32 | +--ro entries-count? uint32
| | +--ro host-count? uint32 {explicit-tracking}? | +--ro bridge-mrouter-interface* if:interface-ref
| | +--ro last-reporter? inet:ipv6-address | +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| | +--ro host* [host-address] {explicit-tracking}? | +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| | +--ro host-address inet:ipv6-address | +--ro group* [address]
| | +--ro host-filter-mode? enumeration | +--ro address inet:ipv6-address
| +--ro statistics | +--ro mac-address? yang:phys-address
| +--ro expire? uint32
| +--ro received | +--ro up-time? uint32
| | +--ro query? yang:counter64 | +--ro last-reporter? inet:ipv6-address
| | +--ro membership-report-v1? yang:counter64 | +--ro source* [address]
| | +--ro membership-report-v2? yang:counter64 | +--ro address inet:ipv6-address
| | +--ro membership-report-v3? yang:counter64 | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro leave? yang:counter64 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| | +--ro pim? yang:counter64 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| +--ro sent | +--ro up-time? uint32
| +--ro query? yang:counter64 | +--ro expire? uint32
| +--ro membership-report-v1? yang:counter64 | +--ro host-count? uint32 {explicit-tracking}?
| +--ro membership-report-v2? yang:counter64 | +--ro last-reporter? inet:ipv6-address
| +--ro membership-report-v3? yang:counter64 | +--ro host* [host-address] {explicit-tracking}?
| +--ro leave? yang:counter64 | +--ro host-address inet:ipv6-address
| +--ro pim? yang:counter64 | +--ro host-filter-mode? Enumeration
2.3. IGMP and MLD Snooping References 2.3. IGMP and MLD Snooping References
The IGMP and MLD Snooping instance could be referenced in the scenario The IGMP and MLD Snooping instance could be referenced in the scenario
of bridge, VPLS to configure the IGMP and MLD Snooping. The name of the of bridge, L2VPN to configure the IGMP and MLD Snooping. The name of the
instance is the key attribute. instance is the key attribute.
The type of the instance indicates the scenario which is bridge or +--rw bridges
VPLS. When referenced in bridge, the id of instance means VLAN id.
When referenced in VPLS, the id means VSI id.
module: ietf-igmp-mld-snooping
...
+--rw bridges
| +--rw bridge* [name] | +--rw bridge* [name]
| +--rw name dot1qtypes:name-type | +--rw name name-type
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | +--rw igmp-snooping-instance? igmp-snooping-instance-ref
| +--rw mld-snooping-instance? mld-snooping-instance-ref | +--rw mld-snooping-instance? mld-snooping-instance-ref
| +--rw component* [name] | +--rw component* [name]
| +--rw name string | +--rw name string
| +--rw bridge-vlan | +--rw bridge-vlan
| +--rw vlan* [vid] | +--rw vlan* [vid]
| +--rw vid dot1qtypes:vlan-index-type | +--rw vid vlan-index-type
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | +--rw igmp-snooping-instance? igmp-snooping-instance-ref
| +--rw mld-snooping-instance? mld-snooping-instance-ref | +--rw mld-snooping-instance? mld-snooping-instance-ref
| +--rw interfaces
| +--rw interface* [name]
| +--rw name string
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref
| +--rw mld-snooping-instance? mld-snooping-instance-ref
+--rw l2vpn-instances +--rw l2vpn-instances
+--rw l2vpn-instance* [name] +--rw l2vpn-instance* [name]
+--rw name string +--rw name string
+--rw igmp-snooping-instance? igmp-snooping-instance-ref +--rw igmp-snooping-instance? igmp-snooping-instance-ref
+--rw mld-snooping-instance? mld-snooping-instance-ref +--rw mld-snooping-instance? mld-snooping-instance-ref
+--rw endpoint* [name] 2.4. Augment /if:interfaces/if:interface
+--rw name string Augment /if:interfaces/if:interface then add the IGMP MLD SNOOPING
related attributes under it. It includes enable, version, static-
mrouter-interface, etc.
+--rw igmp-snooping-instance? igmp-snooping-instance-ref augment /if:interfaces/if:interface:
+--rw mld-snooping-instance? mld-snooping-instance-ref +--rw igmp-mld-snooping
+--rw (ac-or-pw-or-redundancy-grp)? +--rw enable? boolean {admin-enable}?
+--:(ac) +--rw version? uint8
| +--rw ac* [name] +--rw type? enumeration
| +--rw name string +--rw static-mrouter-interface
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | +--rw (static-mrouter-interface)?
| +--rw mld-snooping-instance? mld-snooping-instance-ref | +--:(bridge)
+--:(pw) | | +--rw bridge-name? string
| +--rw pw* [name] | | +--rw vlan-id* uint32
| +--rw name string | +--:(l2vpn)
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | +--rw l2vpn-instance-name? string
| +--rw mld-snooping-instance? mld-snooping-instance-ref +--rw static-l2-multicast-group
+--:(redundancy-grp) | +--rw (static-l2-multicast-group)?
+--rw (primary) | +--:(bridge)
| +--:(primary-ac) | | +--rw bridgename? string
| | +--rw primary-ac
| | +--rw name? string | | +--rw bridge-group-v4* [address]
| | +--rw igmp-snooping-instance? igmp-snooping-instance-ref | | | +--rw address inet:ipv4-address
| | +--rw mld-snooping-instance? mld-snooping-instance-ref | | | +--rw source* inet:ipv4-address
| +--:(primary-pw) | | | +--rw vlan-id* uint32
| +--rw primary-pw* [name] | | +--rw bridge-group-v6* [address]
| | +--rw address inet:ipv6-address
| +--rw name string | | +--rw source* inet:ipv6-address
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | | +--rw vlan-id* uint32
| +--rw mld-snooping-instance? mld-snooping-instance-ref | +--:(l2vpn)
+--rw (backup)? | +--rw l2vpn-group-v4* [address]
+--:(backup-ac) | | +--rw address inet:ipv4-address
| +--rw backup-ac | | +--rw source* inet:ipv4-address
| +--rw name? string | | +--rw l2vpn-instance-name? string
| +--rw igmp-snooping-instance? igmp-snooping-instance-ref | +--rw l2vpn-group-v6* [address]
| +--rw mld-snooping-instance? mld-snooping-instance-ref | +--rw address inet:ipv6-address
+--:(backup-pw) | +--rw source* inet:ipv6-address
+--rw backup-pw* [name] | +--rw l2vpn-instance-name? string
+--rw name string +--ro statistics
+--rw igmp-snooping-instance? igmp-snooping-instance-ref +--ro received
+--rw mld-snooping-instance? mld-snooping-instance-ref | +--ro query? yang:counter64
2.4. IGMP and MLD Snooping RPC | +--ro membership-report-v1? yang:counter64
| +--ro membership-report-v2? yang:counter64
| +--ro membership-report-v3? yang:counter64
| +--ro leave? yang:counter64
| +--ro non-member-leave? yang:counter64
| +--ro pim? yang:counter64
+--ro sent
+--ro query? yang:counter64
+--ro membership-report-v1? yang:counter64
+--ro membership-report-v2? yang:counter64
+--ro membership-report-v3? yang:counter64
+--ro leave? yang:counter64
+--ro non-member-leave? yang:counter64
+--ro pim? yang:counter64
2.5. IGMP and MLD Snooping RPC
IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping
group tables. group tables.
rpcs: rpcs:
+---x clear-igmp-snooping-groups {rpc-clear-groups}? +---x clear-igmp-snooping-groups {rpc-clear-groups}?
| +---w input | +---w input
| +---w id? uint32 | +---w name? string
| +---w group? inet:ipv4-address | +---w group? inet:ipv4-address
| +---w source? inet:ipv4-address | +---w source? inet:ipv4-address
+---x clear-mld-snooping-groups {rpc-clear-groups}? +---x clear-mld-snooping-groups {rpc-clear-groups}?
+---w input +---w input
+---w id? uint32 +---w name? string
+---w group? inet:ipv6-address +---w group? inet:ipv6-address
+---w source? inet:ipv6-address +---w source? inet:ipv6-address
3. IGMP and MLD Snooping YANG Module 3. IGMP and MLD Snooping YANG Module
<CODE BEGINS> file "ietf-igmp-mld-snooping@2017-10-25.yang" <CODE BEGINS> file "ietf-igmp-mld-snooping@2018-02-26.yang"
module ietf-igmp-mld-snooping { module ietf-igmp-mld-snooping {
namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping";
// replace with IANA namespace when assigned // replace with IANA namespace when assigned
prefix ims; prefix ims;
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-interfaces { import ietf-interfaces {
prefix "if"; prefix "if";
} }
import ietf-l2vpn { import ietf-l2vpn {
prefix "l2vpn"; prefix "l2vpn";
} }
import ietf-network-instance {
prefix "ni";
}
organization organization
"IETF PIM Working Group"; "IETF PIM Working Group";
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:Michael.McBride@huawei.com>
Editors: Hongji Zhao Editors: Hongji Zhao
<mailto:hongji.zhao@ericsson.com> <mailto:hongji.zhao@ericsson.com>
Xufeng Liu Xufeng Liu
<mailto:Xufeng_Liu@jabil.com> <mailto:Xufeng_Liu@jabil.com>
Yisong Liu Yisong Liu
<mailto:liuyisong@huawei.com> <mailto:liuyisong@huawei.com>
Anish Peter Anish Peter
<mailto:anish.ietf@gmail.com> <mailto:anish.ietf@gmail.com>
Mahesh Sivakumar Mahesh Sivakumar
<mailto:masivaku@cisco.com> <mailto:masivaku@cisco.com>
"; ";
description description
"The module defines a collection of YANG definitions common for "The module defines a collection of YANG definitions common for
skipping to change at page 14, line 34 skipping to change at page 14, line 16
Mahesh Sivakumar Mahesh Sivakumar
<mailto:masivaku@cisco.com> <mailto:masivaku@cisco.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 Snooping."; IGMP and MLD Snooping.";
revision 2017-10-25 { revision 2018-02-26 {
description
"augment /if:interfaces/if:interface";
reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Snooping";
}
revision 2017-10-24 {
description description
"Change model definition to fit NMDA standard."; "Change model definition to fit NMDA standard.";
reference reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping";
} }
revision 2017-08-14 { revision 2017-08-14 {
description description
"using profile to cooperate with ieee-dot1Q-bridge module"; "using profile to cooperate with ieee-dot1Q-bridge module";
reference reference
skipping to change at page 15, line 27 skipping to change at page 15, line 13
/* /*
* Features * Features
*/ */
feature admin-enable { feature admin-enable {
description description
"Support configuration to enable or disable IGMP and MLD "Support configuration to enable or disable IGMP and MLD
Snooping."; Snooping.";
} }
feature fast-leave { feature immediate-leave {
description description
"Support configuration of fast-leave."; "Support configuration of immediate-leave.";
} }
feature join-group { feature join-group {
description description
"Support configuration of join-group."; "Support configuration of join-group.";
} }
feature require-router-alert { feature require-router-alert {
description description
"Support configuration of require-router-alert."; "Support configuration of require-router-alert.";
} }
feature static-l2-multicast-group { feature static-l2-multicast-group {
description description
"Support configuration of L2 multicast static-group."; "Support configuration of L2 multicast static-group.";
} }
feature static-mrouter-interface {
description
"Support configuration of mrouter interface.";
}
feature per-instance-config { feature per-instance-config {
description description
"Support configuration of each VLAN or VPLS instance or EVPN "Support configuration of each VLAN or l2vpn instance or EVPN
instance."; instance.";
} }
feature rpc-clear-groups { feature rpc-clear-groups {
description description
"Support to clear statistics by RPC for IGMP and MLD "Support to clear statistics by RPC for IGMP and MLD
Snooping."; Snooping.";
} }
feature explicit-tracking { feature explicit-tracking {
skipping to change at page 17, line 24 skipping to change at page 17, line 8
type leafref { type leafref {
path "/mld-snooping-instances/mld-snooping-instance/name"; path "/mld-snooping-instances/mld-snooping-instance/name";
} }
description description
"This type is used by data models that need to reference mld "This type is used by data models that need to reference mld
snooping instance."; snooping instance.";
} }
typedef l2vpn-instance-ac-ref { typedef l2vpn-instance-ac-ref {
type leafref { type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" + path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name";
"/l2vpn:instance/l2vpn:endpoint/l2vpn:ac/l2vpn:name";
} }
description "l2vpn-instance-ac-ref"; description "l2vpn-instance-ac-ref";
} }
typedef l2vpn-instance-pw-ref { typedef l2vpn-instance-pw-ref {
type leafref { type leafref {
path "/l2vpn:l2vpn/l2vpn:instances" + path "/ni:network-instances/ni:network-instance/l2vpn:endpoint/l2vpn:name";
"/l2vpn:instance/l2vpn:endpoint/l2vpn:pw/l2vpn:name";
} }
description "l2vpn-instance-pw-ref"; description "l2vpn-instance-pw-ref";
} }
typedef source-ipv4-addr-type { typedef source-ipv4-addr-type {
type union { type union {
type enumeration { type enumeration {
enum '*' { enum '*' {
description description
"Any source address."; "Any source address.";
skipping to change at page 18, line 20 skipping to change at page 18, line 4
enum '*' { enum '*' {
description description
"Any source address."; "Any source address.";
} }
} }
type inet:ipv6-address; type inet:ipv6-address;
} }
description description
"Multicast source IP address type."; "Multicast source IP address type.";
} // source-ipv6-addr-type } // source-ipv6-addr-type
/* /*
* Identities * Identities
*/ */
/* /*
* Groupings * Groupings
*/ */
grouping general-state-attributes { grouping general-state-attributes {
description "Statistics of IGMP and MLD Snooping ";
container statistics { description "General State attributes";
config false;
description
"The statistics of IGMP and MLD Snooping related packets.";
container received { container received {
description "Statistics of received messages."; config false;
uses general-statistics-sent-received; description "Statistics of received IGMP and MLD Snooping
} related packets.";
container sent { uses general-statistics-sent-received;
description "Statistics of sent messages."; }
uses general-statistics-sent-received; container sent {
} config false;
} // statistics description "Statistics of sent IGMP and MLD Snooping related
packets.";
uses general-statistics-sent-received;
}
} // general-state-attributes } // general-state-attributes
grouping instance-config-attributes-igmp-snooping { grouping instance-config-attributes-igmp-snooping {
description "IGMP snooping configuration for each VLAN or VPLS description "IGMP snooping configuration for each VLAN or l2vpn
instance or EVPN instance."; instance or EVPN instance.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
leaf querier-source { leaf querier-source {
type inet:ipv4-address; type inet:ipv4-address;
description "Use the IGMP snooping querier to support IGMP description "Use the IGMP snooping querier to support IGMP
snooping in a VLAN where PIM and IGMP are not configured. snooping in a VLAN where PIM and IGMP are not configured.
The IP address is used as the source address in The IP address is used as the source address in
messages."; messages.";
skipping to change at page 19, line 37 skipping to change at page 19, line 18
"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.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "ims:type = 'bridge'"; when "../../type = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in bridge fowarding"; description "Outgoing interface in bridge fowarding";
} }
leaf-list vpls-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "ims:type = 'vpls'"; when "../../type = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing ac in vpls fowarding"; description "Outgoing ac in l2vpn fowarding";
} }
leaf-list vpls-outgoing-pw {
when "ims:type = 'vpls'"; leaf-list l2vpn-outgoing-pw {
when "../../type = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing pw in vpls fowarding"; description "Outgoing pw in l2vpn fowarding";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
} // instance-config-attributes-igmp-snooping } // instance-config-attributes-igmp-snooping
grouping instance-config-attributes-igmp-mld-snooping { grouping instance-config-attributes-igmp-mld-snooping {
description description
"IGMP and MLD Snooping configuration of each VLAN."; "IGMP and MLD Snooping configuration of each VLAN.";
skipping to change at page 21, line 34 skipping to change at page 21, line 6
} }
/** /**
leaf mrouter-aging-time { leaf mrouter-aging-time {
type uint16 ; type uint16 ;
default 180; default 180;
description "Aging time for mrouter interface"; description "Aging time for mrouter interface";
} }
**/ **/
leaf fast-leave { leaf immediate-leave {
if-feature fast-leave; if-feature immediate-leave;
type empty; type empty;
description description
"When fast leave is enabled, the IGMP software assumes that "When fast leave is enabled, the IGMP software assumes that
no more than one host is present on each VLAN port."; no more than one host is present on each VLAN port.";
} }
leaf last-member-query-interval { leaf last-member-query-interval {
type uint16 { type uint16 {
range "1..65535"; range "1..65535";
} }
skipping to change at page 23, line 16 skipping to change at page 22, line 32
leaf version { leaf version {
type uint8 { type uint8 {
range "1..3"; range "1..3";
} }
description "IGMP and MLD Snooping version."; description "IGMP and MLD Snooping version.";
} }
leaf-list static-bridge-mrouter-interface { leaf-list static-bridge-mrouter-interface {
when "ims:type = 'bridge'"; when "../type = 'bridge'";
if-feature static-l2-multicast-group; if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description "static mrouter interface in bridge fowarding"; description "static mrouter interface in bridge fowarding";
} }
leaf-list static-vpls-mrouter-interface { leaf-list static-l2vpn-mrouter-interface-ac {
when "ims:type = 'vpls'"; when "../type = 'l2vpn'";
if-feature static-l2-multicast-group; if-feature static-mrouter-interface;
type if:interface-ref;
description "static mrouter interface whose type is interface
in l2vpn forwarding";
}
leaf-list static-l2vpn-mrouter-interface-pw {
when "../type = 'l2vpn'";
if-feature static-mrouter-interface;
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "static mrouter interface in vpls fowarding"; description "static mrouter interface whose type is pw in l2vpn
forwarding";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-mld-snooping
grouping instance-config-attributes-mld-snooping { grouping instance-config-attributes-mld-snooping {
description "MLD snooping configuration of each VLAN."; description "MLD snooping configuration of each VLAN.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
skipping to change at page 24, line 21 skipping to change at page 23, line 43
"Multicast group IP address"; "Multicast group IP 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 IP address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "ims:type = 'bridge'"; when "../../type = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in bridge fowarding"; description "Outgoing interface in bridge fowarding";
} }
leaf-list vpls-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "ims:type = 'vpls'"; when "../../type = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing ac in vpls fowarding"; description "Outgoing ac in l2vpn fowarding";
} }
leaf-list vpls-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "ims:type = 'vpls'"; when "../../type = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing pw in vpls fowarding"; description "Outgoing pw in l2vpn fowarding";
} }
} // static-l2-multicast-group } // static-l2-multicast-group
} // instance-config-attributes-mld-snooping } // instance-config-attributes-mld-snooping
grouping instance-state-group-attributes-igmp-mld-snooping { grouping instance-state-group-attributes-igmp-mld-snooping {
description description
"Attributes for both IGMP and MLD snooping groups."; "Attributes for both IGMP and MLD snooping groups.";
skipping to change at page 25, line 28 skipping to change at page 24, line 47
units seconds; units seconds;
description description
"The time after the device created L2 multicast record."; "The time after the device created L2 multicast record.";
} }
} // instance-state-group-attributes-igmp-mld-snooping } // instance-state-group-attributes-igmp-mld-snooping
grouping instance-state-attributes-igmp-snooping { grouping instance-state-attributes-igmp-snooping {
description description
"State attributes for IGMP snooping for each VLAN or VPLS "State attributes for IGMP snooping for each VLAN or l2vpn
instance or EVPN instance."; instance or EVPN instance.";
uses instance-state-attributes-igmp-mld-snooping; uses instance-state-attributes-igmp-mld-snooping;
list group { list group {
key "address"; key "address";
config false; config false;
description "IGMP snooping information"; description "IGMP snooping information";
leaf address { leaf address {
type inet:ipv4-address; type inet:ipv4-address;
skipping to change at page 27, line 13 skipping to change at page 26, line 27
} }
description description
"Filter mode for a multicast membership "Filter mode for a multicast membership
host may be either include or exclude."; host may be either include or exclude.";
} }
}// list host }// list host
} // list source } // list source
} // list group } // list group
// statistics
uses general-state-attributes;
} // instance-state-attributes-igmp-snooping } // instance-state-attributes-igmp-snooping
grouping instance-state-attributes-igmp-mld-snooping { grouping instance-state-attributes-igmp-mld-snooping {
description description
"State attributes for both IGMP and MLD Snooping of each "State attributes for both IGMP and MLD Snooping of each
VLAN or VPLS instance or EVPN instance."; VLAN or l2vpn instance or EVPN instance.";
leaf entries-count { leaf entries-count {
type uint32; type uint32;
config false; config false;
description description
"The number of L2 multicast entries in IGMP and MLD "The number of L2 multicast entries in IGMP and MLD
Snooping."; Snooping.";
} }
leaf-list bridge-mrouter-interface { leaf-list bridge-mrouter-interface {
when "ims:type = 'bridge'"; when "../type = 'bridge'";
type if:interface-ref; type if:interface-ref;
config false; config false;
description " mrouter interface in bridge fowarding"; description " mrouter interface in bridge fowarding";
} }
leaf-list vpls-mrouter-interface { leaf-list l2vpn-mrouter-interface-ac {
when "../type = 'l2vpn'";
type if:interface-ref;
config false;
description " mrouter interface whose type is interface in
l2vpn fowarding";
when "ims:type = 'vpls'"; }
leaf-list l2vpn-mrouter-interface-pw {
when "../type = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
config false; config false;
description " mrouter interface in vpls fowarding"; description " mrouter interface whose type is pw in l2vpn
fowarding";
} }
} // instance-config-attributes-igmp-mld-snooping } // instance-config-attributes-igmp-mld-snooping
grouping instance-state-attributes-mld-snooping { grouping instance-state-attributes-mld-snooping {
description description
"State attributes for MLD snooping of each VLAN."; "State attributes for MLD snooping of each VLAN.";
uses instance-state-attributes-igmp-mld-snooping; uses instance-state-attributes-igmp-mld-snooping;
skipping to change at page 29, line 42 skipping to change at page 29, line 5
} }
description description
"Filter mode for a multicast membership "Filter mode for a multicast membership
host may be either include or exclude."; host may be either include or exclude.";
} }
}// list host }// list host
} // list source } // list source
} // list group } // list group
// statistics
uses general-state-attributes;
} // instance-state-attributes-mld-snooping } // instance-state-attributes-mld-snooping
grouping instance-state-source-attributes-igmp-mld-snooping { grouping instance-state-source-attributes-igmp-mld-snooping {
description description
"State attributes for both IGMP and MLD Snooping of each VLAN "State attributes for both IGMP and MLD Snooping of each VLAN
or VPLS instance or EVPN instance."; or l2vpn instance or EVPN instance.";
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "ims:type = 'bridge'"; when "../../../type = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in bridge fowarding"; description "Outgoing interface in bridge fowarding";
} }
leaf-list vpls-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "ims:type = 'vpls'"; when "../../../type = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing ac in vpls fowarding"; description "Outgoing ac in l2vpn fowarding";
} }
leaf-list vpls-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "ims:type = 'vpls'"; when "../../../type = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing pw in vpls fowarding"; description "Outgoing pw in l2vpn fowarding";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
description "The time after the device created L2 multicast description "The time after the device created L2 multicast
record"; record";
} }
skipping to change at page 31, line 47 skipping to change at page 30, line 52
leaf membership-report-v3 { leaf membership-report-v3 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v3 messages."; "The number of membership report v3 messages.";
} }
leaf leave { leaf leave {
type yang:counter64; type yang:counter64;
description description
"The number of leave messages."; "The number of leave messages.";
} }
leaf non-member-leave {
type yang:counter64;
description
"The number of non member leave messages.";
}
leaf pim { leaf pim {
type yang:counter64; type yang:counter64;
description description
"The number of pim hello messages."; "The number of pim hello messages.";
} }
} // general-statistics-sent-received } // general-statistics-sent-received
grouping endpoint-grp { grouping interface-endpoint-attributes-igmp-snooping {
description "A grouping that defines the structure of " +
"an endpoint";
choice ac-or-pw-or-redundancy-grp {
description "A choice of attachment circuit or " +
"pseudowire or redundancy group";
case ac {
description "Attachment circuit(s) as an endpoint";
list ac {
key "name";
leaf name {
type string;
description "Name of attachment circuit. " +
"This field is intended to " +
"reference standardized " +
"layer-2 definitions.";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance under
the bridge view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance under the
bridge view";
}
description "An L2VPN instance's " + description "interface attributes for igmp snooping";
"attachment circuit list";
list host {
if-feature explicit-tracking;
key "host-address";
config false;
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv4-address;
description
"Multicast membership host address.";
} }
} leaf host-filter-mode {
case pw { type enumeration {
description "Pseudowire(s) as an endpoint"; enum "include" {
list pw { description
key "name"; "In include mode";
leaf name {
type string;
description "Name of Pseudowire.";
} }
leaf igmp-snooping-instance { enum "exclude" {
type igmp-snooping-instance-ref; description
description "Configure igmp-snooping instance under "In exclude mode.";
the bridge view";
} }
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance under the
bridge view";
} }
description
description "An L2VPN instance's " + "Filter mode for a multicast membership
"pseudowire(s) list"; host may be either include or exclude.";
} }
} }// list host
case redundancy-grp { } // interface-endpoint-attributes-igmp-snooping
description "Redundancy group as an endpoint"; grouping interface-endpoint-attributes-mld-snooping {
choice primary {
mandatory true;
description "primary options";
case primary-ac {
description "primary-ac";
container primary-ac {
description "Primary AC";
leaf name {
type string;
description "Name of attachment circuit. ";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance
under the bridge view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance
under the bridge view";
}
}// primary-ac
}// primary-ac
case primary-pw { description "interface endpoint attributes mld snooping";
list primary-pw { list host {
key "name";
leaf name {
type string;
description "Name of Pseudowire.";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance
under the bridge view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance
under the bridge view";
}
description "primary-pw"; if-feature explicit-tracking;
} //primary-pw key "host-address";
}//primary-pw
}
choice backup {
description "backup options";
case backup-ac {
description "backup-ac";
container backup-ac {
description "Backup AC";
leaf name {
type string;
description "Name of attachment circuit. ";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance
under the bridge view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance
under the bridge view";
}
}// backup-ac
}// backup-ac
case backup-pw {
description "backup-pw";
list backup-pw {
key "name";
leaf name {
type string;
description "Name of Pseudowire.";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance
under the bridge view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping instance
under the bridge view";
}
description "backup-pw"; config false;
} //backup-pw
description
"List of multicast membership hosts
of the specific multicast source-group.";
leaf host-address {
type inet:ipv6-address;
description
"Multicast membership host address.";
}
leaf host-filter-mode {
type enumeration {
enum "include" {
description
"In include mode";
}
enum "exclude" {
description
"In exclude mode.";
} }
}
description
"Filter mode for a multicast membership
host may be either include or exclude.";
} }
} }// list host
} } // interface-endpoint-attributes-mld-snooping
}
/* /*
* igmp-snooping-instance * igmp-snooping-instance
*/ */
container igmp-snooping-instances { container igmp-snooping-instances {
description description
"igmp-snooping-instance list"; "igmp-snooping-instance list";
list igmp-snooping-instance { list igmp-snooping-instance {
key "name"; key "name";
skipping to change at page 35, line 42 skipping to change at page 33, line 14
"IGMP Snooping instance to configure the igmp- "IGMP Snooping instance to configure the igmp-
snooping."; snooping.";
leaf name { leaf name {
type string; type string;
description description
"Name of the igmp-snooping-instance to configure the igmp "Name of the igmp-snooping-instance to configure the igmp
snooping."; snooping.";
} }
leaf id {
type uint32;
description
"It is vlan_id or vpls_id.
When igmp-snooping-instance is applied under bridge view, its
value is 0.";
}
leaf type { leaf type {
type enumeration { type enumeration {
enum "bridge" { enum "bridge" {
description "bridge"; description "bridge";
} }
enum "vpls" { enum "l2vpn" {
description "vpls"; description "l2vpn";
} }
} }
description "The type indicates bridge or vpls."; description "The type indicates bridge or l2vpn.";
} }
uses instance-config-attributes-igmp-snooping { uses instance-config-attributes-igmp-snooping {
if-feature per-instance-config; if-feature per-instance-config;
} }
uses instance-state-attributes-igmp-snooping; uses instance-state-attributes-igmp-snooping;
} //igmp-snooping-instance } //igmp-snooping-instance
} //igmp-snooping-instances } //igmp-snooping-instances
skipping to change at page 36, line 45 skipping to change at page 34, line 9
description description
"MLD Snooping instance to configure the mld-snooping."; "MLD Snooping instance to configure the mld-snooping.";
leaf name { leaf name {
type string; type string;
description description
"Name of the mld-snooping-instance to configure the mld "Name of the mld-snooping-instance to configure the mld
snooping."; snooping.";
} }
leaf id {
type uint32;
description
"It is vlan_id or vpls_id.
When mld-snooping-instance is applied under bridge view, its
value is 0.";
}
leaf type { leaf type {
type enumeration { type enumeration {
enum "bridge" { enum "bridge" {
description "bridge"; description "bridge";
} }
enum "vpls" { enum "l2vpn" {
description "vpls"; description "l2vpn";
} }
} }
description "The type indicates bridge or vpls."; description "The type indicates bridge or l2vpn.";
} }
uses instance-config-attributes-mld-snooping { uses instance-config-attributes-mld-snooping {
if-feature per-instance-config; if-feature per-instance-config;
} }
uses instance-state-attributes-mld-snooping; uses instance-state-attributes-mld-snooping;
} //mld-snooping-instance } //mld-snooping-instance
} //mld-snooping-instances } //mld-snooping-instances
skipping to change at page 38, line 48 skipping to change at page 35, line 44
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-snooping-instance-ref; type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance description "Configure igmp-snooping instance
under the vlan view"; under the vlan view";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type mld-snooping-instance-ref;
description "Configure mld-snooping instance description "Configure mld-snooping instance
under the vlan view"; under the vlan view";
} }
container interfaces {
description
"Interface configuration parameters.";
list interface {
key "name";
description
"The list of configured interfaces on the
device.";
leaf name {
type string;
description
"The name of the interface.";
}
leaf igmp-snooping-instance {
type igmp-snooping-instance-ref;
description "Configure igmp-snooping
instance under the interface view";
}
leaf mld-snooping-instance {
type mld-snooping-instance-ref;
description "Configure mld-snooping
instance under the interface view";
}
}
}//interfaces
}//vlan }//vlan
}//bridge-vlan }//bridge-vlan
}//component }//component
}//bridge }//bridge
} //bridges } //bridges
container l2vpn-instances { container l2vpn-instances {
description "Apply igmp-mld-snooping instance in the vpls description "Apply igmp-mld-snooping instance in the l2vpn
scenario"; scenario";
list l2vpn-instance { list l2vpn-instance {
key "name"; key "name";
description "An VPLS service instance"; description "An l2vpn service instance";
leaf name { leaf name {
type string; type string;
description "Name of VPLS service instance"; description "Name of l2vpn service instance";
} }
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-snooping-instance-ref; type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance under the description "Configure igmp-snooping instance under the
l2vpn-instance view"; l2vpn-instance view";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type mld-snooping-instance-ref;
description "Configure mld-snooping instance under the description "Configure mld-snooping instance under the
l2vpn-instance view"; l2vpn-instance view";
} }
skipping to change at page 40, line 15 skipping to change at page 36, line 29
type igmp-snooping-instance-ref; type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance under the description "Configure igmp-snooping instance under the
l2vpn-instance view"; l2vpn-instance view";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type mld-snooping-instance-ref;
description "Configure mld-snooping instance under the description "Configure mld-snooping instance under the
l2vpn-instance view"; l2vpn-instance view";
} }
list endpoint { }
key "name"; }
description "An endpoint";
leaf name { /* augments */
type string;
description "endpoint name"; augment "/if:interfaces/if:interface" {
description "Augment interface for referencing attributes which
only fit for interface view.";
container igmp-mld-snooping {
description
"igmp-mld-snooping related attributes under interface view";
leaf enable {
if-feature admin-enable;
type boolean;
description
"Set the value to true to enable IGMP and MLD Snooping in
the VLAN instance.";
}
leaf version {
type uint8 {
range "1..3";
} }
leaf igmp-snooping-instance { description "IGMP and MLD Snooping version.";
type igmp-snooping-instance-ref;
description "Configure igmp-snooping instance under the }
interface view";
leaf type {
type enumeration {
enum "bridge" {
description "bridge";
}
enum "l2vpn" {
description "l2vpn";
}
} }
leaf mld-snooping-instance { description "The type indicates bridge or l2vpn.";
type mld-snooping-instance-ref; }
description "Configure mld-snooping instance under the
container static-mrouter-interface {
description
"Container for choice static-mrouter-interface";
choice static-mrouter-interface {
description
"Configure static multicast router interface under the
interface view"; interface view";
}
uses endpoint-grp; case bridge {
when "type = 'bridge'" {
description
"Applies to bridge scenario.";
}
description
"Applies to bridge scenario.";
leaf bridge-name {
type string;
description
"bridge name.";
}
leaf-list vlan-id {
type uint32;
description
"vlan id.";
}
}
case l2vpn {
when "type = 'l2vpn'" {
description
"Applies to l2vpn scenario.";
}
description
"Applies to l2vpn scenario.";
leaf l2vpn-instance-name {
type string;
description
"The l2vpn instance name applied in the
interface";
}
}
} // choice static-mrouter-interface
} // container static-mrouter-interface
container static-l2-multicast-group {
description
"Container for static-l2-multicast-group";
choice static-l2-multicast-group {
description
"Configure static l2 multicast group under the
interface view";
case bridge {
when "type = 'bridge'" {
description
"Applies to bridge scenario.";
}
description
"Applies to bridge scenario.";
leaf bridgename {
type string;
description
"bridge name.";
}
list bridge-group-v4 {
key "address";
description "";
leaf address {
type inet:ipv4-address;
description
"Multicast group IPV4 address";
}
leaf-list source {
type inet:ipv4-address;
description "Source IPV4 address for multicast
stream";
}
leaf-list vlan-id {
type uint32;
description
"vlan id.";
}
}
list bridge-group-v6 {
key "address";
description "";
leaf address {
type inet:ipv6-address;
description
"Multicast group IPv6 address";
}
leaf-list source {
type inet:ipv6-address;
description "Source IPv6 address for multicast
stream";
}
leaf-list vlan-id {
type uint32;
description
"vlan id.";
}
}
}
case l2vpn {
when "type = 'l2vpn'" {
description
"Applies to l2vpn scenario.";
}
description
"Applies to l2vpn scenario.";
list l2vpn-group-v4 {
key "address";
description "";
leaf address {
type inet:ipv4-address;
description
"Multicast group IP address";
}
leaf-list source {
type inet:ipv4-address;
description "Source IP address for multicast
stream";
}
leaf l2vpn-instance-name {
type string;
description
"The l2vpn instance name applied in the
interface";
}
}
list l2vpn-group-v6 {
key "address";
description "";
leaf address {
type inet:ipv6-address;
description
"Multicast group IP address";
}
leaf-list source {
type inet:ipv6-address;
description "Source IP address for multicast
stream";
}
leaf l2vpn-instance-name {
type string;
description
"The l2vpn instance name applied in the
interface";
}
}
}
} //choice static-l2-multicast-group
} // container static-l2-multicast-group
container statistics {
config false;
description
"A collection of interface-related statistics objects.";
uses general-state-attributes;
}
} //endpoint
}
} }
/* }
* RPCs
*/
rpc clear-igmp-snooping-groups { /* RPCs */
rpc clear-igmp-snooping-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified IGMP Snooping cache tables."; "Clears the specified IGMP Snooping cache tables.";
input { input {
leaf id {
type uint32; leaf name {
description type string;
"VLAN ID, VPLS ID, or EVPN ID"; description
} "Name of the igmp-snooping-instance";
}
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 snooping group tables If it is not specified, all IGMP snooping group tables
are are
cleared."; cleared.";
} }
skipping to change at page 41, line 25 skipping to change at page 42, line 4
} }
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 snooping source-group If it is not specified, all IGMP snooping source-group
tables are tables are
cleared."; cleared.";
} }
} }
} // rpc clear-igmp-snooping-groups } // rpc clear-igmp-snooping-groups
rpc clear-mld-snooping-groups { rpc clear-mld-snooping-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified MLD Snooping cache tables."; "Clears the specified MLD Snooping cache tables.";
input { input {
leaf id { leaf name {
type uint32; type string;
description description
"VLAN ID, VPLS ID, or EVPN ID"; "Name of the mld-snooping-instance";
} }
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 snooping group tables are If it is not specified, all MLD snooping group tables are
cleared."; cleared.";
} }
leaf source { leaf source {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast source IPv6 address. "Multicast source IPv6 address.
If it is not specified, all MLD snooping source-group If it is not specified, all MLD snooping source-group
tables are tables are
cleared."; cleared.";
} }
} }
} // rpc clear-mld-snooping-groups } // rpc clear-mld-snooping-groups
} }
<CODE ENDS> <CODE ENDS>
4. Security Considerations 4. Security Considerations
The data model defined does not create any security implications. The data model defined does not create any security implications.
5. IANA Considerations 5. IANA Considerations
This draft does not request any IANA action. This draft does not request any IANA action.
6. Normative References 6. Normative References
 End of changes. 218 change blocks. 
517 lines changed or deleted 611 lines changed or added

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