draft-ietf-pim-igmp-mld-snooping-yang-13.txt | draft-ietf-pim-igmp-mld-snooping-yang-14.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 17, 2020 Volta Networks | Expires: December 22, 2020 Volta Networks | |||
Y. Liu | Y. Liu | |||
China Mobile | China Mobile | |||
M. Sivakumar | M. Sivakumar | |||
Juniper | Juniper | |||
A. Peter | A. Peter | |||
Individual | Individual | |||
June 18, 2020 | June 23, 2020 | |||
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-13.txt | draft-ietf-pim-igmp-mld-snooping-yang-14.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 17, 2020. | This Internet-Draft will expire on December 22, 2020. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2020 IETF Trust and the persons identified as the | Copyright (c) 2020 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 3, line 7 ¶ | skipping to change at page 3, line 7 ¶ | |||
7. References....................................................36 | 7. References....................................................36 | |||
7.1. Normative References.....................................36 | 7.1. Normative References.....................................36 | |||
7.2. Informative References...................................38 | 7.2. Informative References...................................38 | |||
Appendix A. Data Tree Example...................................39 | Appendix A. Data Tree Example...................................39 | |||
A.1 Bridge scenario...........................................39 | A.1 Bridge scenario...........................................39 | |||
A.2 L2VPN scenario............................................42 | A.2 L2VPN scenario............................................42 | |||
Authors' Addresses...............................................46 | Authors' Addresses...............................................46 | |||
1. Introduction | 1. Introduction | |||
This document defines a YANG [RFC6020] 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 | |||
operational values for configuration, allowing clients to use identical | operational values for configuration, allowing clients to use identical | |||
paths for retrieving the configured values and the operational values. | paths for retrieving the configured values and the operational values. | |||
1.1. Terminology | 1.1. Terminology | |||
skipping to change at page 7, line 6 ¶ | skipping to change at page 7, line 6 ¶ | |||
| +--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 | 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 | must be provided by the user. Where nodes are not essential to protocol | |||
operation, they are marked as optional. Some other nodes are essential | operation, they are marked as optional. Some other nodes are essential | |||
but have a default specified, so that they are also optional and need | but have a default specified, so that they are also optional and need | |||
not be configured explicitly. | not be configured explicitly. | |||
3.1. IGMP Snooping Instances | 3.1. IGMP Snooping Instances | |||
The YANG module defines igmp-snooping-instance which augments | The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | |||
/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol. | plane-protocols/rt:control-plane-protocol to add the igmp-snooping- | |||
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 attribute represents configurable | snooping-instance. The read-write attributes represent configurable | |||
data. The read-only attribute represents 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 or L2VPN [draft-ietf-bess-l2vpn-yang] instance. One igmp- | |||
snooping-instance corresponds to one BRIDGE instance or one L2VPN | snooping-instance corresponds to one BRIDGE instance or one L2VPN | |||
instance. | instance. | |||
The value of scenario in igmp-snooping-instance is bridge or l2vpn. When | The value of scenario in igmp-snooping-instance is bridge or l2vpn. When | |||
it is bridge, igmp-snooping-instance will be used in the BRIDGE | it is bridge, igmp-snooping-instance will be used in the BRIDGE | |||
scenario. When it is l2vpn, igmp-snooping-instance will be used in the | scenario. When it is l2vpn, igmp-snooping-instance will be used in the | |||
L2VPN scenario. | L2VPN scenario. | |||
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | |||
l2vpn-mrouter-interface-pw are filled by the snooping device | l2vpn-mrouter-interface-pw are filled by the snooping device | |||
dynamically. They are different from static-bridge-mrouter-interface, | dynamically. They are different from static-bridge-mrouter-interface, | |||
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | |||
which are configured statically. | 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 scenario? | |||
| snooping-scenario-type | | snooping-scenario-type | |||
+--rw enable? boolean | +--rw enable? boolean | |||
skipping to change at page 9, line 12 ¶ | skipping to change at page 9, line 13 ¶ | |||
+--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 received | +--ro received | |||
| +--ro num-query? yang:counter64 | | +--ro num-query? yang:counter64 | |||
| +--ro num-membership-report-v1? yang:counter64 | | +--ro num-membership-report-v1? yang:counter64 | |||
| +--ro num-membership-report-v2? yang:counter64 | | +--ro num-membership-report-v2? yang:counter64 | |||
| +--ro num-membership-report-v3? yang:counter64 | | +--ro num-membership-report-v3? yang:counter64 | |||
| +--ro num-leave? yang:counter64 | | +--ro num-leave? yang:counter64 | |||
| +--ro num-non-member-leave? yang:counter64 | ||||
| +--ro num-pim-hello? yang:counter64 | | +--ro num-pim-hello? yang:counter64 | |||
+--ro sent | +--ro sent | |||
+--ro num-query? yang:counter64 | +--ro num-query? yang:counter64 | |||
+--ro num-membership-report-v1? yang:counter64 | +--ro num-membership-report-v1? yang:counter64 | |||
+--ro num-membership-report-v2? yang:counter64 | +--ro num-membership-report-v2? yang:counter64 | |||
+--ro num-membership-report-v3? yang:counter64 | +--ro num-membership-report-v3? yang:counter64 | |||
+--ro num-leave? yang:counter64 | +--ro num-leave? yang:counter64 | |||
+--ro num-non-member-leave? yang:counter64 | ||||
+--ro num-pim-hello? yang:counter64 | +--ro num-pim-hello? yang:counter64 | |||
3.2. MLD Snooping Instances | 3.2. MLD Snooping Instances | |||
The YANG module defines mld-snooping-instance which could be used in the | The YANG module ietf-igmp-mld-snooping augments /rt:routing/rt:control- | |||
plane-protocols/rt:control-plane-protocol to add the mld-snooping- | ||||
instance container. The mld-snooping-instance could be used in the | ||||
BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario to | BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario 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 attribute represents configurable | snooping-instance. The read-write attributes represent configurable | |||
data. The read-only attribute represents 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 is the same as IGMP snooping except changing | |||
IPv4 addresses to IPv6 addresses. One mld-snooping-instance could be | IPv4 addresses to IPv6 addresses. One mld-snooping-instance could be | |||
used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance | used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance | |||
corresponds to one BRIDGE instance or L2VPN instance. | corresponds to one BRIDGE instance or L2VPN instance. | |||
The value of scenario in mld-snooping-instance is bridge or l2vpn. When | The value of scenario in mld-snooping-instance is bridge or l2vpn. When | |||
it is bridge, mld-snooping-instance will be used in the BRIDGE scenario. | it is bridge, mld-snooping-instance will be used in the BRIDGE scenario. | |||
When it is l2vpn, mld-snooping-instance will be used in the L2VPN | When it is l2vpn, mld-snooping-instance will be used in the L2VPN | |||
scenario. | scenario. | |||
The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | The values of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, | |||
l2vpn-mrouter-interface-pw are filled by the snooping device | l2vpn-mrouter-interface-pw are filled by the snooping device | |||
dynamically. They are different from static-bridge-mrouter-interface, | dynamically. They are different from static-bridge-mrouter-interface, | |||
static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw | |||
which are configured statically. | 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 scenario? | |||
| snooping-scenario-type | | snooping-scenario-type | |||
+--rw enable? boolean | +--rw enable? boolean | |||
skipping to change at page 12, line 18 ¶ | skipping to change at page 12, line 21 ¶ | |||
/l2vpn:l2vpn: | /l2vpn:l2vpn: | |||
+--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 | |||
The mld-snooping-instance could be used in concurrence with igmp- | The mld-snooping-instance could be used in concurrence with igmp- | |||
snooping-instance to configure the MLD Snooping. | 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. | group tables. If both source X and group Y are specified, only source X | |||
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}? | |||
+---w input | +---w input | |||
+---w group union | +---w group union | |||
+---w source rt-types:ipv4-multicast-source-address | +---w source rt-types:ipv4-multicast-source-address | |||
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}? | |||
+---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 [RFC3376],[RFC4541],[RFC5790],[RFC6636], | This module references [RFC1112],[RFC2236],[RFC2710],[RFC3376], | |||
[RFC6991],[RFC8343],[RFC8529],[dot1Qcp],[draft-ietf-bess-l2vpn-yang]. | [RFC3810],[RFC4541],[RFC5790],[RFC6636],[RFC6991],[RFC7761], | |||
[RFC8343],[RFC8529],[dot1Qcp], and [draft-ietf-bess-l2vpn-yang]. | ||||
<CODE BEGINS> file ietf-igmp-mld-snooping@2020-06-16.yang | <CODE BEGINS> file ietf-igmp-mld-snooping@2020-06-19.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 14, line 46 ¶ | skipping to change at page 14, line 51 ¶ | |||
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-16 { | revision 2020-06-19 { | |||
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 | ||||
"RFC 4541"; | ||||
} | } | |||
feature mld-snooping { | feature mld-snooping { | |||
description | description | |||
"Support MLD snooping."; | "Support MLD snooping."; | |||
reference | ||||
"RFC 4541"; | ||||
} | } | |||
feature immediate-leave { | feature immediate-leave { | |||
description | description | |||
"Support configuration of immediate-leave."; | "Support configuration of fast leave. The fast leave feature | |||
does not send last member query messages to hosts."; | ||||
reference | ||||
"RFC 3376"; | ||||
} | } | |||
feature static-l2-multicast-group { | feature static-l2-multicast-group { | |||
description | description | |||
"Support configuration of L2 multicast static-group."; | "Support configuration of L2 multicast static-group."; | |||
} | } | |||
feature static-mrouter-interface { | feature static-mrouter-interface { | |||
description | description | |||
"Support configuration of mrouter interface."; | "Support multicast router interface explicitly configured | |||
by management"; | ||||
reference | ||||
"RFC 4541"; | ||||
} | } | |||
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, Section 5.2"; | "RFC 3376"; | |||
} | } | |||
feature exclude-lite { | feature exclude-lite { | |||
description | description | |||
"Support configuration of per instance exclude-lite."; | "Support configuration of per instance exclude-lite."; | |||
reference | reference | |||
"RFC 5790, Section 3"; | "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, Section 3"; | "RFC 6636"; | |||
} | } | |||
/* identities */ | /* identities */ | |||
identity scenario-type { | identity scenario-type { | |||
description | description | |||
"Base identity for scenario type in IGMP & MLD snooping"; | "Base identity for scenario type in IGMP & MLD snooping"; | |||
} | } | |||
identity bridge { | identity bridge { | |||
base scenario-type; | base scenario-type; | |||
description | description | |||
skipping to change at page 17, line 33 ¶ | skipping to change at page 17, line 48 ¶ | |||
} | } | |||
description | description | |||
"This type is used by data models which need to | "This type is used by data models which need to | |||
reference IGMP & MLD snooping instance."; | reference IGMP & MLD snooping instance."; | |||
} | } | |||
/* | /* | |||
* Groupings | * Groupings | |||
*/ | */ | |||
grouping instance-config-attributes-igmp-snooping { | ||||
description | ||||
"IGMP snooping configuration for each BRIDGE or L2VPN instance."; | ||||
uses instance-config-attributes-igmp-mld-snooping; | ||||
leaf igmp-version { | ||||
type uint8 { | ||||
range "1..3"; | ||||
} | ||||
default 2; | ||||
description "IGMP version."; | ||||
} | ||||
leaf querier-source { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Use the IGMP snooping querier to support IGMP | ||||
snooping in a VLAN where PIM and IGMP are not configured. | ||||
The IPv4 address is used as source address in messages."; | ||||
} | ||||
list static-l2-multicast-group { | ||||
if-feature static-l2-multicast-group; | ||||
key "group source-addr"; | ||||
description | ||||
"A static multicast route, (*,G) or (S,G)."; | ||||
leaf group { | ||||
type rt-types:ipv4-multicast-group-address; | ||||
description | ||||
"Multicast group IPv4 address"; | ||||
} | ||||
leaf source-addr { | ||||
type rt-types:ipv4-multicast-source-address; | ||||
description | ||||
"Multicast source IPv4 address."; | ||||
} | ||||
leaf-list bridge-outgoing-interface { | ||||
when 'derived-from-or-self(../../scenario,"ims:bridge")'; | ||||
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 | ||||
forwarding"; | ||||
} | ||||
leaf-list l2vpn-outgoing-pw { | ||||
when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
type pw:pseudowire-ref; | ||||
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; | ||||
} | ||||
} // static-l2-multicast-group | ||||
} // instance-config-attributes-igmp-snooping | ||||
grouping instance-config-attributes-igmp-mld-snooping { | grouping instance-config-attributes-igmp-mld-snooping { | |||
description | description | |||
"IGMP and MLD snooping configuration of each VLAN."; | "IGMP and MLD snooping configuration of each VLAN."; | |||
leaf enable { | leaf enable { | |||
type boolean; | type boolean; | |||
default false; | default false; | |||
description | description | |||
"Set the value to true to enable IGMP & MLD snooping."; | "Set the value to true to enable IGMP & MLD snooping."; | |||
} | } | |||
skipping to change at page 21, line 28 ¶ | skipping to change at page 20, line 35 ¶ | |||
leaf-list static-l2vpn-mrouter-interface-pw { | leaf-list static-l2vpn-mrouter-interface-pw { | |||
when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | |||
if-feature static-mrouter-interface; | if-feature static-mrouter-interface; | |||
type pw:pseudowire-ref; | type pw:pseudowire-ref; | |||
description | description | |||
"static mrouter interface whose type is PW | "static mrouter interface whose type is PW | |||
in L2VPN forwarding"; | in L2VPN forwarding"; | |||
} | } | |||
} // instance-config-attributes-igmp-mld-snooping | } // instance-config-attributes-igmp-mld-snooping | |||
grouping instance-config-attributes-mld-snooping { | ||||
description "MLD snooping configuration of each VLAN."; | ||||
uses instance-config-attributes-igmp-mld-snooping; | ||||
leaf mld-version { | ||||
type uint8 { | ||||
range "1..2"; | ||||
} | ||||
default 2; | ||||
description "MLD version."; | ||||
} | ||||
leaf querier-source { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Use the MLD snooping querier to support MLD snooping where | ||||
PIM and MLD are not configured. The IPv6 address is used as | ||||
the source address in messages."; | ||||
} | ||||
list static-l2-multicast-group { | ||||
if-feature static-l2-multicast-group; | ||||
key "group source-addr"; | ||||
description | ||||
"A static multicast route, (*,G) or (S,G)."; | ||||
leaf group { | ||||
type rt-types:ipv6-multicast-group-address; | ||||
description | ||||
"Multicast group IPv6 address"; | ||||
} | ||||
leaf source-addr { | ||||
type rt-types:ipv6-multicast-source-address; | ||||
description | ||||
"Multicast source IPv6 address."; | ||||
} | ||||
leaf-list bridge-outgoing-interface { | ||||
when 'derived-from-or-self(../../scenario,"ims:bridge")'; | ||||
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 | ||||
forwarding"; | ||||
} | ||||
leaf-list l2vpn-outgoing-pw { | ||||
when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | ||||
type pw:pseudowire-ref; | ||||
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; | ||||
} | ||||
} // static-l2-multicast-group | ||||
} // instance-config-attributes-mld-snooping | ||||
grouping instance-state-group-attributes-igmp-mld-snooping { | grouping instance-state-group-attributes-igmp-mld-snooping { | |||
description | description | |||
"Attributes for both IGMP and MLD snooping groups."; | "Attributes for both IGMP and MLD snooping groups."; | |||
leaf mac-address { | leaf mac-address { | |||
type yang:phys-address; | type yang:phys-address; | |||
description "Destination MAC address for L2 multicast."; | description "Destination MAC address for L2 multicast."; | |||
} | } | |||
leaf expire { | leaf expire { | |||
skipping to change at page 23, line 9 ¶ | skipping to change at page 21, line 8 ¶ | |||
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."; | |||
} | } | |||
} // instance-state-group-attributes-igmp-mld-snooping | } // instance-state-group-attributes-igmp-mld-snooping | |||
grouping instance-state-attributes-igmp-snooping { | ||||
description | ||||
"State attributes for IGMP snooping for each instance."; | ||||
uses instance-state-attributes-igmp-mld-snooping; | ||||
list group { | ||||
key "address"; | ||||
config false; | ||||
description "IGMP snooping information"; | ||||
leaf address { | ||||
type rt-types:ipv4-multicast-group-address; | ||||
description | ||||
"Multicast group IPv4 address"; | ||||
} | ||||
uses instance-state-group-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Address of the last host which has sent report to join | ||||
the multicast group."; | ||||
} | ||||
list source { | ||||
key "address"; | ||||
description "Source IPv4 address for multicast stream"; | ||||
leaf address { | ||||
type rt-types:ipv4-multicast-source-address; | ||||
description "Source IPv4 address for multicast stream"; | ||||
} | ||||
uses instance-state-source-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list host { | ||||
if-feature explicit-tracking; | ||||
key "host-address"; | ||||
description | ||||
"List of multicast membership hosts | ||||
of the specific multicast source-group."; | ||||
leaf host-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Multicast membership host address."; | ||||
} | ||||
leaf host-filter-mode { | ||||
type filter-mode-type; | ||||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast membership | ||||
host may be either include or exclude."; | ||||
} | ||||
}// list host | ||||
} // list source | ||||
} // list group | ||||
} // instance-state-attributes-igmp-snooping | ||||
grouping instance-state-attributes-igmp-mld-snooping { | grouping instance-state-attributes-igmp-mld-snooping { | |||
description | description | |||
"State attributes for IGMP & MLD snooping instance."; | "State attributes for IGMP & MLD snooping instance."; | |||
leaf entries-count { | leaf entries-count { | |||
type uint32; | type uint32; | |||
config false; | config false; | |||
description | description | |||
"The number of L2 multicast entries in IGMP & MLD snooping"; | "The number of L2 multicast entries in IGMP & MLD snooping"; | |||
} | } | |||
leaf-list bridge-mrouter-interface { | leaf-list bridge-mrouter-interface { | |||
when 'derived-from-or-self(../scenario,"ims:bridge")'; | when 'derived-from-or-self(../scenario,"ims:bridge")'; | |||
type if:interface-ref; | type if:interface-ref; | |||
config false; | config false; | |||
description "mrouter interface in BRIDGE forwarding"; | 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 { | leaf-list l2vpn-mrouter-interface-ac { | |||
when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | |||
type if:interface-ref; | type if:interface-ref; | |||
config false; | config false; | |||
description | description | |||
"mrouter interface whose type is interface | "The mrouter interface whose type is interface in L2VPN | |||
in L2VPN forwarding"; | 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-pw { | leaf-list l2vpn-mrouter-interface-pw { | |||
when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | when 'derived-from-or-self(../scenario,"ims:l2vpn")'; | |||
type pw:pseudowire-ref; | type pw:pseudowire-ref; | |||
config false; | config false; | |||
description | description | |||
"mrouter interface whose type is PW in L2VPN forwarding"; | "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-attributes-mld-snooping { | ||||
description | ||||
"State attributes for MLD snooping of each VLAN."; | ||||
uses instance-state-attributes-igmp-mld-snooping; | ||||
list group { | ||||
key "address"; | ||||
config false; | ||||
description "MLD snooping statistics information"; | ||||
leaf address { | ||||
type rt-types:ipv6-multicast-group-address; | ||||
description | ||||
"Multicast group IPv6 address"; | ||||
} | ||||
uses instance-state-group-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list source { | ||||
key "address"; | ||||
description "Source IPv6 address for multicast stream"; | ||||
leaf address { | ||||
type rt-types:ipv6-multicast-source-address; | ||||
description "Source IPv6 address for multicast stream"; | ||||
} | ||||
uses instance-state-source-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list host { | ||||
if-feature explicit-tracking; | ||||
key "host-address"; | ||||
description | ||||
"List of multicast membership hosts | ||||
of the specific multicast source-group."; | ||||
leaf host-address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Multicast membership host address."; | ||||
} | ||||
leaf host-filter-mode { | ||||
type filter-mode-type; | ||||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast membership | ||||
host may be either include or exclude."; | ||||
} | ||||
}// list host | ||||
} // list source | ||||
} // list group | ||||
} // instance-state-attributes-mld-snooping | ||||
grouping instance-state-source-attributes-igmp-mld-snooping { | grouping instance-state-source-attributes-igmp-mld-snooping { | |||
description | description | |||
"State attributes for IGMP & MLD snooping instance."; | "State attributes for IGMP & MLD snooping instance."; | |||
leaf-list bridge-outgoing-interface { | leaf-list bridge-outgoing-interface { | |||
when 'derived-from-or-self(../../../scenario,"ims:bridge")'; | when 'derived-from-or-self(../../../scenario,"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 { | leaf-list l2vpn-outgoing-ac { | |||
when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | |||
type if:interface-ref; | type if:interface-ref; | |||
description "Outgoing Attachment Circuit (AC) in L2VPN | description "Outgoing Attachment Circuit (AC) in L2VPN"; | |||
forwarding"; | ||||
} | } | |||
leaf-list l2vpn-outgoing-pw { | leaf-list l2vpn-outgoing-pw { | |||
when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; | |||
type pw:pseudowire-ref; | type pw:pseudowire-ref; | |||
description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; | 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"; | |||
} | } | |||
skipping to change at page 27, line 33 ¶ | skipping to change at page 22, line 55 ¶ | |||
} | } | |||
} // 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 num-query { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of query messages."; | "The number of Membership Query messages."; | |||
reference | ||||
"RFC 2236"; | ||||
} | } | |||
leaf num-membership-report-v1 { | leaf num-membership-report-v1 { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of membership report v1 messages."; | "The number of Version 1 Membership Report messages."; | |||
reference | ||||
"RFC 1112"; | ||||
} | } | |||
leaf num-membership-report-v2 { | leaf num-membership-report-v2 { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of membership report v2 messages."; | "The number of Version 2 Membership Report messages."; | |||
reference | ||||
"RFC 2236"; | ||||
} | } | |||
leaf num-membership-report-v3 { | leaf num-membership-report-v3 { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of membership report v3 messages."; | "The number of Version 3 Membership Report messages."; | |||
reference | ||||
"RFC 3376"; | ||||
} | } | |||
leaf num-leave { | leaf num-leave { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of leave messages."; | "The number of Leave Group messages."; | |||
} | reference | |||
leaf num-non-member-leave { | "RFC 2236"; | |||
type yang:counter64; | ||||
description | ||||
"The number of non member leave messages."; | ||||
} | } | |||
leaf num-pim-hello { | leaf num-pim-hello { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of PIM hello messages."; | "The number of PIM hello messages."; | |||
reference | ||||
"RFC 7761"; | ||||
} | } | |||
} // 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 num-query { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of Multicast Listener Query messages."; | "The number of Multicast Listener Query messages."; | |||
reference | ||||
"RFC 3810"; | ||||
} | } | |||
leaf num-report-v1 { | leaf num-report-v1 { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of Version 1 Multicast Listener Report."; | "The number of Version 1 Multicast Listener Report."; | |||
reference | ||||
"RFC 2710"; | ||||
} | } | |||
leaf num-report-v2 { | leaf num-report-v2 { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of Version 2 Multicast Listener Report."; | "The number of Version 2 Multicast Listener Report."; | |||
reference | ||||
"RFC 3810"; | ||||
} | } | |||
leaf num-done { | leaf num-done { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of Version 1 Multicast Listener Done."; | "The number of Version 1 Multicast Listener Done."; | |||
reference | ||||
"RFC 2710"; | ||||
} | } | |||
leaf num-pim-hello { | leaf num-pim-hello { | |||
type yang:counter64; | type yang:counter64; | |||
description | description | |||
"The number of PIM hello messages."; | "The number of PIM hello messages."; | |||
reference | ||||
"RFC 7761"; | ||||
} | } | |||
} // mld-snooping-statistics | } // mld-snooping-statistics | |||
grouping igmp-snooping-interface-statistics-attributes { | augment "/rt:routing/rt:control-plane-protocols"+ | |||
"/rt:control-plane-protocol" { | ||||
when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' { | ||||
description | ||||
"This container is only valid for IGMP snooping."; | ||||
} | ||||
description | ||||
"IGMP snooping augmentation to control plane protocol | ||||
configuration and state."; | ||||
description "Interface statistics attributes for IGMP snooping"; | container igmp-snooping-instance { | |||
if-feature igmp-snooping; | ||||
description | ||||
"IGMP snooping instance to configure igmp-snooping."; | ||||
container interfaces { | leaf scenario { | |||
config false; | type snooping-scenario-type; | |||
default bridge; | ||||
description | ||||
"The scenario indicates BRIDGE or L2VPN."; | ||||
} | ||||
description | uses instance-config-attributes-igmp-mld-snooping; | |||
"Interfaces associated with the IGMP snooping instance"; | leaf igmp-version { | |||
type uint8 { | ||||
range "1..3"; | ||||
} | ||||
default 2; | ||||
description "IGMP version."; | ||||
} | ||||
list interface { | leaf querier-source { | |||
key "name"; | type inet:ipv4-address; | |||
description | ||||
"Use the IGMP snooping querier to support IGMP | ||||
snooping in a VLAN where PIM and IGMP are not configured. | ||||
The IPv4 address is used as source address in messages."; | ||||
} | ||||
description | list static-l2-multicast-group { | |||
"Interfaces associated with the IGMP snooping instance"; | if-feature static-l2-multicast-group; | |||
key "group source-addr"; | ||||
description | ||||
"A static multicast route, (*,G) or (S,G)."; | ||||
leaf name { | leaf group { | |||
type if:interface-ref; | type rt-types:ipv4-multicast-group-address; | |||
description | description | |||
"The name of interface"; | "Multicast group IPv4 address"; | |||
} | ||||
} | leaf source-addr { | |||
type rt-types:ipv4-multicast-source-address; | ||||
description | ||||
"Multicast source IPv4 address."; | ||||
} | ||||
container statistics { | leaf-list bridge-outgoing-interface { | |||
description | when 'derived-from-or-self(../../scenario,"ims:bridge")'; | |||
"The interface statistics for IGMP snooping"; | type if:interface-ref; | |||
description "Outgoing interface in BRIDGE forwarding"; | ||||
} | ||||
container received { | leaf-list l2vpn-outgoing-ac { | |||
description | when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | |||
"Statistics of received IGMP snooping packets."; | type if:interface-ref; | |||
description "Outgoing Attachment Circuit (AC) in L2VPN"; | ||||
} | ||||
uses igmp-snooping-statistics; | leaf-list l2vpn-outgoing-pw { | |||
} | when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; | |||
container sent { | type pw:pseudowire-ref; | |||
description | description "Outgoing Pseudo Wire (PW) in L2VPN"; | |||
"Statistics of sent IGMP snooping packets."; | } | |||
uses igmp-snooping-statistics; | } // static-l2-multicast-group | |||
} | ||||
} | ||||
} | ||||
} | ||||
}//igmp-snooping-interface-statistics-attributes | ||||
grouping mld-snooping-interface-statistics-attributes { | uses instance-state-attributes-igmp-mld-snooping; | |||
description "Interface statistics attributes for MLD snooping"; | list group { | |||
container interfaces { | key "address"; | |||
config false; | ||||
description | config false; | |||
"Interfaces associated with the MLD snooping instance"; | ||||
list interface { | description "IGMP snooping information"; | |||
key "name"; | ||||
description | leaf address { | |||
"Interfaces associated with the MLD snooping instance"; | type rt-types:ipv4-multicast-group-address; | |||
description | ||||
"Multicast group IPv4 address"; | ||||
} | ||||
leaf name { | uses instance-state-group-attributes-igmp-mld-snooping; | |||
type if:interface-ref; | ||||
description | ||||
"The name of interface"; | ||||
} | leaf last-reporter { | |||
type inet:ipv4-address; | ||||
description | ||||
"Address of the last host which has sent report to join | ||||
the multicast group."; | ||||
} | ||||
list source { | ||||
key "address"; | ||||
description "Source IPv4 address for multicast stream"; | ||||
leaf address { | ||||
type rt-types:ipv4-multicast-source-address; | ||||
description "Source IPv4 address for multicast stream"; | ||||
} | ||||
uses instance-state-source-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list host { | ||||
if-feature explicit-tracking; | ||||
key "host-address"; | ||||
description | ||||
"List of multicast membership hosts | ||||
of the specific multicast source-group."; | ||||
leaf host-address { | ||||
type inet:ipv4-address; | ||||
description | ||||
"Multicast membership host address."; | ||||
} | ||||
leaf host-filter-mode { | ||||
type filter-mode-type; | ||||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast membership | ||||
host may be either include or exclude."; | ||||
} | ||||
}// list host | ||||
} // list source | ||||
} // list group | ||||
container interfaces { | ||||
config false; | ||||
description | ||||
"Interfaces associated with the IGMP snooping instance"; | ||||
list interface { | ||||
key "name"; | ||||
container statistics { | ||||
description | description | |||
"The interface statistics for MLD snooping"; | "Interfaces associated with the IGMP snooping instance"; | |||
container received { | leaf name { | |||
type if:interface-ref; | ||||
description | description | |||
"Statistics of received MLD snooping packets."; | "The name of interface"; | |||
uses mld-snooping-statistics; | ||||
} | } | |||
container sent { | ||||
container statistics { | ||||
description | description | |||
"Statistics of sent MLD snooping packets."; | "The interface statistics for IGMP snooping"; | |||
uses mld-snooping-statistics; | container received { | |||
} | description | |||
} | "Statistics of received IGMP snooping packets."; | |||
} | ||||
} | ||||
}//mld-snooping-interface-statistics-attributes | ||||
augment "/rt:routing/rt:control-plane-protocols"+ | uses igmp-snooping-statistics; | |||
"/rt:control-plane-protocol" { | } | |||
when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' { | container sent { | |||
description | description | |||
"This container is only valid for IGMP snooping."; | "Statistics of sent IGMP snooping packets."; | |||
} | ||||
description | ||||
"IGMP snooping augmentation to control plane protocol | ||||
configuration and state."; | ||||
container igmp-snooping-instance { | uses igmp-snooping-statistics; | |||
if-feature igmp-snooping; | } | |||
description | ||||
"IGMP snooping instance to configure igmp-snooping."; | ||||
leaf scenario { | } | |||
type snooping-scenario-type; | } | |||
default bridge; | ||||
description | ||||
"The scenario indicates BRIDGE or L2VPN."; | ||||
} | } | |||
uses instance-config-attributes-igmp-snooping; | ||||
uses instance-state-attributes-igmp-snooping; | ||||
uses igmp-snooping-interface-statistics-attributes; | ||||
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 { | |||
leaf group { | leaf group { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
enum 'all-groups' { | enum 'all-groups' { | |||
skipping to change at page 32, line 12 ¶ | skipping to change at page 29, line 12 ¶ | |||
description | description | |||
"MLD snooping instance to configure mld-snooping."; | "MLD snooping instance to configure mld-snooping."; | |||
leaf scenario { | leaf scenario { | |||
type snooping-scenario-type; | type snooping-scenario-type; | |||
default bridge; | default bridge; | |||
description | description | |||
"The scenario indicates BRIDGE or L2VPN."; | "The scenario indicates BRIDGE or L2VPN."; | |||
} | } | |||
uses instance-config-attributes-mld-snooping; | uses instance-config-attributes-igmp-mld-snooping; | |||
uses instance-state-attributes-mld-snooping; | leaf mld-version { | |||
type uint8 { | ||||
range "1..2"; | ||||
} | ||||
default 2; | ||||
description "MLD version."; | ||||
} | ||||
uses mld-snooping-interface-statistics-attributes; | leaf querier-source { | |||
type inet:ipv6-address; | ||||
description | ||||
"Use the MLD snooping querier to support MLD snooping where | ||||
PIM and MLD are not configured. The IPv6 address is used as | ||||
the source address in messages."; | ||||
} | ||||
list static-l2-multicast-group { | ||||
if-feature static-l2-multicast-group; | ||||
key "group source-addr"; | ||||
description | ||||
"A static multicast route, (*,G) or (S,G)."; | ||||
leaf group { | ||||
type rt-types:ipv6-multicast-group-address; | ||||
description | ||||
"Multicast group IPv6 address"; | ||||
} | ||||
leaf source-addr { | ||||
type rt-types:ipv6-multicast-source-address; | ||||
description | ||||
"Multicast source IPv6 address."; | ||||
} | ||||
leaf-list bridge-outgoing-interface { | ||||
when 'derived-from-or-self(../../scenario,"ims:bridge")'; | ||||
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 | ||||
uses instance-state-attributes-igmp-mld-snooping; | ||||
list group { | ||||
key "address"; | ||||
config false; | ||||
description "MLD snooping statistics information"; | ||||
leaf address { | ||||
type rt-types:ipv6-multicast-group-address; | ||||
description | ||||
"Multicast group IPv6 address"; | ||||
} | ||||
uses instance-state-group-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list source { | ||||
key "address"; | ||||
description "Source IPv6 address for multicast stream"; | ||||
leaf address { | ||||
type rt-types:ipv6-multicast-source-address; | ||||
description "Source IPv6 address for multicast stream"; | ||||
} | ||||
uses instance-state-source-attributes-igmp-mld-snooping; | ||||
leaf last-reporter { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Address of the last host which has sent report | ||||
to join the multicast group."; | ||||
} | ||||
list host { | ||||
if-feature explicit-tracking; | ||||
key "host-address"; | ||||
description | ||||
"List of multicast membership hosts | ||||
of the specific multicast source-group."; | ||||
leaf host-address { | ||||
type inet:ipv6-address; | ||||
description | ||||
"Multicast membership host address."; | ||||
} | ||||
leaf host-filter-mode { | ||||
type filter-mode-type; | ||||
mandatory true; | ||||
description | ||||
"Filter mode for a multicast membership | ||||
host may be either include or exclude."; | ||||
} | ||||
}// list host | ||||
} // list source | ||||
} // list group | ||||
container interfaces { | ||||
config false; | ||||
description | ||||
"Interfaces associated with the MLD snooping instance"; | ||||
list interface { | ||||
key "name"; | ||||
description | ||||
"Interfaces associated with the MLD snooping instance"; | ||||
leaf name { | ||||
type if:interface-ref; | ||||
description | ||||
"The name of interface"; | ||||
} | ||||
container statistics { | ||||
description | ||||
"The interface statistics for MLD snooping"; | ||||
container received { | ||||
description | ||||
"Statistics of received MLD snooping packets."; | ||||
uses mld-snooping-statistics; | ||||
} | ||||
container sent { | ||||
description | ||||
"Statistics of sent MLD snooping packets."; | ||||
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 | |||
"Clear MLD snooping cache tables."; | "Clear MLD snooping cache tables."; | |||
input { | input { | |||
leaf group { | leaf group { | |||
type union { | type union { | |||
type enumeration { | type enumeration { | |||
skipping to change at page 35, line 28 ¶ | skipping to change at page 35, line 25 ¶ | |||
sensitive or vulnerable in some network environments. It is thus | sensitive or vulnerable in some network environments. It is thus | |||
important to control access to these operations. These are the | important to control access to these operations. These are the | |||
operations and their sensitivity/vulnerability: | 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 | |||
The IGMP & MLD Snooping YANG module supports the "clear-igmp-snooping- | Some of the actions in this YANG module may be considered sensitive or | |||
groups" and "clear-mld-snooping-groups" actions. If it meets | vulnerable in some network environments. The IGMP & MLD Snooping YANG | |||
unauthorized action operation invocation, the IGMP and MLD Snooping | module supports the "clear-igmp-snooping-groups" and "clear-mld- | |||
group tables will be cleared unexpectedly. | snooping-groups" actions. If unauthorized action is invoked, the IGMP | |||
and MLD Snooping group tables will be cleared unexpectedly. Especially | ||||
when using wildcard on group and source, the impact will be dramatic. | ||||
6. IANA Considerations | 6. IANA Considerations | |||
RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | RFC Ed.: In this section, replace all occurrences of 'XXXX' with the | |||
actual RFC number (and remove this note). | actual RFC number (and remove this note). | |||
This document registers the following namespace URIs in the IETF XML | This document registers the following namespace URIs in the IETF XML | |||
registry [RFC3688]: | registry [RFC3688]: | |||
skipping to change at page 37, line 19 ¶ | skipping to change at page 37, line 19 ¶ | |||
[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. | |||
[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, | ||||
Z. Zhang, L. Zheng, "Protocol Independent Multicast - | ||||
Sparse Mode (PIM-SM): Protocol Specification (Revised)", | ||||
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. | |||
[RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol", | [RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol", | |||
RFC 8040, January 2017. | RFC 8040, January 2017. | |||
[RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG | [RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG | |||
Data Types for the Routing Area", RFC 8294, December 2017. | Data Types for the Routing Area", RFC 8294, December 2017. | |||
[RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC | [RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC | |||
skipping to change at page 42, line 4 ¶ | skipping to change at page 41, line 37 ¶ | |||
"ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" | "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
] | ] | |||
} | } | |||
] | ] | |||
} | } | |||
} | } | |||
The following action is to clear all the entries whose group address is | ||||
225.1.1.1 for igmp-snooping-instance bis1. | ||||
POST /restconf/operations/ietf-routing:routing/\ | ||||
control-plane-protocols/control-plane-protocol=igmp-snooping,bis1/\ | ||||
ietf-igmp-mld-snooping:igmp-snooping/igmp-snooping-instance\ | ||||
/clear-igmp-snooping-groups HTTP/1.1 | ||||
Host: example.com | ||||
Content-Type: application/yang-data+json | ||||
{ | ||||
"ietf-igmp-mld-snooping:input" : { | ||||
"group": "225.1.1.1", | ||||
"source": "*" | ||||
} | ||||
} | ||||
A.2 L2VPN scenario | A.2 L2VPN scenario | |||
This section contains an example for L2VPN scenario in the JSON encoding | This section contains an example for L2VPN scenario in the JSON encoding | |||
[RFC7951], containing both configuration and state data. | [RFC7951], containing both configuration and state data. | |||
+-----------+ | +-----------+ | |||
+ Source + | + Source + | |||
+-----+-----+ | +-----+-----+ | |||
| | | | |||
-----------------+---------------------------- | -----------------+---------------------------- | |||
skipping to change at page 42, line 31 ¶ | skipping to change at page 42, line 31 ¶ | |||
| \ | | \ | |||
| \ | | \ | |||
eth2/1 | \ eth3/1 | eth2/1 | \ eth3/1 | |||
+---+---+ +-+---+ | +---+---+ +-+---+ | |||
+ R2 +----+ R3 + | + R2 +----+ R3 + | |||
+---+---+ +-+---+ | +---+---+ +-+---+ | |||
eth2/2 | | eth3/2 | eth2/2 | | eth3/2 | |||
| | | | | | |||
---------------+----------+------------------- | ---------------+----------+------------------- | |||
| | | | | | |||
| | | | | | |||
+--------+--+ +---+--------+ | +--------+--+ +---+--------+ | |||
+ Receiver1 + + Receiver2 + | + Receiver1 + + Receiver2 + | |||
+-----------+ +------------+ | +-----------+ +------------+ | |||
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", | |||
End of changes. 89 change blocks. | ||||
399 lines changed or deleted | 423 lines changed or added | |||
This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |