draft-ietf-pim-igmp-mld-snooping-yang-05.txt   draft-ietf-pim-igmp-mld-snooping-yang-06.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: April 10, 2019 Jabil Expires: June 09, 2019 Volta Networks
Y. Liu Y. Liu
Huawei Huawei
M. Sivakumar M. Sivakumar
Juniper Juniper
A. Peter A. Peter
Individual Individual
October 11, 2018 December 10, 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-05.txt draft-ietf-pim-igmp-mld-snooping-yang-06.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. The YANG module in Multicast Listener Discovery (MLD) Snooping devices. The YANG module in
this document conforms to Network Management Datastore Architecture this document conforms to Network Management Datastore Architecture
(NMDA). (NMDA).
Status of this Memo Status of this Memo
skipping to change at page 2, line 4 skipping to change at page 2, line 4
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
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 April 10, 2019. This Internet-Draft will expire on June 09, 2019.
Copyright Notice Copyright Notice
Copyright (c) 2018 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
skipping to change at page 2, line 33 skipping to change at page 2, line 33
1. Introduction...................................................3 1. Introduction...................................................3
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 Snooping Instances...................................4 2.2. IGMP Snooping Instances...................................4
2.3. MLD Snooping Instances....................................6 2.3. MLD Snooping Instances....................................6
2.4. IGMP and MLD Snooping Instances Reference.................8 2.4. IGMP and MLD Snooping Instances Reference.................8
2.5. IGMP and MLD Snooping RPC.................................9 2.5. IGMP and MLD Snooping RPC.................................9
3. IGMP and MLD Snooping YANG Module..............................9 3. IGMP and MLD Snooping YANG Module..............................9
4. Security Considerations.......................................32 4. Security Considerations.......................................31
5. IANA Considerations...........................................33 5. IANA Considerations...........................................33
6. Normative References..........................................34 6. Normative References..........................................34
Appendix A. Data Tree Example...................................36 Appendix A. Data Tree Example...................................36
Authors' Addresses...............................................42 A.1 Bridge scenario...........................................36
A.2 L2VPN scenario............................................39
Authors' Addresses...............................................43
1. Introduction 1. Introduction
This document defines a YANG [RFC6020] data model for the management of This document defines a YANG [RFC6020] data model for the management of
Internet Group Management Protocol (IGMP) and Multicast Listener Internet Group Management Protocol (IGMP) and Multicast Listener
Discovery (MLD) Snooping devices. Discovery (MLD) Snooping devices.
The YANG module in this document conforms to the Network Management The YANG module in this document conforms to the Network Management
Datastore Architecture defined in [RFC8342]. The "Network Management Datastore Architecture defined in [RFC8342]. The "Network Management
Datastore Architecture" (NMDA) adds the ability to inspect the current Datastore Architecture" (NMDA) adds the ability to inspect the current
skipping to change at page 4, line 6 skipping to change at page 4, line 6
o Ellipsis ("...") stands for contents of subtrees that are not o Ellipsis ("...") stands for contents of subtrees that are not
shown. shown.
2. Design of Data Model 2. Design of Data Model
The model covers Considerations for Internet Group Management Protocol The model covers Considerations for Internet Group Management Protocol
(IGMP) and Multicast Listener Discovery (MLD) Snooping Switches (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches
[RFC4541]. [RFC4541].
The goal of this document is to define a data model that provides a The goal of this document is to define a data model that provides a
common user interface to IGMP and MLD Snooping. This document provides common user interface to IGMP and MLD Snooping.
freedom for vendors to adapt this data model to their product
implementations.
2.1. Overview 2.1. Overview
The IGMP and MLD Snooping YANG module defined in this document has all The IGMP and MLD Snooping YANG module defined in this document has all
the common building blocks for the IGMP and MLD Snooping protocol. the common building blocks for the IGMP and MLD Snooping protocol.
The YANG module includes IGMP and MLD Snooping instance definition, The YANG module includes IGMP and MLD Snooping instance definition,
instance reference in the scenario of BRIDGE and L2VPN. The module also instance reference in the scenario of BRIDGE and L2VPN. The module also
includes the RPC methods for clearing IGMP and MLD Snooping group includes the RPC methods for clearing IGMP and MLD Snooping group
tables. tables.
This YANG module follows the Guidelines for YANG Module Authors (NMDA) This YANG module conforms to Network Management Datastore Architecture
[draft-dsdt-nmda-guidelines-01]. This NMDA ("Network Management (NMDA)[RFC8342]. This NMDA architecture provides an architectural
Datastore Architecture") architecture provides an architectural
framework for datastores as they are used by network management framework for datastores as they are used by network management
protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG
[RFC7950] data modeling language. [RFC7950] data modeling language.
2.2. IGMP Snooping Instances 2.2. IGMP Snooping Instances
The YANG module defines igmp-snooping-instance which could be referenced The YANG module defines igmp-snooping-instance which augments
in the BRIDGE or L2VPN scenario to enable IGMP Snooping. /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol.
All the IGMP Snooping related attributes have been defined in the igmp- All the IGMP Snooping related attributes have been defined in the igmp-
snooping-instance. The read-write attribute means configurable data. The snooping-instance. The read-write attribute means configurable data. The
read-only attribute means state data. The key attribute of the igmp- read-only attribute means state data.
snooping-instance is name.
One igmp-snooping-instance could be referenced in one BRIDGE instance or One igmp-snooping-instance could be referenced in one BRIDGE instance or
L2VPN instance. One igmp-snooping-instance corresponds to one BRIDGE L2VPN instance. One igmp-snooping-instance corresponds to one BRIDGE
instance or L2VPN instance. instance or L2VPN instance.
The value of type in igmp-snooping-instance is bridge or l2vpn. When it The value of scenario in igmp-snooping-instance is bridge or l2vpn. When
is bridge, the igmp-snooping-instance will be referenced in the BRIDGE it is bridge, the igmp-snooping-instance will be referenced in the
scenario. When it is l2vpn, the igmp-snooping-instance will be BRIDGE scenario. When it is l2vpn, the igmp-snooping-instance will be
referenced in the L2VPN scenario. referenced in the L2VPN scenario.
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac,
l2vpn-mrouter-interface-pw are filled by snooping device dynamically. l2vpn-mrouter-interface-pw are filled by snooping device dynamically.
They are different from static-bridge-mrouter-interface, static-l2vpn- They are different from static-bridge-mrouter-interface, static-l2vpn-
mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are
configured statically. configured statically.
The attributes under the statistics are read-only. They show the The attributes under the interfaces show the statistics of IGMP Snooping
statistics of IGMP and MLD Snooping related packets. related packets.
module: ietf-igmp-mld-snooping module: ietf-igmp-mld-snooping
+--rw igmp-snooping-instances augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
| +--rw igmp-snooping-instance* [name] +--rw igmp-snooping-instance {feature-igmp-snooping}?
| +--rw name string | +--rw scenario? snooping-scenario-type
| +--rw type? enumeration | +--rw enable? boolean
| +--rw enable? boolean | +--rw forwarding-mode? enumeration
| +--rw forwarding-mode? enumeration | +--rw explicit-tracking? boolean
| +--rw explicit-tracking? boolean | | {explicit-tracking}?
| | {explicit-tracking}? | +--rw exclude-lite? boolean
| +--rw exclude-lite? boolean | | {exclude-lite}?
| | {exclude-lite}? | +--rw send-query? boolean
| +--rw send-query? boolean | +--rw immediate-leave? empty
| +--rw immediate-leave? empty | | {immediate-leave}?
| | {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
| +--rw require-router-alert? boolean | | {require-router-alert}?
| | {require-router-alert}? | +--rw robustness-variable? uint8
| +--rw robustness-variable? uint8 | +--rw static-bridge-mrouter-interface* if:interface-ref
| +--rw version? uint8 | | {static-mrouter-interface}?
| +--rw static-bridge-mrouter-interface* if:interface-ref | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref
| | {static-mrouter-interface}? | | {static-mrouter-interface}?
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| | {static-mrouter-interface}? | | {static-mrouter-interface}?
| +--rw static-l2vpn-mrouter-interface-pw* | +--rw version? uint8
| | l2vpn-instance-pw-ref {static-mrouter-interface}? | +--rw querier-source? inet:ipv4-address
| +--rw querier-source? inet:ipv4-address | +--rw static-l2-multicast-group* [group source-addr]
| +--rw static-l2-multicast-group* [group source-addr] | | {static-l2-multicast-group}?
| | {static-l2-multicast-group}? | | +--rw group
| | +--rw group inet:ipv4-address | | | rt-types:ipv4-multicast-group-address
| | +--rw source-addr source-ipv4-addr-type | | +--rw source-addr
| | +--rw bridge-outgoing-interface* if:interface-ref | | | rt-types:ipv4-multicast-source-address
| | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--rw bridge-outgoing-interface* if:interface-ref
| | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| +--ro entries-count? uint32 | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| +--ro bridge-mrouter-interface* if:interface-ref | +--ro entries-count? uint32
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | +--ro bridge-mrouter-interface* if:interface-ref
| +--ro l2vpn-mrouter-interface-pw* | +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| | l2vpn-instance-pw-ref | +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| +--ro group* [address] | +--ro group* [address]
| | +--ro address inet:ipv4-address | | +--ro address rt-types:ipv4-multicast-group-address
| | +--ro mac-address? yang:phys-address | | +--ro mac-address? yang:phys-address
| | +--ro expire? uint32 | | +--ro expire uint32
| | +--ro up-time? uint32 | | +--ro up-time uint32
| | +--ro last-reporter? inet:ipv4-address | | +--ro last-reporter? inet:ipv4-address
| | +--ro source* [address] | | +--ro source* [address]
| | +--ro address inet:ipv4-address | | +--ro address
| | +--ro bridge-outgoing-interface* if:interface-ref | | | rt-types:ipv4-multicast-source-address
| | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | | +--ro bridge-outgoing-interface* if:interface-ref
| | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| | +--ro up-time? uint32 | | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | +--ro expire? uint32 | | +--ro up-time uint32
| | +--ro host-count? uint32 | | +--ro expire uint32
| | | {explicit-tracking}? | | +--ro host-count? uint32
| | +--ro last-reporter? inet:ipv4-address | | | {explicit-tracking}?
| | +--ro host* [host-address] {explicit-tracking}? | | +--ro last-reporter? inet:ipv4-address
| | +--ro host-address inet:ipv4-address | | +--ro host* [host-address] {explicit-tracking}?
| | +--ro host-filter-mode? enumeration | | +--ro host-address inet:ipv4-address
| +--ro interfaces | | +--ro host-filter-mode filter-mode-type
| +--ro interface* [name] | +--ro interfaces
| +--ro name if:interface-ref | +--ro interface* [name]
| +--ro statistics | +--ro name if:interface-ref
| +--ro received | +--ro statistics
| | +--ro query? yang:counter64 | +--ro received
| | +--ro membership-report-v1? yang:counter64 | | +--ro num-query? yang:counter64
| | +--ro membership-report-v2? yang:counter64 | | +--ro num-membership-report-v1? yang:counter64
| | +--ro membership-report-v3? yang:counter64 | | +--ro num-membership-report-v2? yang:counter64
| | +--ro leave? yang:counter64 | | +--ro num-membership-report-v3? yang:counter64
| | +--ro non-member-leave? yang:counter64 | | +--ro num-leave? yang:counter64
| | +--ro pim? yang:counter64 | | +--ro num-non-member-leave? yang:counter64
| +--ro sent | | +--ro num-pim-hello? yang:counter64
| +--ro query? yang:counter64 | +--ro sent
| +--ro membership-report-v1? yang:counter64 | +--ro num-query? yang:counter64
| +--ro membership-report-v2? yang:counter64 | +--ro num-membership-report-v1? yang:counter64
| +--ro membership-report-v3? yang:counter64 | +--ro num-membership-report-v2? yang:counter64
| +--ro leave? yang:counter64 | +--ro num-membership-report-v3? yang:counter64
| +--ro non-member-leave? yang:counter64 | +--ro num-leave? yang:counter64
| +--ro pim? yang:counter64 | +--ro num-non-member-leave? yang:counter64
| +--ro num-pim-hello? yang:counter64
2.3. MLD Snooping Instances 2.3. MLD Snooping Instances
The YANG module defines mld-snooping-instance which could be referenced The YANG module defines mld-snooping-instance which could be referenced
in the BRIDGE or L2VPN scenario to enable MLD Snooping. in the BRIDGE or L2VPN scenario to enable MLD Snooping.
The mld-snooping-instance is the same as IGMP snooping except changing The mld-snooping-instance is the same as IGMP snooping except changing
IPV4 addresses to IPV6 addresses. IPV4 addresses to IPV6 addresses.
module: ietf-igmp-mld-snooping module: ietf-igmp-mld-snooping
+--rw mld-snooping-instances augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:
+--rw mld-snooping-instance* [name] +--rw igmp-snooping-instance {feature-igmp-snooping}?
+--rw name string | ...
+--rw type? enumeration +--rw mld-snooping-instance {feature-mld-snooping}?
+--rw enable? boolean +--rw scenario? snooping-scenario-type
+--rw forwarding-mode? enumeration +--rw enable? boolean
+--rw explicit-tracking? boolean +--rw forwarding-mode? enumeration
| {explicit-tracking}? +--rw explicit-tracking? boolean
+--rw exclude-lite? boolean | {explicit-tracking}?
| {exclude-lite}? +--rw exclude-lite? boolean
+--rw send-query? boolean | {exclude-lite}?
+--rw immediate-leave? empty +--rw send-query? boolean
| {immediate-leave}? +--rw immediate-leave? empty
+--rw last-member-query-interval? uint16 | {immediate-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 +--rw query-max-response-time? uint16
| {require-router-alert}? +--rw require-router-alert? boolean
+--rw robustness-variable? uint8 | {require-router-alert}?
+--rw version? uint8 +--rw robustness-variable? uint8
+--rw static-bridge-mrouter-interface* if:interface-ref +--rw static-bridge-mrouter-interface* if:interface-ref
| {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-ac* if:interface-ref +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref
| {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw static-l2vpn-mrouter-interface-pw* +--rw static-l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| l2vpn-instance-pw-ref {static-mrouter-interface}? | {static-mrouter-interface}?
+--rw querier-source? inet:ipv6-address +--rw version? uint8
+--rw static-l2-multicast-group* [group source-addr] +--rw querier-source? inet:ipv6-address
| {static-l2-multicast-group}? +--rw static-l2-multicast-group* [group source-addr]
| +--rw group inet:ipv6-address | {static-l2-multicast-group}?
| +--rw source-addr source-ipv6-addr-type | +--rw group
| +--rw bridge-outgoing-interface* if:interface-ref | | rt-types:ipv6-multicast-group-address
| +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref | +--rw source-addr
| +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | rt-types:ipv6-multicast-source-address
+--ro entries-count? uint32 | +--rw bridge-outgoing-interface* if:interface-ref
+--ro bridge-mrouter-interface* if:interface-ref | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref
+--ro l2vpn-mrouter-interface-ac* if:interface-ref | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref
+--ro l2vpn-mrouter-interface-pw* +--ro entries-count? uint32
| l2vpn-instance-pw-ref +--ro bridge-mrouter-interface* if:interface-ref
+--ro group* [address] +--ro l2vpn-mrouter-interface-ac* if:interface-ref
| +--ro address inet:ipv6-address +--ro l2vpn-mrouter-interface-pw* l2vpn-instance-pw-ref
| +--ro mac-address? yang:phys-address +--ro group* [address]
| +--ro expire? uint32 | +--ro address rt-types:ipv6-multicast-group-address
| +--ro up-time? uint32 | +--ro mac-address? yang:phys-address
| +--ro last-reporter? inet:ipv6-address | +--ro expire uint32
| +--ro source* [address] | +--ro up-time uint32
| +--ro address inet:ipv6-address | +--ro last-reporter? inet:ipv6-address
| +--ro bridge-outgoing-interface* if:interface-ref | +--ro source* [address]
| +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref | +--ro address
| +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref | | rt-types:ipv6-multicast-source-address
| +--ro up-time? uint32 | +--ro bridge-outgoing-interface* if:interface-ref
| +--ro expire? uint32 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref
| +--ro host-count? uint32 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref
| | {explicit-tracking}? | +--ro up-time uint32
| +--ro last-reporter? inet:ipv6-address | +--ro expire uint32
| +--ro host* [host-address] {explicit-tracking}? | +--ro host-count? uint32
| +--ro host-address inet:ipv6-address | | {explicit-tracking}?
| +--ro host-filter-mode? enumeration | +--ro last-reporter? inet:ipv6-address
+--ro interfaces | +--ro host* [host-address] {explicit-tracking}?
+--ro interface* [name] | +--ro host-address inet:ipv6-address
+--ro name if:interface-ref | +--ro host-filter-mode filter-mode-type
+--ro statistics +--ro interfaces
+--ro received +--ro interface* [name]
| +--ro query? yang:counter64 +--ro name if:interface-ref
| +--ro report-v1? yang:counter64 +--ro statistics
| +--ro report-v2? yang:counter64 +--ro received
| +--ro done? yang:counter64 | +--ro num-query? yang:counter64
| +--ro pim? yang:counter64 | +--ro num-report-v1? yang:counter64
+--ro sent | +--ro num-report-v2? yang:counter64
+--ro query? yang:counter64 | +--ro num-done? yang:counter64
+--ro report-v1? yang:counter64 | +--ro num-pim-hello? yang:counter64
+--ro report-v2? yang:counter64 +--ro sent
+--ro done? yang:counter64 +--ro num-query? yang:counter64
+--ro pim? yang:counter64 +--ro num-report-v1? yang:counter64
+--ro num-report-v2? yang:counter64
+--ro num-done? yang:counter64
+--ro num-pim-hello? yang:counter64
2.4. IGMP and MLD Snooping Instances Reference 2.4. IGMP and MLD Snooping Instances Reference
The igmp-snooping-instance could be referenced in the scenario of BRIDGE The igmp-snooping-instance could be referenced in the scenario of BRIDGE
or L2VPN to configure the IGMP Snooping. or L2VPN to configure the IGMP Snooping.
For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge
to reference igmp-snooping-instance. It means IGMP Snooping is enabled to reference igmp-snooping-instance. It means IGMP Snooping is enabled
in the whole bridge. in the whole bridge.
skipping to change at page 9, line 10 skipping to change at page 9, line 10
augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn: augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn:
+--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
The mld-snooping-instance could be referenced in concurrence with igmp- The mld-snooping-instance could be referenced in concurrence with igmp-
snooping-instance to configure the MLD Snooping. snooping-instance to configure the MLD Snooping.
2.5. IGMP and MLD Snooping RPC 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 name? string | +---w name? igmp-mld-snooping-instance-ref
| +---w group? inet:ipv4-address | | {feature-igmp-snooping}?
| +---w source? inet:ipv4-address | +---w group? rt-types:ipv4-multicast-group-address
| +---w source? rt-types:ipv4-multicast-source-address
+---x clear-mld-snooping-groups {rpc-clear-groups}? +---x clear-mld-snooping-groups {rpc-clear-groups}?
+---w input +---w input
+---w name? string +---w name? igmp-mld-snooping-instance-ref
+---w group? inet:ipv6-address | {feature-mld-snooping}?
+---w source? inet:ipv6-address +---w group? rt-types:ipv6-multicast-group-address
+---w source? rt-types:ipv6-multicast-source-address
3. IGMP and MLD Snooping YANG Module 3. IGMP and MLD Snooping YANG Module
<CODE BEGINS> file ietf-igmp-mld-snooping@2018-10-11.yang <CODE BEGINS> file ietf-igmp-mld-snooping@2018-11-28.yang
module ietf-igmp-mld-snooping { module ietf-igmp-mld-snooping {
yang-version 1.1; yang-version 1.1;
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
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-routing {
prefix "rt";
}
import ietf-routing-types {
prefix "rt-types";
}
import ietf-l2vpn { import ietf-l2vpn {
prefix "l2vpn"; prefix "l2vpn";
} }
import ietf-network-instance { import ietf-network-instance {
prefix "ni"; prefix "ni";
} }
import ieee802-dot1q-bridge { import ieee802-dot1q-bridge {
prefix "dot1q"; prefix "dot1q";
} }
organization organization
"IETF PIM Working Group"; "IETF PIM Working Group";
contact contact
skipping to change at page 10, line 53 skipping to change at page 11, line 12
Redistribution and use in source and binary forms, with or Redistribution and use in source and binary forms, with or
without modification, is permitted pursuant to, and subject to without modification, is permitted pursuant to, and subject to
the license terms contained in, the Simplified BSD License set the license terms contained in, the Simplified BSD License set
forth in Section 4.c of the IETF Trust's Legal Provisions forth in Section 4.c of the IETF Trust's Legal Provisions
Relating to IETF Documents Relating to IETF Documents
(http://trustee.ietf.org/license-info). (http://trustee.ietf.org/license-info).
This version of this YANG module is part of RFC XXXX; see the This version of this YANG module is part of RFC XXXX; see the
RFC itself for full legal notices."; RFC itself for full legal notices.";
revision 2018-10-11 { revision 2018-11-28 {
description description
"Initial revision."; "Initial revision.";
reference reference
"RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping";
} }
/* /*
* Features * Features
*/ */
feature immediate-leave { feature feature-igmp-snooping {
description description
"Support configuration of immediate-leave."; "Support IGMP snooping protocol.";
reference
"RFC 4541, Section 1";
} }
feature join-group { feature feature-mld-snooping {
description description
"Support configuration of join-group."; "Support MLD snooping protocol.";
reference
"RFC 4541, Section 1";
}
feature immediate-leave {
description
"Support configuration of immediate-leave.";
reference
"RFC 2236, Section 10";
} }
feature require-router-alert { feature require-router-alert {
description description
"Support configuration of require-router-alert."; "Support configuration of require-router-alert.";
reference
"RFC 3376, Section 5.2";
} }
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.";
reference
"RFC 4541, Section 2.1";
} }
feature static-mrouter-interface { feature static-mrouter-interface {
description description
"Support configuration of mrouter interface."; "Support configuration of mrouter interface.";
reference
"RFC 4541, Section 2.1";
} }
feature rpc-clear-groups { feature rpc-clear-groups {
description description
"Support clearing statistics by RPC for IGMP & MLD snooping."; "Support clearing statistics by RPC for IGMP & MLD snooping.";
reference
"RFC 4541, Section 2.1";
} }
feature explicit-tracking { feature explicit-tracking {
description description
"Support configuration of per instance explicit-tracking."; "Support configuration of per instance explicit-tracking.";
reference
"RFC 3376, Appendix B";
} }
feature exclude-lite { feature exclude-lite {
description description
"Support configuration of per instance exclude-lite."; "Support configuration of per instance exclude-lite.";
reference
"RFC 5790, Section 3";
} }
/* /* identities */
* Typedefs
*/ identity scenario-type {
typedef igmp-snooping-instance-ref {
type leafref {
path "/igmp-snooping-instances/igmp-snooping-instance/name";
}
description description
"This type is used by data models that need to reference "Base identity for scenario type in IGMP & MLD snooping";
IGMP snooping instance.";
} }
typedef mld-snooping-instance-ref { identity bridge {
base scenario-type;
description
"This identity represents BRIDGE scenario.";
}
identity l2vpn {
base scenario-type;
description
"This identity represents L2VPN scenario.";
}
identity filter-mode {
description
"Base identity for filter mode in IGMP & MLD snooping";
}
identity include {
base filter-mode;
description
"This identity represents include mode.";
}
identity exclude {
base filter-mode;
description
"This identity represents exclude mode.";
}
identity igmp-snooping {
base rt:control-plane-protocol;
description
"IGMP snooping protocol";
}
identity mld-snooping {
base rt:control-plane-protocol;
description
"MLD snooping protocol";
}
/*
* Typedefs
*/
typedef snooping-scenario-type {
type identityref {
base "scenario-type";
}
description "The IGMP & MLD snooping scenario type";
}
typedef filter-mode-type {
type identityref {
base "filter-mode";
}
description "The host filter mode";
}
typedef igmp-mld-snooping-instance-ref {
type leafref { type leafref {
path "/mld-snooping-instances/mld-snooping-instance/name"; path "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol/rt:name";
} }
description description
"This type is used by data models that need to reference "This type is used by data models which need to
MLD snooping instance."; reference IGMP & MLD snooping instance.";
} }
typedef l2vpn-instance-ac-ref { typedef l2vpn-instance-ac-ref {
type leafref { type leafref {
path "/ni:network-instances/ni:network-instance"+ path "/ni:network-instances/ni:network-instance"+
"/l2vpn:endpoint/l2vpn:name"; "/l2vpn:endpoint/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 "/ni:network-instances/ni:network-instance"+ path "/ni:network-instances/ni:network-instance"+
"/l2vpn:endpoint/l2vpn:name"; "/l2vpn:endpoint/l2vpn:name";
} }
description "l2vpn-instance-pw-ref"; description "l2vpn-instance-pw-ref";
} }
typedef source-ipv4-addr-type { /*
type union { * Groupings
type enumeration { */
enum '*' {
description
"Any source address.";
}
}
type inet:ipv4-address;
}
description
"Multicast source IPV4 address type.";
} // source-ipv4-addr-type
typedef source-ipv6-addr-type {
type union {
type enumeration {
enum '*' {
description
"Any source address.";
}
}
type inet:ipv6-address;
}
description
"Multicast source IPV6 address type.";
} // source-ipv6-addr-type
/*
* Groupings
*/
grouping instance-config-attributes-igmp-snooping { grouping instance-config-attributes-igmp-snooping {
description "IGMP snooping configuration for each"+ description
"BRIDGE or L2VPN instance."; "IGMP snooping configuration for each BRIDGE or L2VPN instance.";
uses instance-config-attributes-igmp-mld-snooping; uses instance-config-attributes-igmp-mld-snooping;
leaf version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP snooping version.";
}
leaf querier-source { leaf querier-source {
type inet:ipv4-address; type inet:ipv4-address;
description "Use the IGMP snooping querier to support IGMP description
snooping in a VLAN where PIM and IGMP are not configured. "Use the IGMP snooping querier to support IGMP
The IPV4 address is used as source address in messages."; snooping in a VLAN where PIM and IGMP are not configured.
The IPV4 address is used as source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature static-l2-multicast-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:ipv4-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPV4 address"; "Multicast group IPV4 address";
} }
leaf source-addr { leaf source-addr {
type source-ipv4-addr-type; type rt-types:ipv4-multicast-source-address;
description description
"Multicast source IPV4 address."; "Multicast source IPV4 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../type = 'bridge'"; when "../../scenario = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../type = 'l2vpn'"; when "../../scenario = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../type = 'l2vpn'"; when "../../scenario = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
} // 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 14, line 51 skipping to change at page 16, line 19
} }
} }
default "ip"; default "ip";
description "The default forwarding mode is ip"; description "The default forwarding mode is ip";
} }
leaf explicit-tracking { leaf explicit-tracking {
if-feature explicit-tracking; if-feature explicit-tracking;
type boolean; type boolean;
default false; default false;
description "Tracks IGMP & MLD snooping v3 membership reports description
from individual hosts. It contributes to saving network "Track the IGMP & MLD snooping v3 membership reports
resources and shortening leave latency."; from individual hosts. It contributes to saving network
resources and shortening leave latency.";
} }
leaf exclude-lite { leaf exclude-lite {
if-feature exclude-lite; if-feature exclude-lite;
type boolean; type boolean;
default false; default false;
description description
"lightweight IGMPv3 and MLDv2 protocols, which simplify the "Track the Lightweight IGMPv3 and MLDv2 protocol report";
standard versions of IGMPv3 and MLDv2.";
reference "RFC5790"; reference "RFC5790";
} }
leaf send-query { leaf send-query {
type boolean; type boolean;
default false; default false;
description "Enable quick response for topo changes. description
To support IGMP snooping in a VLAN where PIM and IGMP are "Enable quick response for topology changes.
not configured. It cooperates with param querier-source. "; To support IGMP snooping in a VLAN where PIM and IGMP are
not configured. It cooperates with parameter querier-source.";
} }
leaf immediate-leave { leaf immediate-leave {
if-feature immediate-leave; if-feature immediate-leave;
type empty; type empty;
description description
"When immediate leave is enabled, the IGMP software assumes "When immediate leave is enabled, the IGMP software assumes
that no more than one host is present on each VLAN port."; that 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..1023";
} }
units seconds; units seconds;
default 1; default 1;
description description
"Last Member Query Interval, which may be tuned to modify "Last Member Query Interval, which may be tuned to modify
the leave latency of the network."; the leave latency of the network.";
reference "RFC3376. Sec. 8.8."; reference "RFC3376. Sec. 8.8.";
} }
leaf query-interval { leaf query-interval {
skipping to change at page 16, line 15 skipping to change at page 17, line 34
default 10; default 10;
description description
"Query maximum response time specifies the maximum time "Query maximum response time specifies the maximum time
allowed before sending a responding report."; allowed before sending a responding report.";
reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3.";
} }
leaf require-router-alert { leaf require-router-alert {
if-feature require-router-alert; if-feature require-router-alert;
type boolean; type boolean;
default false; default false;
description description
"When the value is true, router alert should exist "When the value is true, router alert should exist
in the IP head of IGMP or MLD packet."; in the IP head of IGMP or MLD packet.";
} }
leaf robustness-variable { leaf robustness-variable {
type uint8 { type uint8 {
range "1..7"; range "1..7";
} }
default 2; default 2;
description description
"Querier's Robustness Variable allows tuning for the "Querier's Robustness Variable allows tuning for the
expected packet loss on a network."; expected packet loss on a network.";
reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1.";
} }
leaf version {
type uint8 {
range "1..3";
}
default 2;
description "IGMP and MLD snooping version.";
}
leaf-list static-bridge-mrouter-interface { leaf-list static-bridge-mrouter-interface {
when "../type = 'bridge'"; when "../scenario = 'bridge'";
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description "static mrouter interface in BRIDGE forwarding"; description "static mrouter interface in BRIDGE forwarding";
} }
leaf-list static-l2vpn-mrouter-interface-ac { leaf-list static-l2vpn-mrouter-interface-ac {
when "../type = 'l2vpn'"; when "../scenario = 'l2vpn'";
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type if:interface-ref; type if:interface-ref;
description "static mrouter interface whose type is interface description
in L2VPN forwarding"; "static mrouter interface whose type is interface
in L2VPN forwarding";
} }
leaf-list static-l2vpn-mrouter-interface-pw { leaf-list static-l2vpn-mrouter-interface-pw {
when "../type = 'l2vpn'"; when "../scenario = 'l2vpn'";
if-feature static-mrouter-interface; if-feature static-mrouter-interface;
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "static mrouter interface whose type is PW description
in L2VPN forwarding"; "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;
leaf version {
type uint8 {
range "1..2";
}
default 2;
description "MLD snooping version.";
}
leaf querier-source { leaf querier-source {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Use the MLD snooping querier to support MLD snooping where "Use the MLD snooping querier to support MLD snooping where
PIM and MLD are not configured. The IPV6 address is used as PIM and MLD are not configured. The IPV6 address is used as
the source address in messages."; the source address in messages.";
} }
list static-l2-multicast-group { list static-l2-multicast-group {
if-feature static-l2-multicast-group; if-feature static-l2-multicast-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 rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPV6 address"; "Multicast group IPV6 address";
} }
leaf source-addr { leaf source-addr {
type source-ipv6-addr-type; type rt-types:ipv6-multicast-source-address;
description description
"Multicast source IPV6 address."; "Multicast source IPV6 address.";
} }
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../type = 'bridge'"; when "../../scenario = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../type = 'l2vpn'"; when "../../scenario = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../type = 'l2vpn'"; when "../../scenario = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
} // 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.";
leaf mac-address { leaf mac-address {
type yang:phys-address; type yang:phys-address;
description "Destination MAC address for L2 multicast."; description "Destination MAC address for L2 multicast.";
} }
leaf expire { leaf expire {
type uint32; type uint32;
units seconds; units seconds;
mandatory true;
description description
"The time left before multicast group timeout."; "The time left before multicast group timeout.";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
mandatory true;
description description
"The time elapsed since L2 multicast record created."; "The time elapsed since L2 multicast record created.";
} }
} // 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 instance."; "State attributes for IGMP snooping for each 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 rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPV4 address"; "Multicast group IPV4 address";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report to join "Address of the last host which has sent report to join
skipping to change at page 19, line 19 skipping to change at page 20, line 41
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report to join "Address of the last host which has sent report to join
the multicast group."; the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPV4 address for multicast stream"; description "Source IPV4 address for multicast stream";
leaf address { leaf address {
type inet:ipv4-address; type rt-types:ipv4-multicast-source-address;
description "Source IPV4 address for multicast stream"; description "Source IPV4 address for multicast stream";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
description description
"List of multicast membership hosts "List of multicast membership hosts
of the specific multicast source-group."; of the specific multicast source-group.";
leaf host-address { leaf host-address {
type inet:ipv4-address; type inet:ipv4-address;
description description
"Multicast membership host address."; "Multicast membership host address.";
} }
leaf host-filter-mode { leaf host-filter-mode {
type enumeration { type filter-mode-type;
enum "include" { mandatory true;
description
"In include mode";
}
enum "exclude" {
description
"In exclude mode.";
}
}
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
} // 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 IGMP & MLD snooping instance."; "State attributes for IGMP & MLD snooping 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 & MLD snooping"; "The number of L2 multicast entries in IGMP & MLD snooping";
} }
leaf-list bridge-mrouter-interface { leaf-list bridge-mrouter-interface {
when "../type = 'bridge'"; when "../scenario = 'bridge'";
type if:interface-ref; type if:interface-ref;
config false; config false;
description "mrouter interface in BRIDGE forwarding"; description "mrouter interface in BRIDGE forwarding";
} }
leaf-list l2vpn-mrouter-interface-ac { leaf-list l2vpn-mrouter-interface-ac {
when "../type = 'l2vpn'"; when "../scenario = 'l2vpn'";
type if:interface-ref; type if:interface-ref;
config false; config false;
description "mrouter interface whose type is interface description
in L2VPN forwarding"; "mrouter interface whose type is interface
in L2VPN forwarding";
} }
leaf-list l2vpn-mrouter-interface-pw { leaf-list l2vpn-mrouter-interface-pw {
when "../type = 'l2vpn'"; when "../scenario = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
config false; config false;
description "mrouter interface whose type is PW description
in L2VPN forwarding"; "mrouter interface whose type is PW in L2VPN forwarding";
} }
} // 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;
list group { list group {
key "address"; key "address";
config false; config false;
description "MLD snooping statistics information"; description "MLD snooping statistics information";
leaf address { leaf address {
type inet:ipv6-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPV6 address"; "Multicast group IPV6 address";
} }
uses instance-state-group-attributes-igmp-mld-snooping; uses instance-state-group-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list source { list source {
key "address"; key "address";
description "Source IPV6 address for multicast stream"; description "Source IPV6 address for multicast stream";
leaf address { leaf address {
type inet:ipv6-address; type rt-types:ipv6-multicast-source-address;
description "Source IPV6 address for multicast stream"; description "Source IPV6 address for multicast stream";
} }
uses instance-state-source-attributes-igmp-mld-snooping; uses instance-state-source-attributes-igmp-mld-snooping;
leaf last-reporter { leaf last-reporter {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Address of the last host which has sent report "Address of the last host which has sent report
to join the multicast group."; to join the multicast group.";
} }
list host { list host {
if-feature explicit-tracking; if-feature explicit-tracking;
key "host-address"; key "host-address";
description description
"List of multicast membership hosts "List of multicast membership hosts
of the specific multicast source-group."; of the specific multicast source-group.";
leaf host-address { leaf host-address {
type inet:ipv6-address; type inet:ipv6-address;
description description
"Multicast membership host address."; "Multicast membership host address.";
} }
leaf host-filter-mode { leaf host-filter-mode {
type enumeration { type filter-mode-type;
enum "include" { mandatory true;
description
"In include mode";
}
enum "exclude" {
description
"In exclude mode.";
}
}
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
} // 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 IGMP & MLD snooping instance."; "State attributes for IGMP & MLD snooping instance.";
leaf-list bridge-outgoing-interface { leaf-list bridge-outgoing-interface {
when "../../../type = 'bridge'"; when "../../../scenario = 'bridge'";
type if:interface-ref; type if:interface-ref;
description "Outgoing interface in BRIDGE forwarding"; description "Outgoing interface in BRIDGE forwarding";
} }
leaf-list l2vpn-outgoing-ac { leaf-list l2vpn-outgoing-ac {
when "../../../type = 'l2vpn'"; when "../../../scenario = 'l2vpn'";
type l2vpn-instance-ac-ref; type l2vpn-instance-ac-ref;
description "Outgoing AC in L2VPN forwarding"; description "Outgoing AC in L2VPN forwarding";
} }
leaf-list l2vpn-outgoing-pw { leaf-list l2vpn-outgoing-pw {
when "../../../type = 'l2vpn'"; when "../../../scenario = 'l2vpn'";
type l2vpn-instance-pw-ref; type l2vpn-instance-pw-ref;
description "Outgoing PW in L2VPN forwarding"; description "Outgoing PW in L2VPN forwarding";
} }
leaf up-time { leaf up-time {
type uint32; type uint32;
units seconds; units seconds;
description "The time elapsed since L2 multicast mandatory true;
record created"; description
"The time elapsed since L2 multicast record created";
} }
leaf expire { leaf expire {
type uint32; type uint32;
units seconds; units seconds;
mandatory true;
description description
"The time left before multicast group timeout."; "The time left before multicast group timeout.";
} }
leaf host-count { leaf host-count {
if-feature explicit-tracking; if-feature explicit-tracking;
type uint32; type uint32;
description description
"The number of host addresses."; "The number of host addresses.";
} }
} // instance-state-source-attributes-igmp-mld-snooping } // instance-state-source-attributes-igmp-mld-snooping
grouping igmp-snooping-statistics-sent-received { grouping igmp-snooping-statistics {
description description
"The statistics attributes for IGMP snooping."; "The statistics attributes for IGMP snooping.";
leaf query { leaf num-query {
type yang:counter64; type yang:counter64;
description description
"The number of query messages."; "The number of query messages.";
reference
"RFC 2236, Section 2.1";
} }
leaf membership-report-v1 { leaf num-membership-report-v1 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v1 messages."; "The number of membership report v1 messages.";
reference
"RFC 3376, Section 4";
} }
leaf membership-report-v2 { leaf num-membership-report-v2 {
type yang:counter64; type yang:counter64;
description description
"The number of membership report v2 messages."; "The number of membership report v2 messages.";
reference
"RFC 3376, Section 4";
} }
leaf membership-report-v3 { leaf num-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.";
reference
"RFC 3376, Section 4";
} }
leaf leave { leaf num-leave {
type yang:counter64; type yang:counter64;
description description
"The number of leave messages."; "The number of leave messages.";
reference
"RFC 3376, Section 4";
} }
leaf non-member-leave { leaf num-non-member-leave {
type yang:counter64; type yang:counter64;
description description
"The number of non member leave messages."; "The number of non member leave messages.";
reference
"RFC 3376, Section 4";
} }
leaf pim { leaf num-pim-hello {
type yang:counter64; type yang:counter64;
description description
"The number of pim hello messages."; "The number of PIM hello messages.";
reference
"RFC 7761, Section 4.9";
} }
} // igmp-snooping-statistics-sent-received } // igmp-snooping-statistics
grouping mld-snooping-statistics-sent-received { grouping mld-snooping-statistics {
description description
"The statistics attributes for MLD snooping."; "The statistics attributes for MLD snooping.";
leaf query { leaf num-query {
type yang:counter64; type yang:counter64;
description description
"The number of Multicast Listener Query messages."; "The number of Multicast Listener Query messages.";
reference
"RFC 3810, Section 5";
} }
leaf report-v1 { leaf num-report-v1 {
type yang:counter64; type yang:counter64;
description description
"The number of Version 1 Multicast Listener Report."; "The number of Version 1 Multicast Listener Report.";
reference
"RFC 3810, Section 5";
} }
leaf report-v2 { leaf num-report-v2 {
type yang:counter64; type yang:counter64;
description description
"The number of Version 2 Multicast Listener Report."; "The number of Version 2 Multicast Listener Report.";
reference
"RFC 3810, Section 5";
} }
leaf done { leaf num-done {
type yang:counter64; type yang:counter64;
description description
"The number of Version 1 Multicast Listener Done."; "The number of Version 1 Multicast Listener Done.";
reference
"RFC 3810, Section 5";
} }
leaf pim { leaf num-pim-hello {
type yang:counter64; type yang:counter64;
description description
"The number of pim hello messages."; "The number of PIM hello messages.";
} reference
} // mld-snooping-statistics-sent-received "RFC 7761, Section 4.9";
grouping interface-endpoint-attributes-igmp-snooping {
description "interface attributes for IGMP snooping";
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 {
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-igmp-snooping
grouping interface-endpoint-attributes-mld-snooping {
description "interface endpoint attributes MLD snooping";
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: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 } // mld-snooping-statistics
} // interface-endpoint-attributes-mld-snooping
grouping igmp-snooping-interface-statistics-attributes { grouping igmp-snooping-interface-statistics-attributes {
description "Interface statistics attributes for IGMP snooping"; description "Interface statistics attributes for IGMP snooping";
container interfaces { container interfaces {
config false; config false;
description description
"Interfaces associated with the IGMP snooping instance"; "Interfaces associated with the IGMP snooping instance";
list interface { list interface {
key "name"; key "name";
description description
"Interfaces associated with the IGMP snooping instance"; "Interfaces associated with the IGMP snooping instance";
leaf name { leaf name {
type if:interface-ref; type if:interface-ref;
description description
"The name of interface"; "The name of interface";
} }
container statistics { container statistics {
description description
"The interface statistics for IGMP snooping"; "The interface statistics for IGMP snooping";
container received { container received {
description description
"Statistics of received IGMP snooping packets."; "Statistics of received IGMP snooping packets.";
uses igmp-snooping-statistics-sent-received; uses igmp-snooping-statistics;
} }
container sent { container sent {
description description
"Statistics of sent IGMP snooping packets."; "Statistics of sent IGMP snooping packets.";
uses igmp-snooping-statistics-sent-received; uses igmp-snooping-statistics;
} }
} }
} }
} }
} //igmp-snooping-interface-statistics-attributes }//igmp-snooping-interface-statistics-attributes
grouping mld-snooping-interface-statistics-attributes { grouping mld-snooping-interface-statistics-attributes {
description "Interface statistics attributes for MLD snooping"; description "Interface statistics attributes for MLD snooping";
container interfaces { container interfaces {
config false; config false;
description description
"Interfaces associated with the MLD snooping instance"; "Interfaces associated with the MLD snooping instance";
list interface { list interface {
key "name"; key "name";
description description
"Interfaces associated with the MLD snooping instance"; "Interfaces associated with the MLD snooping instance";
leaf name { leaf name {
type if:interface-ref; type if:interface-ref;
description description
"The name of interface"; "The name of interface";
} }
container statistics { container statistics {
description description
"The interface statistics for MLD snooping"; "The interface statistics for MLD snooping";
container received { container received {
description description
"Statistics of received MLD snooping packets."; "Statistics of received MLD snooping packets.";
uses mld-snooping-statistics-sent-received; uses mld-snooping-statistics;
} }
container sent { container sent {
description description
"Statistics of sent MLD snooping packets."; "Statistics of sent MLD snooping packets.";
uses mld-snooping-statistics;
uses mld-snooping-statistics-sent-received;
} }
} }
} }
} }
} //mld-snooping-interface-statistics-attributes }//mld-snooping-interface-statistics-attributes
augment "/rt:routing/rt:control-plane-protocols"+
"/rt:control-plane-protocol" {
/*
* igmp-snooping-instance
*/
container igmp-snooping-instances {
description description
"igmp-snooping-instance list"; "IGMP & MLD snooping augmentation to control plane protocol
configuration and state.";
list igmp-snooping-instance { /*
key "name"; * igmp-snooping-instance
description */
"IGMP snooping instance to configure the igmp-snooping.";
leaf name { container igmp-snooping-instance {
type string; when "derived-from-or-self(../rt:type, 'ims:igmp-snooping')" {
description description
"Name of the igmp-snooping-instance"; "This container is only valid for IGMP snooping protocol.";
} }
if-feature feature-igmp-snooping;
description
"IGMP snooping instance to configure the igmp-snooping.";
leaf type { leaf scenario {
type enumeration { type snooping-scenario-type;
enum "bridge" { default bridge;
description "BRIDGE"; description
} "The scenario indicates BRIDGE or L2VPN.";
enum "l2vpn" {
description "L2VPN";
}
}
description "The type indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-igmp-snooping; uses instance-config-attributes-igmp-snooping;
uses instance-state-attributes-igmp-snooping; uses instance-state-attributes-igmp-snooping;
uses igmp-snooping-interface-statistics-attributes; uses igmp-snooping-interface-statistics-attributes;
} //igmp-snooping-instance } //igmp-snooping-instance
} //igmp-snooping-instances
/*
* mld-snooping-instance
*/
container mld-snooping-instances { /*
description * mld-snooping-instance
"mld-snooping-instance list"; */
list mld-snooping-instance { container mld-snooping-instance {
key "name"; when "derived-from-or-self(../rt:type, 'ims:mld-snooping')" {
description
"This container is only valid for MLD snooping protocol.";
}
if-feature feature-mld-snooping;
description description
"MLD snooping instance to configure the mld-snooping."; "MLD snooping instance to configure the mld-snooping.";
leaf name { leaf scenario {
type string; type snooping-scenario-type;
default bridge;
description description
"Name of the mld-snooping-instance"; "The scenario indicates BRIDGE or L2VPN.";
}
leaf type {
type enumeration {
enum "bridge" {
description "BRIDGE";
}
enum "l2vpn" {
description "L2VPN";
}
}
description "The type indicates BRIDGE or L2VPN.";
} }
uses instance-config-attributes-mld-snooping; uses instance-config-attributes-mld-snooping;
uses instance-state-attributes-mld-snooping; uses instance-state-attributes-mld-snooping;
uses mld-snooping-interface-statistics-attributes; uses mld-snooping-interface-statistics-attributes;
} //mld-snooping-instance
} //mld-snooping-instances
/* augments */ }//mld-snooping-instance
}
augment "/dot1q:bridges/dot1q:bridge" { augment "/dot1q:bridges/dot1q:bridge" {
description description
"Reference IGMP & MLD snooping instance in BRIDGE scenario"; "Reference IGMP & MLD snooping instance in BRIDGE scenario";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure IGMP snooping instance under bridge view"; "Configure IGMP snooping instance under bridge view";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure MLD snooping instance under bridge view"; "Configure MLD snooping instance under bridge view";
} }
} }
augment "/dot1q:bridges/dot1q:bridge"+ augment "/dot1q:bridges/dot1q:bridge"+
"/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" { "/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" {
description description
"Refrence IGMP & MLD snooping instance in BRIDGE scenario"; "Reference IGMP & MLD snooping instance in BRIDGE scenario";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure IGMP snooping instance under VLAN view"; "Configure IGMP snooping instance under VLAN view";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure MLD snooping instance under VLAN view"; "Configure MLD snooping instance under VLAN view";
} }
} }
augment "/ni:network-instances/ni:network-instance"+ augment "/ni:network-instances/ni:network-instance"+
"/ni:ni-type/l2vpn:l2vpn" { "/ni:ni-type/l2vpn:l2vpn" {
description description
"Reference IGMP & MLD snooping instance in L2VPN scenario"; "Reference IGMP & MLD snooping instance in L2VPN scenario";
leaf igmp-snooping-instance { leaf igmp-snooping-instance {
type igmp-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure IGMP snooping instance in L2VPN scenario"; "Configure IGMP snooping instance in L2VPN scenario";
} }
leaf mld-snooping-instance { leaf mld-snooping-instance {
type mld-snooping-instance-ref; type igmp-mld-snooping-instance-ref;
description description
"Configure MLD snooping instance in L2VPN scenario"; "Configure MLD snooping instance in L2VPN scenario";
} }
} }
/* RPCs */ /* RPCs */
rpc clear-igmp-snooping-groups { rpc clear-igmp-snooping-groups {
if-feature rpc-clear-groups; if-feature rpc-clear-groups;
description description
"Clears the specified IGMP snooping cache tables."; "Clear the specified IGMP snooping cache tables.";
input { input {
leaf name { leaf name {
type string; if-feature feature-igmp-snooping;
type igmp-mld-snooping-instance-ref;
description description
"Name of the igmp-snooping-instance"; "Name of the igmp-snooping-instance";
} }
leaf group { leaf group {
type inet:ipv4-address; type rt-types:ipv4-multicast-group-address;
description description
"Multicast group IPv4 address. "Multicast group IPv4 address. If it is not specified,
If it is not specified, all IGMP snooping group tables all IGMP snooping group tables are cleared.";
are cleared.";
} }
leaf source { leaf source {
type inet:ipv4-address; type rt-types:ipv4-multicast-source-address;
description description
"Multicast source IPv4 address. "Multicast source IPv4 address. If it is not specified,
If it is not specified, all IGMP snooping source-group all IGMP snooping source-group tables are cleared.";
tables are 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."; "Clear the specified MLD snooping cache tables.";
input { input {
leaf name { leaf name {
type string; if-feature feature-mld-snooping;
type igmp-mld-snooping-instance-ref;
description description
"Name of the mld-snooping-instance"; "Name of the mld-snooping-instance";
} }
leaf group { leaf group {
type inet:ipv6-address; type rt-types:ipv6-multicast-group-address;
description description
"Multicast group IPv6 address. "Multicast group IPv6 address. If it is not specified,
If it is not specified, all MLD snooping group tables are all MLD snooping group tables are cleared.";
cleared.";
} }
leaf source { leaf source {
type inet:ipv6-address; type rt-types:ipv6-multicast-source-address;
description description
"Multicast source IPv6 address. "Multicast source IPv6 address. If it is not specified,
If it is not specified, all MLD snooping source-group all MLD snooping source-group tables are cleared.";
tables are cleared.";
} }
} }
} // rpc clear-mld-snooping-groups } // rpc clear-mld-snooping-groups
} }
<CODE ENDS> <CODE ENDS>
4. Security Considerations 4. Security Considerations
The YANG module specified in this document defines a schema for data The YANG module specified in this document defines a schema for data
that is designed to be accessed via network management protocols such that is designed to be accessed via network management protocols such as
as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the
is the secure transport layer, and the mandatory-to-implement secure secure transport layer, and the mandatory-to-implement secure transport
transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and
is HTTPS, and the mandatory-to-implement secure transport is TLS the mandatory-to-implement secure transport is TLS [RFC5246].
[RFC5246].
The NETCONF access control model [RFC6536] provides the means to The NETCONF access control model [RFC6536] provides the means to
restrict access for particular NETCONF or RESTCONF users to a restrict access for particular NETCONF or RESTCONF users to a
preconfigured subset of all available NETCONF or RESTCONF protocol preconfigured subset of all available NETCONF or RESTCONF protocol
operations and content. operations and content.
There are a number of data nodes defined in this YANG module that are There are a number of data nodes defined in this YANG module that are
writable/creatable/deletable (i.e., config true, which is the writable/creatable/deletable (i.e., config true, which is the default).
default). These data nodes may be considered sensitive or vulnerable These data nodes may be considered sensitive or vulnerable in some
in some network environments. Write operations (e.g., edit-config) to network environments. Write operations (e.g., edit-config) to these data
these data nodes without proper protection can have a negative effect nodes without proper protection can have a negative effect on network
on network operations. These are the subtrees and data nodes and operations. These are the subtrees and data nodes and their
their sensitivity/vulnerability: sensitivity/vulnerability:
/ims:igmp-snooping-instances/ims:igmp-snooping-instance /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ims:igmp-snooping-
instance
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ims:mld-snooping-
instance
/ims:mld-snooping-instances/ims:mld-snooping-instance The subtrees under /dot1q:bridges/dot1q:bridge
Unauthorized access to any data node of these subtrees can adversely /dot1q:bridges/dot1q:bridge/ims:igmp-snooping-instance
affect the IGMP & MLD Snooping subsystem of both the local device and /dot1q:bridges/dot1q:bridge/ims:mld-snooping-instance
the network. This may lead to network malfunctions, delivery of
packets to inappropriate destinations, and other problems.
Some of the readable data nodes in this YANG module may be considered The subtrees under
sensitive or vulnerable in some network environments. It is thus /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vlan/dot1q:vlan
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data
nodes and their sensitivity/vulnerability:
/ims:igmp-snooping-instances/ims:igmp-snooping-instance /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vlan/dot1q:vlan/ims:igmp-
snooping-instance
/dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vlan/dot1q:vlan/ims:mld-
snooping-instance
/ims:mld-snooping-instances/ims:mld-snooping-instance The subtrees under /ni:network-instances/ni:network-instance/ni:ni-
type/l2vpn:l2vpn
Unauthorized access to any data node of these subtrees can disclose /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn/ims:igmp-snooping-
the operational state information of IGMP & MLD Snooping on this instance
device. /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn/ims:mld-snooping-
instance
Some of the RPC operations in this YANG module may be considered Unauthorized access to any data node of these subtrees can adversely
sensitive or vulnerable in some network environments. It is thus affect the IGMP & MLD Snooping subsystem of both the local device and
important to control access to these operations. The IGMP & MLD the network. This may lead to network malfunctions, delivery of packets
Snooping Yang module support the "clear-igmp-snooping-groups" and " to inappropriate destinations, and other problems.
clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC
operation invocation, the IGMP and MLD Snooping group tables will be
cleared unexpectedly.
5. IANA Considerations Some of the readable data nodes in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus
important to control read access (e.g., via get, get-config, or
notification) to these data nodes. These are the subtrees and data nodes
and their sensitivity/vulnerability:
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ims:igmp-snooping-
actual RFC number (and remove this note). instance
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol/ims:mld-snooping-
instance
This document registers the following namespace URIs in the IETF XML Unauthorized access to any data node of these subtrees can disclose the
operational state information of IGMP & MLD Snooping on this device.
registry [RFC3688]: Some of the RPC operations in this YANG module may be considered
sensitive or vulnerable in some network environments. It is thus
important to control access to these operations. The IGMP & MLD Snooping
Yang module support the "clear-igmp-snooping-groups" and " clear-mld-
snooping-groups" RPCs. If it meets unauthorized RPC operation
invocation, the IGMP and MLD Snooping group tables will be cleared
unexpectedly.
-------------------------------------------------------------------- 5. IANA Considerations
URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping RFC Ed.: In this section, replace all occurrences of 'XXXX' with the
actual RFC number (and remove this note).
Registrant Contact: The IESG. This document registers the following namespace URIs in the IETF XML
XML: N/A, the requested URI is an XML namespace. registry [RFC3688]:
-------------------------------------------------------------------- --------------------------------------------------------------------
This document registers the following YANG modules in the YANG URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping
Module Names registry [RFC7950]:
-------------------------------------------------------------------- Registrant Contact: The IESG.
name: ietf-igmp-mld-snooping XML: N/A, the requested URI is an XML namespace.
namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping --------------------------------------------------------------------
prefix: ims This document registers the following YANG modules in the YANG Module
Names registry [RFC7950]:
reference: RFC XXXX --------------------------------------------------------------------
name: ietf-igmp-mld-snooping
-------------------------------------------------------------------- namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping
prefix: ims
reference: RFC XXXX
--------------------------------------------------------------------
-------------------------------------------------------------------
6. Normative References 6. Normative References
[P802.1Qcp/D2.2] IEEE Approved Draft Standard for Local and [P802.1Qcp/D2.2] IEEE Approved Draft Standard for Local and
Metropolitan Area Networks, "Bridges and Bridged Networks Metropolitan Area Networks, "Bridges and Bridged Networks Amendment:
Amendment: YANG Data Model", Mar 2018 YANG Data Model", Mar 2018
[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 1999. Listener Discovery (MLD) for IPv6", RFC 2710, October 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.
skipping to change at page 35, line 10 skipping to change at page 35, line 19
Datastore Architecture (NMDA)", RFC 8342, March 2018. Datastore Architecture (NMDA)", RFC 8342, March 2018.
[RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management", [RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management",
RFC 8343, March 2018. RFC 8343, March 2018.
[draft-ietf-pim-igmp-mld-yang-06] X. Liu, F. Guo, M. Sivakumar, P. [draft-ietf-pim-igmp-mld-yang-06] X. Liu, F. Guo, M. Sivakumar, P.
McAllister, A. Peter, "A YANG data model for Internet Group McAllister, A. Peter, "A YANG data model for Internet Group
Management Protocol (IGMP) and Multicast Listener Discovery Management Protocol (IGMP) and Multicast Listener Discovery
(MLD)", draft-ietf-pim-igmp-mld-yang-06, Oct 20, 2017. (MLD)", draft-ietf-pim-igmp-mld-yang-06, Oct 20, 2017.
[draft-dsdt-nmda-guidelines-01] M. Bjorklund, J. Schoenwaelder, P.
Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module
Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017
[draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data
Model for Interface Management", draft-bjorklund-netmod- Model for Interface Management", draft-bjorklund-netmod-
rfc7223bis-00, August 21, 2017 rfc7223bis-00, August 21, 2017
[draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data
Model for IP Management", draft-bjorklund-netmod- Model for IP Management", draft-bjorklund-netmod-
rfc7277bis-00, August 21, 2017 rfc7277bis-00, August 21, 2017
[draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J. [draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J.
Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network
skipping to change at page 36, line 7 skipping to change at page 36, line 7
Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for
MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt, MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt,
February 17, 2018 February 17, 2018
[draft-ietf-rtgwg-ni-model-12] L. Berger, C. Hopps, A. Lindem, X. [draft-ietf-rtgwg-ni-model-12] L. Berger, C. Hopps, A. Lindem, X.
Liu, "YANG Model for Network Instances", draft-ietf-rtgwg- Liu, "YANG Model for Network Instances", draft-ietf-rtgwg-
ni-model-12.txt, March 19, 2018 ni-model-12.txt, March 19, 2018
Appendix A. Data Tree Example Appendix A. Data Tree Example
This section contains an example of an instance data tree in the JSON A.1 Bridge scenario
This section contains an example for bridge scenario in the JSON
encoding [RFC7951], containing both configuration and state data. encoding [RFC7951], containing both configuration and state data.
+-----------+ +-----------+
+ Source + + Source +
+-----+-----+ +-----+-----+
| |
-----------------+---------------------------- -----------------+----------------------------
|eth1/1 |eth1/1
+---+---+ +---+---+
+ R1 + + R1 +
skipping to change at page 37, line 5 skipping to change at page 36, line 39
+---+---+ +--+---+ +---+---+ +--+---+
eth2/2 | | eth3/2 eth2/2 | | eth3/2
| | | |
---------------+----------+------------------- ---------------+----------+-------------------
| | | |
| | | |
+--------+--+ +---+--------+ +--------+--+ +---+--------+
+ Receiver1 + + Receiver2 + + Receiver1 + + Receiver2 +
+-----------+ +------------+ +-----------+ +------------+
The configuration instance data tree for R1 in the above figure could be The configuration data for R1 in the above figure could be as follows:
as follows:
{ {
"ietf-igmp-mld-snooping:igmp-snooping-instances": { "ietf-interfaces:interfaces":{
"igmp-snooping-instance": [ "interface":[
{ {
"name": "ins101", "name":"eth1/1",
"type": "bridge", "type":"iana-if-type:ethernetCsmacd"
"enable": true
}
]
},
"ietf-igmp-mld-snooping:mld-snooping-instances": {
"mld-snooping-instance": [
{
"name": "ins102",
"type": "bridge",
"enable": true
}
]
},
"ieee802-dot1q-bridge:bridges": {
"bridge": [
{
"name": "isp",
"address": "00-23-ef-a5-77-12",
"bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge",
"component": [
{
"name": "comp1",
"type": "ieee802-dot1q-bridge:c-vlan-component",
"bridge-vlan": {
"vlan": [
{
"vid": 101,
"ietf-igmp-mld-snooping:igmp-snooping-instance": "ins101"
},
{
"vid": 102,
"ietf-igmp-mld-snooping:mld-snooping-instance": "ins102"
}
]
}
}
]
}
]
}
} }
]
},
"ietf-routing:routing":{
"control-plane-protocols":{
"control-plane-protocol":[
{
"type":"ietf-igmp-mld-snooping:igmp-snooping",
"name":"bis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance":{
"scenario":"ietf-igmp-mld-snooping:bridge",
"enable":true
}
}
]
}
},
"ieee802-dot1q-bridge:bridges":{
"bridge":[
{
"name":"isp1",
"address":"00-23-ef-a5-77-12",
"bridge-type":"ieee802-dot1q-bridge:customer-vlan-bridge",
"component":[
{
"name":"comp1",
"type":"ieee802-dot1q-bridge:c-vlan-component",
"bridge-vlan":{
"vlan":[
{
"vid":101,
"ietf-igmp-mld-snooping:igmp-snooping-instance":"bis1"
}
]
}
}
]
}
]
}
}
The corresponding operational state data for R1 could be as follows: The corresponding operational state data for R1 could be as follows:
{ {
"ietf-interfaces:interfaces": { "ietf-interfaces:interfaces": {
"interface": [ "interface": [
{ {
"name": "1/1", "name": "eth1/1",
"type": "iana-if-type:ethernetCsmacd", "type": "iana-if-type:ethernetCsmacd",
"admin-status": "up", "oper-status": "up",
"if-index": 214748, "statistics": {
"oper-status": "up", "discontinuity-time": "2018-05-23T12:34:56-05:00"
"statistics": { }
"discontinuity-time": "2018-05-23T12:34:56-05:00" }
} ]
},
{
"name": "1/2",
"type": "iana-if-type:ethernetCsmacd",
"admin-status": "up",
"if-index": 214749,
"oper-status": "up",
"statistics": {
"discontinuity-time": "2018-05-23T12:35:06-05:02"
}
}
]
}, },
"ietf-igmp-mld-snooping:igmp-snooping-instances": { "ietf-routing:routing": {
"igmp-snooping-instance": [ "control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "bis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": {
"scenario": "ietf-igmp-mld-snooping:bridge",
"enable": true
}
}
]
}
},
"ieee802-dot1q-bridge:bridges": {
"bridge": [
{
"name": "isp1",
"address": "00-23-ef-a5-77-12",
"bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge",
"component": [
{
"name": "comp1",
"type": "ieee802-dot1q-bridge:c-vlan-component",
"bridge-vlan": {
"vlan": [
{ {
"name": "ins101", "vid": 101,
"type": "bridge", "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1"
"enable": true,
"forwarding-mode": "ip",
"explicit-tracking": false,
"exclude-lite": false,
"send-query": true,
"immediate-leave": [null],
"last-member-query-interval": 1,
"query-interval": 125,
"query-max-response-time": 10,
"require-router-alert": false,
"robustness-variable": 2,
"entries-count": 1,
"bridge-mrouter-interface": ["1/1"],
"group": [
{
"address": "223.0.0.1",
"mac-address": "01:00:5e:00:00:01",
"expire": 120,
"up-time": 180,
"last-reporter": "100.0.0.1",
"source": [
{
"address": "192.168.0.1",
"bridge-outgoing-interface": ["1/2"],
"up-time": 180,
"expire": 120,
"last-reporter": "100.0.0.1"
}
]
}
],
"interfaces": {
"interface": [
{
"name": "1/1",
"statistics": {
"received": {
"query": 5,
"membership-report-v1": 0,
"membership-report-v2": 0,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 11
},
"sent": {
"query": 0,
"membership-report-v1": 0,
"membership-report-v2": 3,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 0
}
}
},
{
"name": "1/2",
"statistics": {
"received": {
"query": 0,
"membership-report-v1": 0,
"membership-report-v2": 3,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 0
},
"sent": {
"query": 5,
"membership-report-v1": 0,
"membership-report-v2": 0,
"membership-report-v3": 0,
"leave": 0,
"non-member-leave": 0,
"pim": 11
}
}
}
]
}
} }
]
}
}
]
}
]
}
}
A.2 L2VPN scenario
This section contains an example for L2VPN scenario in the JSON encoding
[RFC7951], containing both configuration and state data.
+-----------+
+ Source +
+-----+-----+
|
-----------------+----------------------------
|eth1/1
+---+---+
+ R1 +
+-+---+-+
eth1/2 | \ eth1/3
| \
| \
| \
| \
eth2/1 | \ eth3/1
+-----+-+ +-+---+
+ R2 +------+ R3 +
+-----+-+ +-+---+
eth2/2 | | eth3/2
| |
---------------+----------+-------------------
| |
| |
+--------+--+ +--+--------+
+ Receiver1 + + Receiver2 +
+-----------+ +-----------+
The configuration data for R1 in the above figure could be as follows:
{
"ietf-interfaces:interfaces":{
"interface":[
{
"name":"eth1/1",
"type":"iana-if-type:ethernetCsmacd"
}
]
},
"ietf-pseudowires:pseudowires": {
"pseudowire": [
{
"name": "pw2"
},
{
"name": "pw3"
}
]
},
"ietf-network-instance:network-instances": {
"network-instance": [
{
"name": "vpls1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"ietf-l2vpn:endpoint": [
{
"name": "ac1",
"primary-ac": {
"name": "eth1/1"
}
},
{
"name": "pw2",
"primary-pw": [
{
"name": "pw2"
}
] ]
}, },
"ietf-igmp-mld-snooping:mld-snooping-instances": { {
"mld-snooping-instance": [ "name": "pw3",
{ "primary-pw": [
"name": "ins102", {
"type": "bridge", "name": "pw3"
"enable": true, }
"forwarding-mode": "ip", ]
"explicit-tracking": false, }
"exclude-lite": false, ]
"send-query": true, }
"immediate-leave": [null], ]
"last-member-query-interval": 1, },
"query-interval": 125, "ietf-routing:routing": {
"query-max-response-time": 10, "control-plane-protocols": {
"require-router-alert": false, "control-plane-protocol": [
"robustness-variable": 2, {
"entries-count": 1, "type": "ietf-igmp-mld-snooping:igmp-snooping",
"bridge-mrouter-interface": ["1/1"], "name": "vis1",
"group": [ "ietf-igmp-mld-snooping:igmp-snooping-instance": {
{ "scenario": "ietf-igmp-mld-snooping:l2vpn",
"address": "FF0E::1", "enable": true
"mac-address": "01:00:5e:00:00:01", }
"expire": 120, }
"up-time": 180, ]
"last-reporter": "2001::1", }
"source": [
{
"address": "3001::1",
"bridge-outgoing-interface": ["1/2"],
"up-time": 180,
"expire": 120,
"last-reporter": "2001::1"
}
]
}
],
"interfaces": { }
"interface": [ }
{
"name": "1/1", The corresponding operational state data for R1 could be as follows:
"statistics": {
"received": { {
"query": 7, "ietf-interfaces:interfaces":{
"report-v1": 0, "interface":[
"report-v2": 0, {
"done": 0, "name":"eth1/1",
"pim": 15 "type":"iana-if-type:ethernetCsmacd",
}, "oper-status": "up",
"sent": { "statistics": {
"query": 0, "discontinuity-time": "2018-05-23T12:34:56-05:00"
"report-v1": 0, }
"report-v2": 3, }
"done": 0, ]
"pim": 0 },
} "ietf-pseudowires:pseudowires": {
} "pseudowire": [
}, {
{ "name": "pw2"
"name": "1/2", },
"statistics": { {
"received": { "name": "pw3"
"query": 0, }
"report-v1": 0, ]
"report-v2": 3, },
"done": 0, "ietf-network-instance:network-instances": {
"pim": 0 "network-instance": [
}, {
"sent": { "name": "vpls1",
"query": 7, "ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1",
"report-v1": 0, "ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type",
"report-v2": 0, "ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling",
"done": 0, "ietf-l2vpn:endpoint": [
"pim": 15 {
} "name": "ac1",
} "primary-ac": {
} "name": "eth1/1"
] }
} },
} {
"name": "pw2",
"primary-pw": [
{
"name": "pw2"
}
] ]
},
{
"name": "pw3",
"primary-pw": [
{
"name": "pw3"
}
]
}
]
} }
]
},
"ietf-routing:routing": {
"control-plane-protocols": {
"control-plane-protocol": [
{
"type": "ietf-igmp-mld-snooping:igmp-snooping",
"name": "vis1",
"ietf-igmp-mld-snooping:igmp-snooping-instance": {
"scenario": "ietf-igmp-mld-snooping:l2vpn",
"enable": true
}
}
]
}
}
} }
Authors' Addresses Authors' Addresses
Hongji Zhao Hongji Zhao
Ericsson (China) Communications Company Ltd. Ericsson (China) Communications Company Ltd.
Ericsson Tower, No. 5 Lize East Street, Ericsson Tower, No. 5 Lize East Street,
Chaoyang District Beijing 100102, P.R. China Chaoyang District Beijing 100102, P.R. China
Email: hongji.zhao@ericsson.com Email: hongji.zhao@ericsson.com
Xufeng Liu Xufeng Liu
Jabil Volta Networks
8281 Greensboro Drive, Suite 200
McLean VA 22102
USA USA
EMail: Xufeng.liu.ietf@gmail.com EMail: xufeng.liu.ietf@gmail.com
Yisong Liu Yisong Liu
Huawei Technologies Huawei Technologies
Huawei Bld., No.156 Beiqing Rd. Huawei Bld., No.156 Beiqing Rd.
Beijing 100095 Beijing 100095
China China
Email: liuyisong@huawei.com Email: liuyisong@huawei.com
Anish Peter Anish Peter
Individual Individual
EMail: anish.ietf@gmail.com EMail: anish.ietf@gmail.com
Mahesh Sivakumar Mahesh Sivakumar
Cisco Systems Juniper Networks
510 McCarthy Boulevard 1133 Innovation Way
Milpitas, California Sunnyvale, California
USA USA
EMail: sivakumar.mahesh@gmail.com EMail: sivakumar.mahesh@gmail.com
 End of changes. 240 change blocks. 
848 lines changed or deleted 891 lines changed or added

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