| < draft-ietf-pim-igmp-mld-snooping-yang-15.txt | draft-ietf-pim-igmp-mld-snooping-yang-20.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: December 29, 2020 Volta Networks | Expires: April 07, 2022 Volta Networks | |||
| Y. Liu | Y. Liu | |||
| China Mobile | China Mobile | |||
| M. Sivakumar | M. Sivakumar | |||
| Juniper | Juniper | |||
| A. Peter | A. Peter | |||
| Individual | Individual | |||
| June 30, 2020 | October 08, 2021 | |||
| 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-15.txt | draft-ietf-pim-igmp-mld-snooping-yang-20.txt | |||
| Abstract | Abstract | |||
| This document defines a YANG data model that can be used to configure | This document defines a YANG data model that can be used to configure | |||
| and manage Internet Group Management Protocol (IGMP) and Multicast | and manage Internet Group Management Protocol (IGMP) and Multicast | |||
| Listener Discovery (MLD) Snooping devices. The YANG module in this | Listener Discovery (MLD) Snooping devices. The YANG module in this | |||
| document conforms to Network Management Datastore Architecture (NMDA). | document conforms to Network Management Datastore Architecture (NMDA). | |||
| Status of this Memo | Status of this Memo | |||
| skipping to change at page 1, line 46 ¶ | skipping to change at page 1, line 46 ¶ | |||
| 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 December 29, 2020. | This Internet-Draft will expire on April 07, 2022. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2021 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 | |||
| skipping to change at page 2, line 31 ¶ | skipping to change at page 2, line 31 ¶ | |||
| 1. Introduction...................................................3 | 1. Introduction...................................................3 | |||
| 1.1. Terminology...............................................3 | 1.1. Terminology...............................................3 | |||
| 1.2. Tree Diagrams.............................................3 | 1.2. Tree Diagrams.............................................3 | |||
| 1.3. Prefixes in Data Node Names...............................4 | 1.3. Prefixes in Data Node Names...............................4 | |||
| 2. Design of Data Model...........................................4 | 2. Design of Data Model...........................................4 | |||
| 2.1. Overview..................................................5 | 2.1. Overview..................................................5 | |||
| 2.2. Optional Capabilities.....................................5 | 2.2. Optional Capabilities.....................................5 | |||
| 2.3. Position of Address Family in Hierarchy...................6 | 2.3. Position of Address Family in Hierarchy...................6 | |||
| 3. Module Structure...............................................6 | 3. Module Structure...............................................6 | |||
| 3.1. IGMP Snooping Instances...................................7 | 3.1. IGMP Snooping Instances...................................6 | |||
| 3.2. MLD Snooping Instances....................................9 | 3.2. MLD Snooping Instances....................................8 | |||
| 3.3. Using IGMP and MLD Snooping Instances....................11 | 3.3. Using IGMP and MLD Snooping Instances....................10 | |||
| 3.4. IGMP and MLD Snooping Actions............................12 | 3.4. IGMP and MLD Snooping Actions............................11 | |||
| 4. IGMP and MLD Snooping YANG Module.............................12 | 4. IGMP and MLD Snooping YANG Module.............................11 | |||
| 5. Security Considerations.......................................34 | 5. Security Considerations.......................................31 | |||
| 6. IANA Considerations...........................................35 | 6. IANA Considerations...........................................33 | |||
| 7. References....................................................36 | 6.1. XML Registry.............................................33 | |||
| 7.1. Normative References.....................................36 | 6.2. YANG Module Names Registry...............................33 | |||
| 7.2. Informative References...................................38 | 7. References....................................................34 | |||
| Appendix A. Data Tree Example...................................39 | 7.1. Normative References.....................................34 | |||
| A.1 Bridge scenario...........................................39 | 7.2. Informative References...................................35 | |||
| A.2 L2VPN scenario............................................42 | Appendix A. Data Tree Example...................................36 | |||
| Authors' Addresses...............................................46 | Authors' Addresses...............................................39 | |||
| 1. Introduction | 1. Introduction | |||
| This document defines a YANG [RFC7950] data model for the management of | This document defines a YANG [RFC7950] 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 [RFC4541] devices. | Discovery (MLD) Snooping [RFC4541] 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 3, line 35 ¶ | skipping to change at page 3, line 35 ¶ | |||
| * data model | * data model | |||
| * data node | * data node | |||
| * identity | * identity | |||
| * module | * module | |||
| The following terminologies are used in this document: | The following terminologies are used in this document: | |||
| * mrouter: multicast router, which means nodes attached to a switch | * mrouter: multicast router, which is a router that has multicast | |||
| have multicast routing enabled [RFC4286]. | routing enabled [RFC4286]. | |||
| * mrouter interfaces: snooping switch ports where multicast routers | * mrouter interfaces: snooping switch ports where multicast routers | |||
| are attached [RFC4541]. | are attached [RFC4541]. | |||
| The following abbreviations are used in this document and defined model: | The following abbreviations are used in this document and defined model: | |||
| IGMP: Internet Group Management Protocol [RFC3376]. | IGMP: Internet Group Management Protocol [RFC3376]. | |||
| MLD: Multicast Listener Discovery [RFC3810]. | MLD: Multicast Listener Discovery [RFC3810]. | |||
| AC: Attachment Circuit [RFC3916]. | ||||
| PW: Pseudo Wire [RFC3916]. | ||||
| 1.2. Tree Diagrams | 1.2. Tree Diagrams | |||
| Tree diagrams used in this document follow the notation defined in | Tree diagrams used in this document follow the notation defined in | |||
| [RFC8340]. | [RFC8340]. | |||
| 1.3. Prefixes in Data Node Names | 1.3. Prefixes in Data Node Names | |||
| In this document, names of data nodes, actions, and other data model | In this document, names of data nodes, actions, and other data model | |||
| objects are often used without a prefix, as long as it is clear from the | objects are often used without a prefix, as long as it is clear from the | |||
| skipping to change at page 4, line 26 ¶ | skipping to change at page 4, line 26 ¶ | |||
| | inet | ietf-inet-types | [RFC6991] | | | inet | ietf-inet-types | [RFC6991] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| | yang | ietf-yang-types | [RFC6991] | | | yang | ietf-yang-types | [RFC6991] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| | if | ietf-interfaces | [RFC8343] | | | if | ietf-interfaces | [RFC8343] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| | rt | ietf-routing | [RFC8349] | | | rt | ietf-routing | [RFC8349] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| | rt-types | ietf-routing-types | [RFC8294] | | | rt-types | ietf-routing-types | [RFC8294] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| | ni | ietf-network-instance | [RFC8529] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | pw | ietf-pseudowires | [draft-ietf-bess-l2vpn-yang] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | l2vpn | ietf-l2vpn | [draft-ietf-bess-l2vpn-yang] | | ||||
| +----------+-----------------------+---------------------------------+ | ||||
| | dot1q | ieee802-dot1q-bridge | [dot1Qcp] | | | dot1q | ieee802-dot1q-bridge | [dot1Qcp] | | |||
| +----------+-----------------------+---------------------------------+ | +----------+-----------------------+---------------------------------+ | |||
| Table 1: Prefixes and Corresponding YANG Modules | Table 1: Prefixes and Corresponding YANG Modules | |||
| 2. Design of Data Model | 2. Design of Data Model | |||
| An IGMP/MLD snooping switch [RFC4541] analyzes IGMP/MLD packets and sets | An IGMP/MLD snooping switch [RFC4541] analyzes IGMP/MLD packets and sets | |||
| up forwarding tables for multicast traffic. If a switch does not run | up forwarding tables for multicast traffic. If a switch does not run | |||
| IGMP/MLD snooping, multicast traffic will be flooded in the broadcast | IGMP/MLD snooping, multicast traffic will be flooded in the broadcast | |||
| domain. If a switch runs IGMP/MLD snooping, multicast traffic will be | domain. If a switch runs IGMP/MLD snooping, multicast traffic will be | |||
| forwarded based on the forwarding tables to avoid bandwidth waste. The | forwarded based on the forwarding tables to avoid wasting bandwidth. The | |||
| IGMP/MLD snooping switch does not need to run any of the IGMP/MLD | IGMP/MLD snooping switch does not need to run any of the IGMP/MLD | |||
| protocols. Because the IGMP/MLD snooping is independent of the IGMP/MLD | protocols. Because the IGMP/MLD snooping is independent of the IGMP/MLD | |||
| protocols, the data model defined in this document does not augment, or | protocols, the data model defined in this document does not augment, or | |||
| even require, the IGMP/MLD data model defined in [RFC8652]. | even require, the IGMP/MLD data model defined in [RFC8652]. | |||
| 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]. | |||
| IGMP and MLD snooping switches do not adhere to the conceptual model | IGMP and MLD snooping switches do not adhere to the conceptual model | |||
| that provides the strict separation of functionality between different | that provides the strict separation of functionality between different | |||
| skipping to change at page 5, line 28 ¶ | skipping to change at page 5, line 20 ¶ | |||
| MLD, and could support MLDv1 [RFC2710] and MLDv2 [RFC3810]. The goal of | MLD, and could support MLDv1 [RFC2710] and MLDv2 [RFC3810]. The goal of | |||
| this document is to define a data model that provides a common user | this document is to define a data model that provides a common user | |||
| interface to IGMP and MLD Snooping. | interface to IGMP and MLD Snooping. | |||
| 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 switches. | the common building blocks for the IGMP and MLD Snooping switches. | |||
| The YANG module includes IGMP and MLD Snooping instance definition, | The YANG module includes IGMP and MLD Snooping instance definition, | |||
| using instance in the scenario of BRIDGE [dot1Qcp] and L2VPN [draft- | using instance in the L2 service type of BRIDGE [dot1Qcp]. It also | |||
| ietf-bess-l2vpn-yang]. The module also includes the RPC methods for | includes actions for clearing IGMP and MLD Snooping group tables. | |||
| clearing IGMP and MLD Snooping group tables. | ||||
| This YANG module conforms to Network Management Datastore Architecture | The YANG module doesn't cover L2VPN, which will be specified in a | |||
| (NMDA)[RFC8342]. This NMDA architecture provides an architectural | separated document. | |||
| framework for datastores as they are used by network management | ||||
| protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG | ||||
| [RFC7950] data modeling language. | ||||
| 2.2. Optional Capabilities | 2.2. Optional Capabilities | |||
| This model is designed to represent the basic capability subsets of IGMP | This model is designed to represent the basic capability subsets of IGMP | |||
| and MLD Snooping. The main design goals of this document are that the | and MLD Snooping. The main design goals of this document are that the | |||
| basic capabilities described in the model are supported by any major | basic capabilities described in the model are supported by any major | |||
| now-existing implementation, and that the configuration of all | now-existing implementation, and that the configuration of all | |||
| implementations meeting the specifications is easy to express through | implementations meeting the specifications is easy to express through | |||
| some combination of the optional features in the model and simple vendor | some combination of the optional features in the model and simple vendor | |||
| augmentations. | augmentations. | |||
| skipping to change at page 6, line 32 ¶ | skipping to change at page 6, line 21 ¶ | |||
| This document defines IGMP Snooping and MLD Snooping as separate schema | This document defines IGMP Snooping and MLD Snooping as separate schema | |||
| branches in the structure. The benefits are: | branches in the structure. The benefits are: | |||
| * The model can support IGMP Snooping (IPv4), MLD Snooping (IPv6), or | * The model can support IGMP Snooping (IPv4), MLD Snooping (IPv6), or | |||
| both optionally and independently. Such flexibility cannot be achieved | both optionally and independently. Such flexibility cannot be achieved | |||
| cleanly with a combined branch. | cleanly with a combined branch. | |||
| * The structure is consistent with other YANG data models such as | * The structure is consistent with other YANG data models such as | |||
| [RFC8652], which uses separate branches for IPv4 and IPv6. | [RFC8652], which uses separate branches for IPv4 and IPv6. | |||
| * The separate branches for IGMP Snooping and MLD Snooping can | * Having separate branches for IGMP Snooping and MLD Snooping allows | |||
| accommodate their differences better and cleaner. The two branches can | minor differences in their behavior to be modelled more simply and | |||
| better support different features and node types. | cleanly. The two branches can better support different features and node | |||
| types. | ||||
| 3. Module Structure | 3. Module Structure | |||
| This model augments the core routing data model specified in [RFC8349]. | This model augments the core routing data model specified in [RFC8349]. | |||
| +--rw routing | +--rw routing | |||
| +--rw router-id? | +--rw router-id? | |||
| +--rw control-plane-protocols | +--rw control-plane-protocols | |||
| | +--rw control-plane-protocol* [type name] | | +--rw control-plane-protocol* [type name] | |||
| | +--rw type | | +--rw type | |||
| | +--rw name | | +--rw name | |||
| | +--rw igmp-snooping-instance <= Augmented by this Model | | +--rw igmp-snooping-instance <= Augmented by this Model | |||
| ... | ... | |||
| | +--rw mld-snooping-instance <= Augmented by this Model | | +--rw mld-snooping-instance <= Augmented by this Model | |||
| ... | ... | |||
| The "igmp-snooping-instance" container instantiates an IGMP Snooping | The "igmp-snooping-instance" container instantiates an IGMP Snooping | |||
| Instance. The "mld-snooping-instance" container instantiates an MLD | Instance. The "mld-snooping-instance" container instantiates an MLD | |||
| Snooping Instance. | Snooping Instance. | |||
| The YANG data model defined in this document conforms to the Network | The YANG data model defined in this document conforms to the Network | |||
| Management Datastore Architecture (NMDA) [RFC8342]. The operational | Management Datastore Architecture (NMDA) [RFC8342]. The operational | |||
| state data is combined with the associated configuration data in the | state data is combined with the associated configuration data in the | |||
| same hierarchy [RFC8407]. | same hierarchy [RFC8407]. | |||
| A configuration data node is marked as mandatory only when its value | ||||
| must be provided by the user. Where nodes are not essential to protocol | ||||
| operation, they are marked as optional. Some other nodes are essential | ||||
| but have a default specified, so that they are also optional and need | ||||
| not be configured explicitly. | ||||
| 3.1. IGMP Snooping Instances | 3.1. IGMP Snooping Instances | |||
| The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | |||
| plane-protocols/rt:control-plane-protocol to add the igmp-snooping- | plane-protocols/rt:control-plane-protocol to add the igmp-snooping- | |||
| instance container. | instance container. | |||
| 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 attributes represent configurable | snooping-instance. The read-write attributes represent configurable | |||
| data. The read-only attributes represent state data. | data. The read-only attributes represent state data. | |||
| One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp] | One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp] | |||
| instance or L2VPN [draft-ietf-bess-l2vpn-yang] instance. One igmp- | instance, and it corresponds to one BRIDGE instance. | |||
| snooping-instance corresponds to one BRIDGE instance or one L2VPN | ||||
| instance. | ||||
| The value of scenario in igmp-snooping-instance is bridge or l2vpn. When | Currently the value of l2-service-type in igmp-snooping-instance could | |||
| it is bridge, igmp-snooping-instance will be used in the BRIDGE | only be set bridge. After it is set, igmp-snooping-instance could be | |||
| scenario. When it is l2vpn, igmp-snooping-instance will be used in the | used in the BRIDGE service. | |||
| L2VPN scenario. | ||||
| The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | The values of bridge-mrouter-interface is filled by the snooping device | |||
| l2vpn-mrouter-interface-pw are filled by the snooping device | dynamically. It is different from static-bridge-mrouter-interface which | |||
| dynamically. They are different from static-bridge-mrouter-interface, | is configured. | |||
| static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | ||||
| which are configured. | ||||
| The attributes under the interfaces show the statistics of IGMP Snooping | The attributes under the interfaces show the statistics of IGMP Snooping | |||
| related packets. | related packets. | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
| +--rw igmp-snooping-instance {igmp-snooping}? | +--rw igmp-snooping-instance {igmp-snooping}? | |||
| +--rw scenario? | +--rw l2-service-type? l2-service-type | |||
| | snooping-scenario-type | +--rw enable? boolean | |||
| +--rw enable? boolean | +--rw forwarding-table-type? enumeration | |||
| +--rw forwarding-table-type? enumeration | +--rw explicit-tracking? boolean | |||
| +--rw explicit-tracking? boolean | ||||
| | {explicit-tracking}? | | {explicit-tracking}? | |||
| +--rw exclude-lite? boolean | +--rw lite-exclude-filter? empty | |||
| | {exclude-lite}? | | {lite-exclude-filter}? | |||
| +--rw send-query? boolean | +--rw send-query? boolean | |||
| +--rw immediate-leave? empty | +--rw fast-leave? empty {fast-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 static-bridge-mrouter-interface* if:interface-ref | |||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref | ||||
| | {static-mrouter-interface}? | | {static-mrouter-interface}? | |||
| +--rw igmp-version? uint8 | +--rw igmp-version? uint8 | |||
| +--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 | |||
| | | rt-types:ipv4-multicast-group-address | | | rt-types:ipv4-multicast-group-address | |||
| | +--rw source-addr | | +--rw source-addr | |||
| | | rt-types:ipv4-multicast-source-address | | | rt-types:ipv4-multicast-source-address | |||
| | +--rw bridge-outgoing-interface* if:interface-ref | | +--rw bridge-outgoing-interface* if:interface-ref | |||
| | +--rw l2vpn-outgoing-ac* if:interface-ref | +--ro entries-count? yang:gauge32 | |||
| | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref | +--ro bridge-mrouter-interface* if:interface-ref | |||
| +--ro entries-count? uint32 | ||||
| +--ro bridge-mrouter-interface* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref | ||||
| +--ro group* [address] | +--ro group* [address] | |||
| | +--ro address | | +--ro address | |||
| | | rt-types:ipv4-multicast-group-address | | | rt-types:ipv4-multicast-group-address | |||
| | +--ro mac-address? yang:phys-address | | +--ro mac-address? yang:phys-address | |||
| | +--ro expire? rt-types:timer-value-seconds16 | | +--ro expire? rt-types:timer-value-seconds16 | |||
| | +--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 | | +--ro address | |||
| | | rt-types:ipv4-multicast-source-address | | | rt-types:ipv4-multicast-source-address | |||
| | +--ro bridge-outgoing-interface* if:interface-ref | | +--ro bridge-outgoing-interface* if:interface-ref | |||
| | +--ro l2vpn-outgoing-ac* if:interface-ref | ||||
| | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref | ||||
| | +--ro up-time uint32 | | +--ro up-time uint32 | |||
| | +--ro expire? | | +--ro expire? | |||
| | | rt-types:timer-value-seconds16 | | | rt-types:timer-value-seconds16 | |||
| | +--ro host-count? uint32 | | +--ro host-count? yang:gauge32 | |||
| | | {explicit-tracking}? | | | {explicit-tracking}? | |||
| | +--ro last-reporter? inet:ipv4-address | | +--ro last-reporter? inet:ipv4-address | |||
| | +--ro host* [host-address] {explicit-tracking}? | | +--ro host* [address] {explicit-tracking}? | |||
| | +--ro host-address inet:ipv4-address | | +--ro address inet:ipv4-address | |||
| | +--ro host-filter-mode filter-mode-type | | +--ro filter-mode filter-mode-type | |||
| +--ro interfaces | +--ro interfaces | |||
| +--ro interface* [name] | +--ro interface* [name] | |||
| +--ro name if:interface-ref | +--ro name if:interface-ref | |||
| +--ro statistics | +--ro statistics | |||
| +--ro discontinuity-time? yang:date-and-time | ||||
| +--ro received | +--ro received | |||
| | +--ro num-query? yang:counter64 | | +--ro query-count? yang:counter64 | |||
| | +--ro num-membership-report-v1? yang:counter64 | | +--ro membership-report-v1-count? yang:counter64 | |||
| | +--ro num-membership-report-v2? yang:counter64 | | +--ro membership-report-v2-count? yang:counter64 | |||
| | +--ro num-membership-report-v3? yang:counter64 | | +--ro membership-report-v3-count? yang:counter64 | |||
| | +--ro num-leave? yang:counter64 | | +--ro leave-count? yang:counter64 | |||
| | +--ro num-pim-hello? yang:counter64 | | +--ro pim-hello-count? yang:counter64 | |||
| +--ro sent | +--ro sent | |||
| +--ro num-query? yang:counter64 | +--ro query-count? yang:counter64 | |||
| +--ro num-membership-report-v1? yang:counter64 | +--ro membership-report-v1-count? yang:counter64 | |||
| +--ro num-membership-report-v2? yang:counter64 | +--ro membership-report-v2-count? yang:counter64 | |||
| +--ro num-membership-report-v3? yang:counter64 | +--ro membership-report-v3-count? yang:counter64 | |||
| +--ro num-leave? yang:counter64 | +--ro leave-count? yang:counter64 | |||
| +--ro num-pim-hello? yang:counter64 | +--ro pim-hello-count? yang:counter64 | |||
| 3.2. MLD Snooping Instances | 3.2. MLD Snooping Instances | |||
| The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | |||
| plane-protocols/rt:control-plane-protocol to add the mld-snooping- | plane-protocols/rt:control-plane-protocol to add the mld-snooping- | |||
| instance container. The mld-snooping-instance could be used in the | instance container. The mld-snooping-instance could be used in the | |||
| BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario to | BRIDGE [dot1Qcp] service to enable MLD Snooping. | |||
| enable MLD Snooping. | ||||
| All the MLD Snooping related attributes have been defined in the mld- | All the MLD Snooping related attributes have been defined in the mld- | |||
| snooping-instance. The read-write attributes represent configurable | snooping-instance. The read-write attributes represent configurable | |||
| data. The read-only attributes represent state data. | data. The read-only attributes represent state data. | |||
| The mld-snooping-instance is the same as IGMP snooping except changing | The mld-snooping-instance has similar structure as IGMP snooping. Some | |||
| IPv4 addresses to IPv6 addresses. One mld-snooping-instance could be | of leaves are protocol related. The mld-snooping-instance uses IPv6 | |||
| used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance | addresses and mld-version, while igmp-snooping-instance uses IPv4 | |||
| corresponds to one BRIDGE instance or L2VPN instance. | addresses and igmp-version. Statistic counters in each of the above | |||
| snooping instances are also tailored to the specific protocol type. One | ||||
| mld-snooping-instance could be used in one BRIDGE instance, and it | ||||
| corresponds to one BRIDGE instance. | ||||
| The value of scenario in mld-snooping-instance is bridge or l2vpn. When | Currently the value of l2-service-type in mld-snooping-instance could | |||
| it is bridge, mld-snooping-instance will be used in the BRIDGE scenario. | only be set bridge. After it is set, mld-snooping-instance could be used | |||
| When it is l2vpn, mld-snooping-instance will be used in the L2VPN | in the BRIDGE service. | |||
| scenario. | ||||
| The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | The value of bridge-mrouter-interface is filled by the snooping device | |||
| l2vpn-mrouter-interface-pw are filled by the snooping device | dynamically. It is different from static-bridge-mrouter-interface which | |||
| dynamically. They are different from static-bridge-mrouter-interface, | is configured. | |||
| static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | ||||
| which are configured. | ||||
| The attributes under the interfaces show the statistics of MLD Snooping | The attributes under the interfaces show the statistics of MLD Snooping | |||
| related packets. | related packets. | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
| +--rw mld-snooping-instance {mld-snooping}? | +--rw mld-snooping-instance {mld-snooping}? | |||
| +--rw scenario? | +--rw l2-service-type? l2-service-type | |||
| | snooping-scenario-type | +--rw enable? boolean | |||
| +--rw enable? boolean | +--rw forwarding-table-type? enumeration | |||
| +--rw forwarding-table-type? enumeration | +--rw explicit-tracking? boolean | |||
| +--rw explicit-tracking? boolean | ||||
| | {explicit-tracking}? | | {explicit-tracking}? | |||
| +--rw exclude-lite? boolean | +--rw lite-exclude-filter? empty | |||
| | {exclude-lite}? | | {lite-exclude-filter}? | |||
| +--rw send-query? boolean | +--rw send-query? boolean | |||
| +--rw immediate-leave? empty | +--rw fast-leave? empty {fast-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 static-bridge-mrouter-interface* if:interface-ref | |||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| | {static-mrouter-interface}? | ||||
| +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref | ||||
| | {static-mrouter-interface}? | | {static-mrouter-interface}? | |||
| +--rw mld-version? uint8 | +--rw mld-version? uint8 | |||
| +--rw querier-source? inet:ipv6-address | +--rw querier-source? inet:ipv6-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 | |||
| | | rt-types:ipv6-multicast-group-address | | | rt-types:ipv6-multicast-group-address | |||
| | +--rw source-addr | | +--rw source-addr | |||
| | | rt-types:ipv6-multicast-source-address | | | rt-types:ipv6-multicast-source-address | |||
| | +--rw bridge-outgoing-interface* if:interface-ref | | +--rw bridge-outgoing-interface* if:interface-ref | |||
| | +--rw l2vpn-outgoing-ac* if:interface-ref | +--ro entries-count? yang:gauge32 | |||
| | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref | +--ro bridge-mrouter-interface* if:interface-ref | |||
| +--ro entries-count? uint32 | ||||
| +--ro bridge-mrouter-interface* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-ac* if:interface-ref | ||||
| +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref | ||||
| +--ro group* [address] | +--ro group* [address] | |||
| | +--ro address | | +--ro address | |||
| | | rt-types:ipv6-multicast-group-address | | | rt-types:ipv6-multicast-group-address | |||
| | +--ro mac-address? yang:phys-address | | +--ro mac-address? yang:phys-address | |||
| | +--ro expire? rt-types:timer-value-seconds16 | | +--ro expire? rt-types:timer-value-seconds16 | |||
| | +--ro up-time uint32 | | +--ro up-time uint32 | |||
| | +--ro last-reporter? inet:ipv6-address | | +--ro last-reporter? inet:ipv6-address | |||
| | +--ro source* [address] | | +--ro source* [address] | |||
| | +--ro address | | +--ro address | |||
| | | rt-types:ipv6-multicast-source-address | | | rt-types:ipv6-multicast-source-address | |||
| | +--ro bridge-outgoing-interface* if:interface-ref | | +--ro bridge-outgoing-interface* if:interface-ref | |||
| | +--ro l2vpn-outgoing-ac* if:interface-ref | ||||
| | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref | ||||
| | +--ro up-time uint32 | | +--ro up-time uint32 | |||
| | +--ro expire? | | +--ro expire? | |||
| | | rt-types:timer-value-seconds16 | | | rt-types:timer-value-seconds16 | |||
| | +--ro host-count? uint32 | | +--ro host-count? yang:gauge32 | |||
| | | {explicit-tracking}? | | | {explicit-tracking}? | |||
| | +--ro last-reporter? inet:ipv6-address | | +--ro last-reporter? inet:ipv6-address | |||
| | +--ro host* [host-address] {explicit-tracking}? | | +--ro host* [address] {explicit-tracking}? | |||
| | +--ro host-address inet:ipv6-address | | +--ro address inet:ipv6-address | |||
| | +--ro host-filter-mode filter-mode-type | | +--ro filter-mode filter-mode-type | |||
| +--ro interfaces | +--ro interfaces | |||
| +--ro interface* [name] | +--ro interface* [name] | |||
| +--ro name if:interface-ref | +--ro name if:interface-ref | |||
| +--ro statistics | +--ro statistics | |||
| +--ro discontinuity-time? yang:date-and-time | ||||
| +--ro received | +--ro received | |||
| | +--ro num-query? yang:counter64 | | +--ro query-count? yang:counter64 | |||
| | +--ro num-report-v1? yang:counter64 | | +--ro report-v1-count? yang:counter64 | |||
| | +--ro num-report-v2? yang:counter64 | | +--ro report-v2-count? yang:counter64 | |||
| | +--ro num-done? yang:counter64 | | +--ro done-count? yang:counter64 | |||
| | +--ro num-pim-hello? yang:counter64 | | +--ro pim-hello-count? yang:counter64 | |||
| +--ro sent | +--ro sent | |||
| +--ro num-query? yang:counter64 | +--ro query-count? yang:counter64 | |||
| +--ro num-report-v1? yang:counter64 | +--ro report-v1-count? yang:counter64 | |||
| +--ro num-report-v2? yang:counter64 | +--ro report-v2-count? yang:counter64 | |||
| +--ro num-done? yang:counter64 | +--ro done-count? yang:counter64 | |||
| +--ro num-pim-hello? yang:counter64 | +--ro pim-hello-count? yang:counter64 | |||
| 3.3. Using IGMP and MLD Snooping Instances | 3.3. Using IGMP and MLD Snooping Instances | |||
| The igmp-snooping-instance could be used in the scenario of BRIDGE | The igmp-snooping-instance could be used in the service of BRIDGE | |||
| [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] to configure the IGMP | [dot1Qcp] to configure the IGMP Snooping. | |||
| Snooping. | ||||
| For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge | For the BRIDGE service this model augments /dot1q:bridges/dot1q:bridge | |||
| to use igmp-snooping-instance. It means IGMP Snooping is enabled in the | to use igmp-snooping-instance. It means IGMP Snooping is enabled in the | |||
| whole bridge. | whole bridge. | |||
| It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ | It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ | |||
| dot1q:bridge-vlan/dot1q:vlan to use igmp-snooping-instance. It means | dot1q:bridge-vlan/dot1q:vlan to use igmp-snooping-instance. It means | |||
| IGMP Snooping is enabled in the specified VLAN on the bridge. | IGMP Snooping is enabled in the specified VLAN on the bridge. | |||
| The mld-snooping-instance could be used in concurrence with igmp- | ||||
| snooping-instance to configure the MLD Snooping. | ||||
| augment /dot1q:bridges/dot1q:bridge: | augment /dot1q:bridges/dot1q:bridge: | |||
| +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | |||
| +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | |||
| augment /dot1q:bridges/dot1q:bridge/dot1q:component | augment /dot1q:bridges/dot1q:bridge/dot1q:component | |||
| /dot1q:bridge-vlan/dot1q:vlan: | /dot1q:bridge-vlan/dot1q:vlan: | |||
| +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | |||
| +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | |||
| For the L2VPN scenario this model augments /ni:network-instances/ | ||||
| ni:network-instance/ni:ni-type/l2vpn:l2vpn [RFC8529] to use igmp- | ||||
| snooping-instance. It means IGMP Snooping is enabled in the specified | ||||
| l2vpn instance. | ||||
| augment /ni:network-instances/ni:network-instance/ni:ni-type | ||||
| /l2vpn:l2vpn: | ||||
| +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref | ||||
| The mld-snooping-instance could be used in concurrence with igmp- | ||||
| snooping-instance to configure the MLD Snooping. | ||||
| 3.4. IGMP and MLD Snooping Actions | 3.4. IGMP and MLD Snooping Actions | |||
| IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping | IGMP and MLD Snooping actions clear the specified IGMP and MLD Snooping | |||
| group tables. If both source X and group Y are specified, only source X | group tables. If both source X and group Y are specified, only source X | |||
| from group Y in that specific instance will be cleared. | from group Y in that specific instance will be cleared. | |||
| augment /rt:routing/rt:control-plane-protocols | augment /rt:routing/rt:control-plane-protocols | |||
| /rt:control-plane-protocol: | /rt:control-plane-protocol: | |||
| +--rw igmp-snooping-instance {igmp-snooping}? | +--rw igmp-snooping-instance {igmp-snooping}? | |||
| +---x clear-igmp-snooping-groups {action-clear-groups}? | +---x clear-igmp-snooping-groups {action-clear-groups}? | |||
| skipping to change at page 12, line 44 ¶ | skipping to change at page 11, line 43 ¶ | |||
| +--rw mld-snooping-instance {mld-snooping}? | +--rw mld-snooping-instance {mld-snooping}? | |||
| +---x clear-mld-snooping-groups {action-clear-groups}? | +---x clear-mld-snooping-groups {action-clear-groups}? | |||
| +---w input | +---w input | |||
| +---w group union | +---w group union | |||
| +---w source rt-types:ipv6-multicast-source-address | +---w source rt-types:ipv6-multicast-source-address | |||
| 4. IGMP and MLD Snooping YANG Module | 4. IGMP and MLD Snooping YANG Module | |||
| This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376], | This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376], | |||
| [RFC3810],[RFC4541],[RFC5790],[RFC6636],[RFC6991],[RFC7761], | [RFC3810],[RFC4541],[RFC5790],[RFC6636],[RFC6991],[RFC7761], | |||
| [RFC8343],[RFC8529],[dot1Qcp], and [draft-ietf-bess-l2vpn-yang]. | [RFC8343],[dot1Qcp]. | |||
| <CODE BEGINS> file ietf-igmp-mld-snooping@2020-06-19.yang | <CODE BEGINS> file ietf-igmp-mld-snooping@2021-10-08.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"; | |||
| prefix ims; | prefix ims; | |||
| import ietf-inet-types { | import ietf-inet-types { | |||
| prefix "inet"; | prefix "inet"; | |||
| reference | reference | |||
| "RFC 6991: Common YANG Data Types"; | "RFC 6991: Common YANG Data Types"; | |||
| skipping to change at page 13, line 33 ¶ | skipping to change at page 12, line 33 ¶ | |||
| "RFC 8349: A YANG Data Model for Routing Management (NMDA | "RFC 8349: A YANG Data Model for Routing Management (NMDA | |||
| Version)"; | Version)"; | |||
| } | } | |||
| import ietf-routing-types { | import ietf-routing-types { | |||
| prefix "rt-types"; | prefix "rt-types"; | |||
| reference | reference | |||
| "RFC 8294: Common YANG Data Types for the Routing Area"; | "RFC 8294: Common YANG Data Types for the Routing Area"; | |||
| } | } | |||
| import ietf-l2vpn { | ||||
| prefix "l2vpn"; | ||||
| reference | ||||
| "draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based | ||||
| L2VPN"; | ||||
| } | ||||
| import ietf-network-instance { | ||||
| prefix "ni"; | ||||
| reference | ||||
| "RFC 8529: YANG Data Model for Network Instances"; | ||||
| } | ||||
| import ietf-pseudowires { | ||||
| prefix "pw"; | ||||
| reference | ||||
| "draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based | ||||
| L2VPN"; | ||||
| } | ||||
| import ieee802-dot1q-bridge { | import ieee802-dot1q-bridge { | |||
| prefix "dot1q"; | prefix "dot1q"; | |||
| reference | reference | |||
| "dot1Qcp: IEEE 802.1Qcp-2018 Bridges and Bridged Networks | "dot1Qcp: IEEE 802.1Qcp-2018 Bridges and Bridged Networks | |||
| - Amendment: YANG Data Model"; | - Amendment: YANG Data Model"; | |||
| } | } | |||
| organization | organization | |||
| "IETF PIM Working Group"; | "IETF PIM Working Group"; | |||
| skipping to change at page 14, line 23 ¶ | skipping to change at page 13, line 4 ¶ | |||
| WG List: <mailto:pim@ietf.org> | WG List: <mailto:pim@ietf.org> | |||
| Editors: Hongji Zhao | Editors: Hongji Zhao | |||
| <mailto:hongji.zhao@ericsson.com> | <mailto:hongji.zhao@ericsson.com> | |||
| Xufeng Liu | Xufeng Liu | |||
| <mailto:xufeng.liu.ietf@gmail.com> | <mailto:xufeng.liu.ietf@gmail.com> | |||
| Yisong Liu | Yisong Liu | |||
| <mailto:liuyisong@chinamobile.com> | <mailto:liuyisong@chinamobile.com> | |||
| Anish Peter | Anish Peter | |||
| <mailto:anish.ietf@gmail.com> | <mailto:anish.ietf@gmail.com> | |||
| Mahesh Sivakumar | Mahesh Sivakumar | |||
| <mailto:sivakumar.mahesh@gmail.com> | <mailto:sivakumar.mahesh@gmail.com> | |||
| "; | "; | |||
| description | description | |||
| "The module defines a collection of YANG definitions common for | "The module defines a collection of YANG definitions common for | |||
| all devices that implement Internet Group Management Protocol | all devices that implement Internet Group Management Protocol | |||
| (IGMP) and Multicast Listener Discovery (MLD) Snooping which is | (IGMP) and Multicast Listener Discovery (MLD) Snooping which is | |||
| described in RFC 4541. | described in RFC 4541. | |||
| Copyright (c) 2020 IETF Trust and the persons identified as | Copyright (c) 2021 IETF Trust and the persons identified as | |||
| authors of the code. All rights reserved. | authors of the code. All rights reserved. | |||
| 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 2020-06-19 { | revision 2021-10-08 { | |||
| 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 igmp-snooping { | feature igmp-snooping { | |||
| description | description | |||
| "Support IGMP snooping."; | "Support IGMP snooping."; | |||
| reference | reference | |||
| skipping to change at page 15, line 23 ¶ | skipping to change at page 14, line 4 ¶ | |||
| "Support IGMP snooping."; | "Support IGMP snooping."; | |||
| reference | reference | |||
| "RFC 4541"; | "RFC 4541"; | |||
| } | } | |||
| feature mld-snooping { | feature mld-snooping { | |||
| description | description | |||
| "Support MLD snooping."; | "Support MLD snooping."; | |||
| reference | reference | |||
| "RFC 4541"; | "RFC 4541"; | |||
| } | } | |||
| feature immediate-leave { | feature fast-leave { | |||
| description | description | |||
| "Support configuration of fast leave. The fast leave feature | "Support configuration of fast leave. The fast leave feature | |||
| does not send last member query messages to hosts."; | does not send last member query messages to hosts."; | |||
| reference | reference | |||
| "RFC 3376"; | "RFC 3376"; | |||
| } | } | |||
| feature static-l2-multicast-group { | feature static-l2-multicast-group { | |||
| description | description | |||
| "Support configuration of L2 multicast static-group."; | "Support configuration of static L2 multicast group."; | |||
| } | } | |||
| feature static-mrouter-interface { | feature static-mrouter-interface { | |||
| description | description | |||
| "Support multicast router interface explicitly configured | "Support multicast router interface explicitly configured | |||
| by management"; | by management"; | |||
| reference | reference | |||
| "RFC 4541"; | "RFC 4541"; | |||
| } | } | |||
| skipping to change at page 16, line 4 ¶ | skipping to change at page 14, line 38 ¶ | |||
| feature action-clear-groups { | feature action-clear-groups { | |||
| description | description | |||
| "Support clearing statistics by action for IGMP & MLD snooping."; | "Support clearing statistics by action for IGMP & MLD snooping."; | |||
| } | } | |||
| feature require-router-alert { | feature require-router-alert { | |||
| description | description | |||
| "Support configuration of require-router-alert."; | "Support configuration of require-router-alert."; | |||
| reference | reference | |||
| "RFC 3376"; | "RFC 3376"; | |||
| } | } | |||
| feature exclude-lite { | feature lite-exclude-filter { | |||
| description | description | |||
| "Support configuration of per instance exclude-lite."; | "Enable the support of the simplified EXCLUDE filter."; | |||
| reference | reference | |||
| "RFC 5790"; | "RFC 5790"; | |||
| } | } | |||
| feature explicit-tracking { | feature explicit-tracking { | |||
| description | description | |||
| "Support configuration of per instance explicit-tracking."; | "Support configuration of per instance explicit-tracking."; | |||
| reference | reference | |||
| "RFC 6636"; | "RFC 6636"; | |||
| } | } | |||
| /* identities */ | /* identities */ | |||
| identity l2-service-type { | ||||
| identity scenario-type { | ||||
| description | description | |||
| "Base identity for scenario type in IGMP & MLD snooping"; | "Base identity for L2 service type in IGMP & MLD snooping"; | |||
| } | } | |||
| identity bridge { | identity bridge { | |||
| base scenario-type; | base l2-service-type; | |||
| description | ||||
| "This identity represents BRIDGE scenario."; | ||||
| } | ||||
| identity l2vpn { | ||||
| base scenario-type; | ||||
| description | description | |||
| "This identity represents L2VPN scenario."; | "This identity represents BRIDGE service."; | |||
| } | } | |||
| identity filter-mode { | identity filter-mode { | |||
| description | description | |||
| "Base identity for filter mode in IGMP & MLD snooping"; | "Base identity for filter mode in IGMP & MLD snooping"; | |||
| } | } | |||
| identity include { | identity include { | |||
| base filter-mode; | base filter-mode; | |||
| description | description | |||
| skipping to change at page 17, line 4 ¶ | skipping to change at page 15, line 31 ¶ | |||
| base filter-mode; | base filter-mode; | |||
| description | description | |||
| "This identity represents include mode."; | "This identity represents include mode."; | |||
| } | } | |||
| identity exclude { | identity exclude { | |||
| base filter-mode; | base filter-mode; | |||
| description | description | |||
| "This identity represents exclude mode."; | "This identity represents exclude mode."; | |||
| } | } | |||
| identity igmp-snooping { | identity igmp-snooping { | |||
| base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
| description | description | |||
| "IGMP snooping"; | "IGMP snooping"; | |||
| } | } | |||
| identity mld-snooping { | identity mld-snooping { | |||
| base rt:control-plane-protocol; | base rt:control-plane-protocol; | |||
| description | description | |||
| "MLD snooping"; | "MLD snooping"; | |||
| } | } | |||
| /* | /* | |||
| * Typedefs | * Typedefs | |||
| */ | */ | |||
| typedef snooping-scenario-type { | typedef l2-service-type { | |||
| type identityref { | type identityref { | |||
| base "scenario-type"; | base "l2-service-type"; | |||
| } | } | |||
| description "The IGMP & MLD snooping scenario type"; | description "The L2 service type used with IGMP & MLD snooping "; | |||
| } | } | |||
| typedef filter-mode-type { | typedef filter-mode-type { | |||
| type identityref { | type identityref { | |||
| base "filter-mode"; | base "filter-mode"; | |||
| } | } | |||
| description "The host filter mode"; | description "The host filter mode"; | |||
| } | } | |||
| typedef igmp-mld-snooping-instance-ref { | typedef igmp-mld-snooping-instance-ref { | |||
| type leafref { | type leafref { | |||
| path "/rt:routing/rt:control-plane-protocols"+ | path "/rt:routing/rt:control-plane-protocols"+ | |||
| skipping to change at page 18, line 33 ¶ | skipping to change at page 17, line 10 ¶ | |||
| leaf explicit-tracking { | leaf explicit-tracking { | |||
| if-feature explicit-tracking; | if-feature explicit-tracking; | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description | description | |||
| "Track the IGMPv3 and MLDv2 snooping membership reports | "Track the IGMPv3 and MLDv2 snooping membership reports | |||
| from individual hosts. It contributes to saving network | from individual hosts. It contributes to saving network | |||
| resources and shortening leave latency."; | resources and shortening leave latency."; | |||
| } | } | |||
| leaf exclude-lite { | leaf lite-exclude-filter { | |||
| if-feature exclude-lite; | if-feature lite-exclude-filter; | |||
| type boolean; | type empty; | |||
| default false; | ||||
| description | description | |||
| "Track the Lightweight IGMPv3 and MLDv2 protocol report"; | "For IGMP Snooping, the presence of this | |||
| reference "RFC 5790"; | leaf enables the support of the simplified EXCLUDE filter | |||
| in the Lightweight IGMPv3 protocol, which simplifies the | ||||
| standard versions of IGMPv3. | ||||
| For MLD Snooping, the presence of this | ||||
| leaf enables the support of the simplified EXCLUDE filter | ||||
| in the Lightweight MLDv2 protocol, which simplifies the | ||||
| standard versions of MLDv2."; | ||||
| reference | ||||
| "RFC 5790"; | ||||
| } | } | |||
| leaf send-query { | leaf send-query { | |||
| type boolean; | type boolean; | |||
| default false; | default false; | |||
| description | description | |||
| "Enable quick response for topology changes. | "When it is true, this switch will send out periodic | |||
| To support IGMP snooping in a VLAN where PIM and IGMP are | IGMP General Query Message or MLD General Query Message."; | |||
| not configured. It cooperates with parameter querier-source."; | ||||
| } | } | |||
| leaf immediate-leave { | leaf fast-leave { | |||
| if-feature immediate-leave; | if-feature fast-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 "10..10230"; | range "10..10230"; | |||
| } | } | |||
| units one-tenth-second; | units deciseconds; | |||
| default 10; | default 10; | |||
| 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. | |||
| It is represented in units of 1/10 second."; | It is represented in units of 1/10 second."; | |||
| reference "RFC 3376. Sec. 8.8."; | reference "RFC 3376. Sec. 8.8."; | |||
| } | } | |||
| leaf query-interval { | leaf query-interval { | |||
| type uint16; | type uint16; | |||
| units seconds; | units seconds; | |||
| default 125; | default 125; | |||
| description | description | |||
| "The Query Interval is the interval between General Queries | "The Query Interval is the interval between General Queries | |||
| sent by the Querier."; | sent by the Querier."; | |||
| reference "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; | reference "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; | |||
| } | } | |||
| leaf query-max-response-time { | leaf query-max-response-time { | |||
| type uint16; | type uint16; | |||
| units one-tenth-second; | units deciseconds; | |||
| default 100; | default 100; | |||
| 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. | |||
| It is represented in units of 1/10 second."; | It is represented in units of 1/10 second."; | |||
| reference "RFC 3376. Sec. 4.1.1, 8.3, 8.14.3."; | reference "RFC 3376. 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 header of IGMP or MLD packet."; | in the IP header of IGMP or MLD packet. If it doesn't exist, | |||
| the IGMP or MLD packet will be ignored."; | ||||
| reference "RFC 3376. Sec. 9.1, 9.2, 9.3."; | ||||
| } | } | |||
| 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 "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; | reference "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; | |||
| } | } | |||
| leaf-list static-bridge-mrouter-interface { | leaf-list static-bridge-mrouter-interface { | |||
| when 'derived-from-or-self(../scenario,"ims:bridge")'; | when 'derived-from-or-self(../l2-service-type,"ims: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 { | ||||
| when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | ||||
| 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 'derived-from-or-self(../scenario,"ims:l2vpn")'; | ||||
| if-feature static-mrouter-interface; | ||||
| type pw:pseudowire-ref; | ||||
| 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-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 { | |||
| skipping to change at page 21, line 14 ¶ | skipping to change at page 19, line 35 ¶ | |||
| "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-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 yang:gauge32; | |||
| 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 'derived-from-or-self(../scenario,"ims:bridge")'; | when 'derived-from-or-self(../l2-service-type,"ims:bridge")'; | |||
| type if:interface-ref; | ||||
| config false; | ||||
| description | ||||
| "The mrouter interface in BRIDGE forwarding. When switch | ||||
| receives IGMP/MLD queries from multicast router on an | ||||
| interface, this interface will become mrouter interface | ||||
| for IGMP/MLD snooping."; | ||||
| } | ||||
| leaf-list l2vpn-mrouter-interface-ac { | ||||
| when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | ||||
| type if:interface-ref; | type if:interface-ref; | |||
| config false; | config false; | |||
| description | description | |||
| "The mrouter interface whose type is interface in L2VPN | "Indicates a list of mrouter interfaces dynamically learned in a | |||
| forwarding. When switch receives IGMP/MLD queries from | bridge. When this switch receives IGMP/MLD queries from a | |||
| multicast router on an interface, this interface will | multicast router on an interface, the interface will become | |||
| become mrouter interface for IGMP/MLD snooping."; | mrouter interface for IGMP/MLD snooping."; | |||
| } | ||||
| leaf-list l2vpn-mrouter-interface-pw { | ||||
| when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | ||||
| type pw:pseudowire-ref; | ||||
| config false; | ||||
| description | ||||
| "The mrouter interface whose type is PW in L2VPN forwarding. | ||||
| When switch receives IGMP/MLD queries from multicast router | ||||
| on a PW, this PW will become mrouter interface for IGMP/MLD | ||||
| snooping."; | ||||
| } | } | |||
| } // instance-config-attributes-igmp-mld-snooping | } // instance-config-attributes-igmp-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 'derived-from-or-self(../../../scenario,"ims:bridge")'; | when 'derived-from-or-self(../../../l2-service- | |||
| type,"ims: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 { | ||||
| when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | ||||
| type if:interface-ref; | ||||
| description "Outgoing Attachment Circuit (AC) in L2VPN"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | ||||
| when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | ||||
| type pw:pseudowire-ref; | ||||
| description "Outgoing Pseudo Wire (PW) in L2VPN"; | ||||
| } | ||||
| leaf up-time { | leaf up-time { | |||
| type uint32; | type uint32; | |||
| units seconds; | units seconds; | |||
| mandatory true; | mandatory true; | |||
| description | description | |||
| "The time elapsed since L2 multicast record created"; | "The time elapsed since L2 multicast record created"; | |||
| } | } | |||
| leaf expire { | leaf expire { | |||
| type rt-types:timer-value-seconds16; | type rt-types:timer-value-seconds16; | |||
| units seconds; | units seconds; | |||
| 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 yang:gauge32; | |||
| 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 { | grouping igmp-snooping-statistics { | |||
| description | description | |||
| "The statistics attributes for IGMP snooping."; | "The statistics attributes for IGMP snooping."; | |||
| leaf num-query { | leaf query-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Membership Query messages."; | "The number of Membership Query messages."; | |||
| reference | reference | |||
| "RFC 2236"; | "RFC 2236"; | |||
| } | } | |||
| leaf num-membership-report-v1 { | leaf membership-report-v1-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 1 Membership Report messages."; | "The number of Version 1 Membership Report messages."; | |||
| reference | reference | |||
| "RFC 1112"; | "RFC 1112"; | |||
| } | } | |||
| leaf num-membership-report-v2 { | leaf membership-report-v2-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 2 Membership Report messages."; | "The number of Version 2 Membership Report messages."; | |||
| reference | reference | |||
| "RFC 2236"; | "RFC 2236"; | |||
| } | } | |||
| leaf num-membership-report-v3 { | leaf membership-report-v3-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Version 3 Membership Report messages."; | "The number of Version 3 Membership Report messages."; | |||
| reference | reference | |||
| "RFC 3376"; | "RFC 3376"; | |||
| } | } | |||
| leaf num-leave { | leaf leave-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Leave Group messages."; | "The number of Leave Group messages."; | |||
| reference | reference | |||
| "RFC 2236"; | "RFC 2236"; | |||
| } | } | |||
| leaf num-pim-hello { | leaf pim-hello-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of PIM hello messages."; | "The number of PIM hello messages."; | |||
| reference | reference | |||
| "RFC 7761"; | "RFC 7761"; | |||
| } | } | |||
| } // igmp-snooping-statistics | } // igmp-snooping-statistics | |||
| grouping mld-snooping-statistics { | grouping mld-snooping-statistics { | |||
| description | description | |||
| "The statistics attributes for MLD snooping."; | "The statistics attributes for MLD snooping."; | |||
| leaf num-query { | leaf query-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of Multicast Listener Query messages."; | "The number of Multicast Listener Query messages."; | |||
| reference | reference | |||
| "RFC 3810"; | "RFC 3810"; | |||
| } | } | |||
| leaf num-report-v1 { | leaf report-v1-count { | |||
| 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 | reference | |||
| "RFC 2710"; | "RFC 2710"; | |||
| } | } | |||
| leaf num-report-v2 { | leaf report-v2-count { | |||
| 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 | reference | |||
| "RFC 3810"; | "RFC 3810"; | |||
| } | } | |||
| leaf num-done { | leaf done-count { | |||
| 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 | reference | |||
| "RFC 2710"; | "RFC 2710"; | |||
| } | } | |||
| leaf num-pim-hello { | leaf pim-hello-count { | |||
| type yang:counter64; | type yang:counter64; | |||
| description | description | |||
| "The number of PIM hello messages."; | "The number of PIM hello messages."; | |||
| reference | reference | |||
| "RFC 7761"; | "RFC 7761"; | |||
| } | } | |||
| } // mld-snooping-statistics | } // mld-snooping-statistics | |||
| augment "/rt:routing/rt:control-plane-protocols"+ | augment "/rt:routing/rt:control-plane-protocols"+ | |||
| "/rt:control-plane-protocol" { | "/rt:control-plane-protocol" { | |||
| when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' { | when 'derived-from-or-self(rt:type, "ims:igmp-snooping")' { | |||
| description | description | |||
| "This container is only valid for IGMP snooping."; | "This container is only valid for IGMP snooping."; | |||
| } | } | |||
| description | description | |||
| "IGMP snooping augmentation to control plane protocol | "IGMP snooping augmentation to control plane protocol | |||
| configuration and state."; | configuration and state."; | |||
| container igmp-snooping-instance { | container igmp-snooping-instance { | |||
| if-feature igmp-snooping; | if-feature igmp-snooping; | |||
| description | description | |||
| "IGMP snooping instance to configure igmp-snooping."; | "IGMP snooping instance to configure igmp-snooping."; | |||
| leaf scenario { | leaf l2-service-type { | |||
| type snooping-scenario-type; | type l2-service-type; | |||
| default bridge; | default bridge; | |||
| description | description | |||
| "The scenario indicates BRIDGE or L2VPN."; | "It indicates BRIDGE or other services."; | |||
| } | } | |||
| uses instance-config-attributes-igmp-mld-snooping; | uses instance-config-attributes-igmp-mld-snooping; | |||
| leaf igmp-version { | leaf igmp-version { | |||
| type uint8 { | type uint8 { | |||
| range "1..3"; | range "1..3"; | |||
| } | } | |||
| default 2; | default 2; | |||
| description "IGMP version."; | description "IGMP version."; | |||
| } | } | |||
| leaf querier-source { | leaf querier-source { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "Use the IGMP snooping querier to support IGMP | "The source address of IGMP General Query message, | |||
| snooping in a VLAN where PIM and IGMP are not configured. | which is sent out by this switch."; | |||
| 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 rt-types:ipv4-multicast-group-address; | type rt-types:ipv4-multicast-group-address; | |||
| skipping to change at page 25, line 39 ¶ | skipping to change at page 23, line 30 ¶ | |||
| "Multicast group IPv4 address"; | "Multicast group IPv4 address"; | |||
| } | } | |||
| leaf source-addr { | leaf source-addr { | |||
| type rt-types:ipv4-multicast-source-address; | 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 'derived-from-or-self(../../scenario,"ims:bridge")'; | when 'derived-from-or-self(../../l2-service- | |||
| type,"ims: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 { | ||||
| when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
| type if:interface-ref; | ||||
| description "Outgoing Attachment Circuit (AC) in L2VPN"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | ||||
| when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
| type pw:pseudowire-ref; | ||||
| description "Outgoing Pseudo Wire (PW) in L2VPN"; | ||||
| } | ||||
| } // static-l2-multicast-group | } // static-l2-multicast-group | |||
| 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; | |||
| skipping to change at page 26, line 52 ¶ | skipping to change at page 24, line 31 ¶ | |||
| 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 "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 address { | |||
| type inet:ipv4-address; | type inet:ipv4-address; | |||
| description | description | |||
| "Multicast membership host address."; | "Multicast membership host address."; | |||
| } | } | |||
| leaf host-filter-mode { | leaf filter-mode { | |||
| type filter-mode-type; | type filter-mode-type; | |||
| mandatory true; | mandatory true; | |||
| 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 | |||
| container interfaces { | container interfaces { | |||
| config false; | config false; | |||
| description | description | |||
| "Interfaces associated with the IGMP snooping instance"; | "Contains the interfaces associated with the IGMP snooping | |||
| instance"; | ||||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Interfaces associated with the IGMP snooping instance"; | "A list of 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"; | |||
| leaf discontinuity-time { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "The time on the most recent occasion at which any one | ||||
| or more of the statistic counters suffered a | ||||
| discontinuity. If no such discontinuities have | ||||
| occurred since the last re-initialization of the local | ||||
| management subsystem, then this node contains the time | ||||
| the local management subsystem re-initialized | ||||
| itself."; | ||||
| } | ||||
| container received { | container received { | |||
| description | description | |||
| "Statistics of received IGMP snooping packets."; | "Number of received snooped IGMP packets"; | |||
| uses igmp-snooping-statistics; | uses igmp-snooping-statistics; | |||
| } | } | |||
| container sent { | container sent { | |||
| description | description | |||
| "Statistics of sent IGMP snooping packets."; | "Number of sent snooped IGMP packets"; | |||
| uses igmp-snooping-statistics; | uses igmp-snooping-statistics; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| action clear-igmp-snooping-groups { | action clear-igmp-snooping-groups { | |||
| if-feature action-clear-groups; | if-feature action-clear-groups; | |||
| description | description | |||
| "Clear IGMP snooping cache tables."; | "Clear IGMP snooping cache tables."; | |||
| input { | input { | |||
| skipping to change at page 28, line 45 ¶ | skipping to change at page 26, line 39 ¶ | |||
| "Multicast source IPv4 address. If value '*' is specified, | "Multicast source IPv4 address. If value '*' is specified, | |||
| all IGMP snooping source-group tables are cleared."; | all IGMP snooping source-group tables are cleared."; | |||
| } | } | |||
| } | } | |||
| } // action clear-igmp-snooping-groups | } // action clear-igmp-snooping-groups | |||
| } // igmp-snooping-instance | } // igmp-snooping-instance | |||
| } // augment | } // augment | |||
| augment "/rt:routing/rt:control-plane-protocols"+ | augment "/rt:routing/rt:control-plane-protocols"+ | |||
| "/rt:control-plane-protocol" { | "/rt:control-plane-protocol" { | |||
| when 'derived-from-or-self(../rt:type, "ims:mld-snooping")' { | when 'derived-from-or-self(rt:type, "ims:mld-snooping")' { | |||
| description | description | |||
| "This container is only valid for MLD snooping."; | "This container is only valid for MLD snooping."; | |||
| } | } | |||
| description | description | |||
| "MLD snooping augmentation to control plane protocol | "MLD snooping augmentation to control plane protocol | |||
| configuration and state."; | configuration and state."; | |||
| container mld-snooping-instance { | container mld-snooping-instance { | |||
| if-feature mld-snooping; | if-feature mld-snooping; | |||
| description | description | |||
| "MLD snooping instance to configure mld-snooping."; | "MLD snooping instance to configure mld-snooping."; | |||
| leaf scenario { | leaf l2-service-type { | |||
| type snooping-scenario-type; | type l2-service-type; | |||
| default bridge; | default bridge; | |||
| description | description | |||
| "The scenario indicates BRIDGE or L2VPN."; | "It indicates BRIDGE or other services."; | |||
| } | } | |||
| uses instance-config-attributes-igmp-mld-snooping; | uses instance-config-attributes-igmp-mld-snooping; | |||
| leaf mld-version { | leaf mld-version { | |||
| type uint8 { | type uint8 { | |||
| range "1..2"; | range "1..2"; | |||
| } | } | |||
| default 2; | default 2; | |||
| description "MLD version."; | description "MLD 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 | "The source address of MLD General Query message, | |||
| PIM and MLD are not configured. The IPv6 address is used as | which is sent out by this switch."; | |||
| 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 rt-types:ipv6-multicast-group-address; | type rt-types:ipv6-multicast-group-address; | |||
| skipping to change at page 29, line 49 ¶ | skipping to change at page 27, line 44 ¶ | |||
| "Multicast group IPv6 address"; | "Multicast group IPv6 address"; | |||
| } | } | |||
| leaf source-addr { | leaf source-addr { | |||
| type rt-types:ipv6-multicast-source-address; | 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 'derived-from-or-self(../../scenario,"ims:bridge")'; | when 'derived-from-or-self(../../l2-service- | |||
| type if:interface-ref; | type,"ims:bridge")'; | |||
| description "Outgoing interface in BRIDGE forwarding"; | type if:interface-ref; | |||
| } | description "Outgoing interface in BRIDGE forwarding"; | |||
| leaf-list l2vpn-outgoing-ac { | ||||
| when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
| type if:interface-ref; | ||||
| description "Outgoing Attachment Circuit (AC) in L2VPN"; | ||||
| } | ||||
| leaf-list l2vpn-outgoing-pw { | ||||
| when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
| type pw:pseudowire-ref; | ||||
| description "Outgoing Pseudo Wire (PW) in L2VPN"; | ||||
| } | } | |||
| } // static-l2-multicast-group | } // static-l2-multicast-group | |||
| 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"; | |||
| skipping to change at page 31, line 5 ¶ | skipping to change at page 28, line 42 ¶ | |||
| 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 "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 address { | |||
| type inet:ipv6-address; | type inet:ipv6-address; | |||
| description | description | |||
| "Multicast membership host address."; | "Multicast membership host address."; | |||
| } | } | |||
| leaf host-filter-mode { | leaf filter-mode { | |||
| type filter-mode-type; | type filter-mode-type; | |||
| mandatory true; | mandatory true; | |||
| 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 | |||
| container interfaces { | container interfaces { | |||
| config false; | config false; | |||
| description | description | |||
| "Interfaces associated with the MLD snooping instance"; | "Contains the interfaces associated with the MLD snooping | |||
| instance"; | ||||
| list interface { | list interface { | |||
| key "name"; | key "name"; | |||
| description | description | |||
| "Interfaces associated with the MLD snooping instance"; | "A list of 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"; | |||
| leaf discontinuity-time { | ||||
| type yang:date-and-time; | ||||
| description | ||||
| "The time on the most recent occasion at which any one | ||||
| or more of the statistic counters suffered a | ||||
| discontinuity. If no such discontinuities have | ||||
| occurred since the last re-initialization of the local | ||||
| management subsystem, then this node contains the time | ||||
| the local management subsystem re-initialized | ||||
| itself."; | ||||
| } | ||||
| container received { | container received { | |||
| description | description | |||
| "Statistics of received MLD snooping packets."; | "Number of received snooped MLD packets"; | |||
| uses mld-snooping-statistics; | uses mld-snooping-statistics; | |||
| } | } | |||
| container sent { | container sent { | |||
| description | description | |||
| "Statistics of sent MLD snooping packets."; | "Number of sent snooped MLD packets"; | |||
| uses mld-snooping-statistics; | uses mld-snooping-statistics; | |||
| } | } | |||
| } | } | |||
| } | } | |||
| } | } | |||
| action clear-mld-snooping-groups { | action clear-mld-snooping-groups { | |||
| if-feature action-clear-groups; | if-feature action-clear-groups; | |||
| description | description | |||
| skipping to change at page 32, line 49 ¶ | skipping to change at page 30, line 49 ¶ | |||
| "Multicast source IPv6 address. If value '*' is specified, | "Multicast source IPv6 address. If value '*' is specified, | |||
| all MLD snooping source-group tables are cleared."; | all MLD snooping source-group tables are cleared."; | |||
| } | } | |||
| } | } | |||
| } // action clear-mld-snooping-groups | } // action clear-mld-snooping-groups | |||
| }// mld-snooping-instance | }// mld-snooping-instance | |||
| } // augment | } // augment | |||
| augment "/dot1q:bridges/dot1q:bridge" { | augment "/dot1q:bridges/dot1q:bridge" { | |||
| description | description | |||
| "Use IGMP & MLD snooping instance in BRIDGE scenario"; | "Use IGMP & MLD snooping instance in BRIDGE."; | |||
| leaf igmp-snooping-instance { | leaf igmp-snooping-instance { | |||
| type igmp-mld-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 igmp-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 | |||
| "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; | "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; | |||
| skipping to change at page 33, line 21 ¶ | skipping to change at page 31, line 21 ¶ | |||
| } | } | |||
| } | } | |||
| 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 | |||
| "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; | "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; | |||
| leaf igmp-snooping-instance { | leaf igmp-snooping-instance { | |||
| type igmp-mld-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 igmp-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"+ | ||||
| "/ni:ni-type/l2vpn:l2vpn" { | ||||
| description | ||||
| "Use IGMP & MLD snooping instance in L2VPN scenario"; | ||||
| leaf igmp-snooping-instance { | ||||
| type igmp-mld-snooping-instance-ref; | ||||
| description | ||||
| "Configure IGMP snooping instance in L2VPN scenario"; | ||||
| } | ||||
| leaf mld-snooping-instance { | ||||
| type igmp-mld-snooping-instance-ref; | ||||
| description | ||||
| "Configure MLD snooping instance in L2VPN scenario"; | ||||
| } | ||||
| } | ||||
| } | } | |||
| <CODE ENDS> | <CODE ENDS> | |||
| 5. Security Considerations | 5. 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 as | that is designed to be accessed via network management protocols such as | |||
| NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the | NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the | |||
| secure transport layer, and the mandatory-to-implement secure transport | secure transport layer, and the mandatory-to-implement secure transport | |||
| is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and | is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and | |||
| the mandatory-to-implement secure transport is TLS [RFC8446]. | the mandatory-to-implement secure transport is TLS [RFC8446]. | |||
| The Network Configuration Access Control Model (NACM) [RFC8341] provides | The Network Configuration Access Control Model (NACM) [RFC8341] provides | |||
| skipping to change at page 35, line 12 ¶ | skipping to change at page 32, line 42 ¶ | |||
| notification) to these data nodes. These are the subtrees and data nodes | notification) to these data nodes. These are the subtrees and data nodes | |||
| and their sensitivity/vulnerability: | and their sensitivity/vulnerability: | |||
| Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
| ims:igmp-snooping-instance | ims:igmp-snooping-instance | |||
| ims:mld-snooping-instance | ims:mld-snooping-instance | |||
| Unauthorized access to any data node of these subtrees can disclose the | Unauthorized access to any data node of these subtrees can disclose the | |||
| operational state information of IGMP & MLD Snooping on this device. | operational state information of IGMP & MLD Snooping on this device. The | |||
| group/source/host information may expose multicast group memberships, | ||||
| Some of the action operations in this YANG module may be considered | and transitively the associations between the user on the host and the | |||
| sensitive or vulnerable in some network environments. It is thus | contents from the source which could be privately sensitive. Some of the | |||
| important to control access to these operations. These are the | action operations in this YANG module may be considered sensitive or | |||
| operations and their sensitivity/vulnerability: | vulnerable in some network environments. It is thus important to control | |||
| access to these operations. These are the operations and their | ||||
| sensitivity/vulnerability: | ||||
| Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | Under /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol:/ | |||
| ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups | ims:igmp-snooping-instance/ims:clear-igmp-snooping-groups | |||
| ims:mld-snooping-instance/ims:clear-mld-snooping-groups | ims:mld-snooping-instance/ims:clear-mld-snooping-groups | |||
| Some of the actions in this YANG module may be considered sensitive or | Some of the actions in this YANG module may be considered sensitive or | |||
| vulnerable in some network environments. The IGMP & MLD Snooping YANG | vulnerable in some network environments. The IGMP & MLD Snooping YANG | |||
| module supports the "clear-igmp-snooping-groups" and "clear-mld- | module supports the "clear-igmp-snooping-groups" and "clear-mld- | |||
| snooping-groups" actions. If unauthorized action is invoked, the IGMP | snooping-groups" actions. If unauthorized action is invoked, the IGMP | |||
| and MLD Snooping group tables will be cleared unexpectedly. Especially | and MLD Snooping group tables will be cleared unexpectedly. Especially | |||
| when using wildcard on group and source, the impact will be dramatic. | when using wildcard, all the multicast traffic will be flooded in the | |||
| broadcast domain. The devices that use this YANG module should heed the | ||||
| Security Considerations in [RFC4541]. | ||||
| 6. IANA Considerations | 6. IANA Considerations | |||
| RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
| actual RFC number (and remove this note). | actual RFC number (and remove this note). | |||
| 6.1. XML Registry | ||||
| This document registers the following namespace URIs in the IETF XML | This document registers the following namespace URIs in the IETF XML | |||
| registry [RFC3688]: | registry [RFC3688]: | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping | |||
| Registrant Contact: The IETF. | Registrant Contact: The IETF. | |||
| XML: N/A, the requested URI is an XML namespace. | XML: N/A, the requested URI is an XML namespace. | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| 6.2. YANG Module Names Registry | ||||
| This document registers the following YANG modules in the YANG Module | This document registers the following YANG modules in the YANG Module | |||
| Names registry [RFC7950]: | Names registry [RFC7950]: | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| name: ietf-igmp-mld-snooping | name: 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 | |||
| prefix: ims | prefix: ims | |||
| reference: RFC XXXX | reference: RFC XXXX | |||
| -------------------------------------------------------------------- | -------------------------------------------------------------------- | |||
| 7. References | 7. References | |||
| skipping to change at page 37, line 16 ¶ | skipping to change at page 35, line 8 ¶ | |||
| the Network Configuration Protocol (NETCONF)", RFC 6020, | the Network Configuration Protocol (NETCONF)", RFC 6020, | |||
| October 2010. | October 2010. | |||
| [RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A. | [RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A. | |||
| Bierman, Ed., "Network Configuration Protocol (NETCONF)", | Bierman, Ed., "Network Configuration Protocol (NETCONF)", | |||
| RFC 6241, June 2011. | RFC 6241, June 2011. | |||
| [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure | |||
| Shell (SSH)", RFC 6242, June 2011. | Shell (SSH)", RFC 6242, June 2011. | |||
| [RFC6636] H. Asaeda, H. Liu, Q. Wu, "Tuning the Behavior of the | ||||
| Internet Group Management Protocol (IGMP) and Multicast | ||||
| Listener Discovery (MLD) for Routers in Mobile and Wireless | ||||
| Networks", RFC 6636, May 2012. | ||||
| [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, | [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, | |||
| July 2013. | July 2013. | |||
| [RFC7761] B. Fenner, M. Handley, H. Holbrook, I. Kouvelas, R. Parekh, | [RFC7761] B. Fenner, M. Handley, H. Holbrook, I. Kouvelas, R. Parekh, | |||
| Z. Zhang, L. Zheng, "Protocol Independent Multicast - | Z. Zhang, L. Zheng, "Protocol Independent Multicast - | |||
| Sparse Mode (PIM-SM): Protocol Specification (Revised)", | Sparse Mode (PIM-SM): Protocol Specification (Revised)", | |||
| RFC 7761, March 2016. | RFC 7761, March 2016. | |||
| [RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language", | [RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language", | |||
| RFC 7950, August 2016. | RFC 7950, August 2016. | |||
| skipping to change at page 37, line 48 ¶ | skipping to change at page 35, line 45 ¶ | |||
| [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management | [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management | |||
| 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. | |||
| [RFC8349] L. Lhotka, A. Lindem, Y. Qu, "A YANG Data Model for Routing | [RFC8349] L. Lhotka, A. Lindem, Y. Qu, "A YANG Data Model for Routing | |||
| Management (NMDA Version)", RFC 8349, March 2018. | Management (NMDA Version)", RFC 8349, March 2018. | |||
| [RFC8407] A. Bierman, "Guidelines for Authors and Reviewers of | ||||
| Documents Containing YANG Data Models", RFC 8407, October | ||||
| 2018. | ||||
| [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol | |||
| Version 1.3", RFC 8446, August 2018. | Version 1.3", RFC 8446, August 2018. | |||
| [RFC8529] L. Berger, C. Hopps, A. Lindem, D. Bogdanovic, X. Liu, | 7.2. Informative References | |||
| "YANG Data Model for Network Instances", RFC 8529, March | ||||
| 2019. | [RFC7951] L. Lhotka, "JSON Encoding of Data Modeled with YANG", RFC | |||
| 7951, August 2016. | ||||
| [RFC8407] A. Bierman, "Guidelines for Authors and Reviewers of | ||||
| Documents Containing YANG Data Models", RFC 8407, October | ||||
| 2018. | ||||
| [RFC8652] X. Liu, F. Guo, M. Sivakumar, P. McAllister, A. Peter, "A | [RFC8652] X. Liu, F. Guo, M. Sivakumar, P. McAllister, A. Peter, "A | |||
| YANG Data Model for the Internet Group Management Protocol | YANG Data Model for the Internet Group Management Protocol | |||
| (IGMP) and Multicast Listener Discovery (MLD)", RFC 8652, | (IGMP) and Multicast Listener Discovery (MLD)", RFC 8652, | |||
| November 2019. | November 2019. | |||
| [draft-ietf-bess-l2vpn-yang] Shah, H., Brissette, P., Chen, I., | ||||
| Hussain, I., Wen, B., and K. Tiruveedhula, "YANG Data Model | ||||
| for MPLS-basedL2VPN", draft-ietf-bess-l2vpn-yang-10 (work | ||||
| in progress), July 2019. | ||||
| 7.2. Informative References | ||||
| [RFC3916] X. Xiao, Ed., D. McPherson, Ed., P. Pate, Ed., | ||||
| "Requirements for Pseudo-Wire Emulation Edge-to-Edge | ||||
| (PWE3)", RFC 3916, September 2004. | ||||
| [RFC6636] H. Asaeda, H. Liu, Q. Wu, "Tuning the Behavior of the | ||||
| Internet Group Management Protocol (IGMP) and Multicast | ||||
| Listener Discovery (MLD) for Routers in Mobile and Wireless | ||||
| Networks", RFC 6636, May 2012. | ||||
| [RFC7951] L. Lhotka, "JSON Encoding of Data Modeled with YANG", RFC | ||||
| 7951, August 2016. | ||||
| Appendix A. Data Tree Example | Appendix A. Data Tree Example | |||
| A.1 Bridge scenario | This section contains an example for bridge service in the JSON encoding | |||
| [RFC7951], containing both configuration and state data. | ||||
| This section contains an example for bridge scenario in the JSON | ||||
| encoding [RFC7951], containing both configuration and state data. | ||||
| +-----------+ | +-----------+ | |||
| + Source + | + Source + | |||
| +-----+-----+ | +-----+-----+ | |||
| | | | | |||
| -----------------+---------------------------- | -----------------+---------------------------- | |||
| |eth1/1 | |eth1/1 | |||
| +---+---+ | +---+---+ | |||
| + R1 + | + R1 + | |||
| +-+---+-+ | +-+---+-+ | |||
| skipping to change at page 39, line 49 ¶ | skipping to change at page 37, line 4 ¶ | |||
| The configuration data for R1 in the above figure could be as follows: | The configuration data for R1 in the above figure could be as follows: | |||
| { | { | |||
| "ietf-interfaces:interfaces":{ | "ietf-interfaces:interfaces":{ | |||
| "interface":[ | "interface":[ | |||
| { | { | |||
| "name":"eth1/1", | "name":"eth1/1", | |||
| "type":"iana-if-type:ethernetCsmacd" | "type":"iana-if-type:ethernetCsmacd" | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "ietf-routing:routing":{ | "ietf-routing:routing":{ | |||
| "control-plane-protocols":{ | "control-plane-protocols":{ | |||
| "control-plane-protocol":[ | "control-plane-protocol":[ | |||
| { | { | |||
| "type":"ietf-igmp-mld-snooping:igmp-snooping", | "type":"ietf-igmp-mld-snooping:igmp-snooping", | |||
| "name":"bis1", | "name":"bis1", | |||
| "ietf-igmp-mld-snooping:igmp-snooping-instance":{ | "ietf-igmp-mld-snooping:igmp-snooping-instance":{ | |||
| "scenario":"ietf-igmp-mld-snooping:bridge", | "l2-service-type":"ietf-igmp-mld-snooping:bridge", | |||
| "enable":true | "enable":true | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "ieee802-dot1q-bridge:bridges":{ | "ieee802-dot1q-bridge:bridges":{ | |||
| "bridge":[ | "bridge":[ | |||
| { | { | |||
| "name":"isp1", | "name":"isp1", | |||
| skipping to change at page 40, line 47 ¶ | skipping to change at page 38, line 4 ¶ | |||
| { | { | |||
| "ietf-interfaces:interfaces": { | "ietf-interfaces:interfaces": { | |||
| "interface": [ | "interface": [ | |||
| { | { | |||
| "name": "eth1/1", | "name": "eth1/1", | |||
| "type": "iana-if-type:ethernetCsmacd", | "type": "iana-if-type:ethernetCsmacd", | |||
| "oper-status": "up", | "oper-status": "up", | |||
| "statistics": { | "statistics": { | |||
| "discontinuity-time": "2018-05-23T12:34:56-05:00" | "discontinuity-time": "2018-05-23T12:34:56-05:00" | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| }, | }, | |||
| "ietf-routing:routing": { | "ietf-routing:routing": { | |||
| "control-plane-protocols": { | "control-plane-protocols": { | |||
| "control-plane-protocol": [ | "control-plane-protocol": [ | |||
| { | { | |||
| "type": "ietf-igmp-mld-snooping:igmp-snooping", | "type": "ietf-igmp-mld-snooping:igmp-snooping", | |||
| "name": "bis1", | "name": "bis1", | |||
| "ietf-igmp-mld-snooping:igmp-snooping-instance": { | "ietf-igmp-mld-snooping:igmp-snooping-instance": { | |||
| "scenario": "ietf-igmp-mld-snooping:bridge", | "l2-service-type": "ietf-igmp-mld-snooping:bridge", | |||
| "enable": true | "enable": true | |||
| } | } | |||
| } | } | |||
| ] | ] | |||
| } | } | |||
| }, | }, | |||
| "ieee802-dot1q-bridge:bridges": { | "ieee802-dot1q-bridge:bridges": { | |||
| "bridge": [ | "bridge": [ | |||
| { | { | |||
| "name": "isp1", | "name": "isp1", | |||
| skipping to change at page 41, line 46 ¶ | skipping to change at page 39, line 4 ¶ | |||
| } | } | |||
| The following action is to clear all the entries whose group address is | The following action is to clear all the entries whose group address is | |||
| 225.1.1.1 for igmp-snooping-instance bis1. | 225.1.1.1 for igmp-snooping-instance bis1. | |||
| POST /restconf/operations/ietf-routing:routing/control-plane-protocols/\ | POST /restconf/operations/ietf-routing:routing/control-plane-protocols/\ | |||
| control-plane-protocol=ietf-igmp-mld-snooping:igmp-snooping,bis1/\ | control-plane-protocol=ietf-igmp-mld-snooping:igmp-snooping,bis1/\ | |||
| ietf-igmp-mld-snooping:igmp-snooping-instance/\ | ietf-igmp-mld-snooping:igmp-snooping-instance/\ | |||
| clear-igmp-snooping-groups HTTP/1.1 | clear-igmp-snooping-groups HTTP/1.1 | |||
| Host: example.com | Host: example.com | |||
| Content-Type: application/yang-data+json | Content-Type: application/yang-data+json | |||
| { | { | |||
| "ietf-igmp-mld-snooping:input" : { | "ietf-igmp-mld-snooping:input" : { | |||
| "group": "225.1.1.1", | "group": "225.1.1.1", | |||
| "source": "*" | "source": "*" | |||
| } | } | |||
| } | } | |||
| 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": "acs", | ||||
| "ac": [ | ||||
| { | ||||
| "name": "eth1/1" | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "name": "pws", | ||||
| "pw": [ | ||||
| { | ||||
| "name": "pw2" | ||||
| }, | ||||
| { | ||||
| "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 | ||||
| } | ||||
| } | ||||
| ] | ||||
| } | ||||
| } | ||||
| } | ||||
| The corresponding operational state data for R1 could be as follows: | ||||
| { | ||||
| "ietf-interfaces:interfaces":{ | ||||
| "interface":[ | ||||
| { | ||||
| "name":"eth1/1", | ||||
| "type":"iana-if-type:ethernetCsmacd", | ||||
| "oper-status": "up", | ||||
| "statistics": { | ||||
| "discontinuity-time": "2018-05-23T12:34:56-05:00" | ||||
| } | ||||
| } | ||||
| ] | ||||
| }, | ||||
| "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": "acs", | ||||
| "ac": [ | ||||
| { | ||||
| "name": "eth1/1" | ||||
| } | ||||
| ] | ||||
| }, | ||||
| { | ||||
| "name": "pws", | ||||
| "pw": [ | ||||
| { | ||||
| "name": "pw2" | ||||
| }, | ||||
| { | ||||
| "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, China | |||
| Email: hongji.zhao@ericsson.com | Email: hongji.zhao@ericsson.com | |||
| Xufeng Liu | Xufeng Liu | |||
| Volta Networks | Volta Networks | |||
| USA | USA | |||
| EMail: xufeng.liu.ietf@gmail.com | EMail: xufeng.liu.ietf@gmail.com | |||
| Yisong Liu | Yisong Liu | |||
| End of changes. 159 change blocks. | ||||
| 619 lines changed or deleted | 286 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||