idnits 2.17.1 draft-ietf-pim-igmp-mld-snooping-yang-04.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** There are 32 instances of too long lines in the document, the longest one being 12 characters in excess of 72. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 367 has weird spacing: '...ce-addr sou...' == Line 371 has weird spacing: '...ce-addr sou...' == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (August 07, 2018) is 2089 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC2119' is mentioned on line 99, but not defined == Missing Reference: 'RFC6241' is mentioned on line 1704, but not defined == Missing Reference: 'RFC8040' is mentioned on line 1704, but not defined == Missing Reference: 'RFC7950' is mentioned on line 1778, but not defined == Missing Reference: 'RFC6242' is mentioned on line 1706, but not defined == Missing Reference: 'RFC5246' is mentioned on line 1708, but not defined ** Obsolete undefined reference: RFC 5246 (Obsoleted by RFC 8446) == Missing Reference: 'RFC6536' is mentioned on line 1710, but not defined ** Obsolete undefined reference: RFC 6536 (Obsoleted by RFC 8341) == Missing Reference: 'RFC3688' is mentioned on line 1765, but not defined == Missing Reference: 'RFC7951' is mentioned on line 1880, but not defined == Unused Reference: 'RFC2236' is defined on line 1798, but no explicit reference was found in the text == Unused Reference: 'RFC2710' is defined on line 1801, but no explicit reference was found in the text == Unused Reference: 'RFC3376' is defined on line 1804, but no explicit reference was found in the text == Unused Reference: 'RFC3810' is defined on line 1808, but no explicit reference was found in the text == Unused Reference: 'RFC4604' is defined on line 1816, but no explicit reference was found in the text == Unused Reference: 'RFC4607' is defined on line 1821, but no explicit reference was found in the text == Unused Reference: 'RFC6021' is defined on line 1828, but no explicit reference was found in the text == Unused Reference: 'RFC6991' is defined on line 1831, but no explicit reference was found in the text == Unused Reference: 'RFC8343' is defined on line 1837, but no explicit reference was found in the text ** Downref: Normative reference to an Informational RFC: RFC 4541 ** Obsolete normative reference: RFC 6021 (Obsoleted by RFC 6991) Summary: 5 errors (**), 0 flaws (~~), 22 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 PIM Working Group H. Zhao 2 Internet Draft Ericsson 3 Intended status: Standards Track X. Liu 4 Expires: February 06, 2019 Jabil 5 Y. Liu 6 Huawei 7 M. Sivakumar 8 Juniper 9 A. Peter 10 Individual 12 August 07, 2018 14 A Yang Data Model for IGMP and MLD Snooping 15 draft-ietf-pim-igmp-mld-snooping-yang-04.txt 17 Abstract 19 This document defines a YANG data model that can be used to 20 configure and manage Internet Group Management Protocol (IGMP) and 21 Multicast Listener Discovery (MLD) Snooping devices. The YANG module in 22 this document conforms to Network Management Datastore Architecture 23 (NMDA). 25 Status of this Memo 27 This Internet-Draft is submitted in full conformance with the 28 provisions of BCP 78 and BCP 79. 30 Internet-Drafts are working documents of the Internet Engineering 31 Task Force (IETF), its areas, and its working groups. Note that 32 other groups may also distribute working documents as Internet- 33 Drafts. 35 Internet-Drafts are draft documents valid for a maximum of six months 36 and may be updated, replaced, or obsoleted by other documents at any 37 time. It is inappropriate to use Internet-Drafts as reference 38 material or to cite them other than as "work in progress." 40 The list of current Internet-Drafts can be accessed at 41 http://www.ietf.org/ietf/1id-abstracts.txt 43 The list of Internet-Draft Shadow Directories can be accessed at 44 http://www.ietf.org/shadow.html 45 This Internet-Draft will expire on February 06, 2019. 47 Copyright Notice 49 Copyright (c) 2018 IETF Trust and the persons identified as the 50 document authors. All rights reserved. 52 This document is subject to BCP 78 and the IETF Trust's Legal 53 Provisions Relating to IETF Documents 54 (http://trustee.ietf.org/license-info) in effect on the date of 55 publication of this document. Please review these documents 56 carefully, as they describe your rights and restrictions with respect 57 to this document. Code Components extracted from this document must 58 include Simplified BSD License text as described in Section 4.e of 59 the Trust Legal Provisions and are provided without warranty as 60 described in the Simplified BSD License. 62 Table of Contents 64 1. Introduction...................................................3 65 1.1. Terminology...............................................3 66 1.2. Tree Diagrams.............................................3 67 2. Design of Data Model...........................................3 68 2.1. Overview..................................................4 69 2.2. IGMP Snooping Instances...................................4 70 2.3. MLD Snooping Instances....................................6 71 2.4. IGMP and MLD Snooping Instances Reference.................7 72 2.5. Augment /if:interfaces/if:interface.......................8 73 2.6. IGMP and MLD Snooping RPC................................10 74 3. IGMP and MLD Snooping YANG Module.............................10 75 4. Security Considerations.......................................36 76 5. IANA Considerations...........................................37 77 6. Normative References..........................................38 78 Appendix A. Data Tree Example...................................40 79 Authors' Addresses...............................................45 81 1. Introduction 83 This document defines a YANG [RFC6020] data model for the management of 84 Internet Group Management Protocol (IGMP) and Multicast Listener 85 Discovery (MLD) Snooping devices. 87 The YANG module in this document conforms to the Network Management 88 Datastore Architecture defined in [RFC8342]. The "Network Management 89 Datastore Architecture" (NMDA) adds the ability to inspect the current 90 operational values for configuration, allowing clients to use identical 91 paths for retrieving the configured values and the operational values. 93 1.1. Terminology 95 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 96 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 97 "OPTIONAL" in this document are to be interpreted as described in BCP 14 98 [RFC2119]. 100 The terminology for describing YANG data models is found in [RFC6020]. 102 1.2. Tree Diagrams 104 A simplified graphical representation of the data model is used in this 105 document. The meaning of the symbols in these diagrams is as follows: 107 o Brackets "[" and "]" enclose list keys. 109 o Abbreviations before data node names: "rw" means configuration 110 (read-write), and "ro" means state data (read-only). 112 o Symbols after data node names: "?" means an optional node, "!" 113 means a presence container, and "*" denotes a list and leaf-list. 115 o Parentheses enclose choice and case nodes, and case nodes are also 116 marked with a colon (":"). 118 o Ellipsis ("...") stands for contents of subtrees that are not 119 shown. 121 2. Design of Data Model 123 The model covers Considerations for Internet Group Management Protocol 124 (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches 125 [RFC4541]. 127 The goal of this document is to define a data model that provides a 128 common user interface to IGMP and MLD Snooping. This document provides 129 freedom for vendors to adapt this data model to their product 130 implementations. 132 2.1. Overview 134 The IGMP and MLD Snooping YANG module defined in this document has all 135 the common building blocks for the IGMP and MLD Snooping protocol. 137 The YANG module includes IGMP and MLD Snooping instance definition, 138 instance reference in the scenario of BRIDGE and L2VPN. The module also 139 includes the RPC methods for clearing IGMP and MLD Snooping group 140 tables. 142 This YANG module follows the Guidelines for YANG Module Authors (NMDA) 143 [draft-dsdt-nmda-guidelines-01]. This NMDA ("Network Management 144 Datastore Architecture") architecture provides an architectural 145 framework for datastores as they are used by network management 146 protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG 147 [RFC7950] data modeling language. 149 2.2. IGMP Snooping Instances 151 The YANG module defines igmp-snooping-instance which could be referenced 152 in the BRIDGE or L2VPN scenario to enable IGMP Snooping. 154 All the IGMP Snooping related attributes have been defined in the igmp- 155 snooping-instance. The read-write attribute means configurable data. The 156 read-only attribute means state data. The key attribute of the igmp- 157 snooping-instance is name. 159 One igmp-snooping-instance could be referenced in one BRIDGE instance or 160 L2VPN instance. One igmp-snooping-instance corresponds to one BRIDGE 161 instance or L2VPN instance. 163 The value of type in igmp-snooping-instance is bridge or l2vpn. When it 164 is bridge, the igmp-snooping-instance will be referenced in the BRIDGE 165 scenario. When it is l2vpn, the igmp-snooping-instance will be 166 referenced in the L2VPN scenario. 168 The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, 169 l2vpn-mrouter-interface-pw are filled by snooping device dynamically. 170 They are different from static-bridge-mrouter-interface, static-l2vpn- 171 mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw which are 172 configured statically. 174 module: ietf-igmp-mld-snooping 175 +--rw igmp-snooping-instances 176 | +--rw igmp-snooping-instance* [name] 177 | +--rw name string 178 | +--rw type? enumeration 179 | +--rw enable? boolean 180 | +--rw forwarding-mode? enumeration 181 | +--rw explicit-tracking? boolean 182 | | {explicit-tracking}? 183 | +--rw exclude-lite? boolean 184 | | {exclude-lite}? 185 | +--rw send-query? boolean 186 | +--rw immediate-leave? empty 187 | | {immediate-leave}? 188 | +--rw last-member-query-interval? uint16 189 | +--rw query-interval? uint16 190 | +--rw query-max-response-time? uint16 191 | +--rw require-router-alert? boolean 192 | | {require-router-alert}? 193 | +--rw robustness-variable? uint8 194 | +--rw version? uint8 195 | +--rw static-bridge-mrouter-interface* if:interface-ref 196 | | {static-mrouter-interface}? 197 | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref 198 | | {static-mrouter-interface}? 199 | +--rw static-l2vpn-mrouter-interface-pw* 200 | | l2vpn-instance-pw-ref {static-mrouter-interface}? 201 | +--rw querier-source? inet:ipv4-address 202 | +--rw static-l2-multicast-group* [group source-addr] 203 | | {static-l2-multicast-group}? 204 | | +--rw group inet:ipv4-address 205 | | +--rw source-addr source-ipv4-addr-type 206 | | +--rw bridge-outgoing-interface* if:interface-ref 207 | | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref 208 | | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref 209 | +--ro entries-count? uint32 210 | +--ro bridge-mrouter-interface* if:interface-ref 211 | +--ro l2vpn-mrouter-interface-ac* if:interface-ref 212 | +--ro l2vpn-mrouter-interface-pw* 213 | | l2vpn-instance-pw-ref 214 | +--ro group* [address] 215 | +--ro address inet:ipv4-address 216 | +--ro mac-address? yang:phys-address 217 | +--ro expire? uint32 218 | +--ro up-time? uint32 219 | +--ro last-reporter? inet:ipv4-address 220 | +--ro source* [address] 221 | +--ro address inet:ipv4-address 222 | +--ro bridge-outgoing-interface* if:interface-ref 223 | +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref 224 | +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref 225 | +--ro up-time? uint32 226 | +--ro expire? uint32 227 | +--ro host-count? uint32 228 | | {explicit-tracking}? 229 | +--ro last-reporter? inet:ipv4-address 230 | +--ro host* [host-address] {explicit-tracking}? 231 | +--ro host-address inet:ipv4-address 232 | +--ro host-filter-mode? enumeration 234 2.3. MLD Snooping Instances 236 The YANG module defines mld-snooping-instance which could be referenced 237 in the BRIDGE or L2VPN scenario to enable MLD Snooping. 239 The mld-snooping-instance is the same as IGMP snooping except changing 240 IPV4 addresses to IPV6 addresses. 242 module: ietf-igmp-mld-snooping 243 +--rw mld-snooping-instances 244 +--rw mld-snooping-instance* [name] 245 +--rw name string 246 +--rw type? enumeration 247 +--rw enable? boolean 248 +--rw forwarding-mode? enumeration 249 +--rw explicit-tracking? boolean 250 | {explicit-tracking}? 251 +--rw exclude-lite? boolean 252 | {exclude-lite}? 253 +--rw send-query? boolean 254 +--rw immediate-leave? empty 255 | {immediate-leave}? 256 +--rw last-member-query-interval? uint16 257 +--rw query-interval? uint16 258 +--rw query-max-response-time? uint16 259 +--rw require-router-alert? boolean 260 | {require-router-alert}? 261 +--rw robustness-variable? uint8 262 +--rw version? uint8 263 +--rw static-bridge-mrouter-interface* if:interface-ref 264 | {static-mrouter-interface}? 265 +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref 266 | {static-mrouter-interface}? 267 +--rw static-l2vpn-mrouter-interface-pw* 268 | l2vpn-instance-pw-ref {static-mrouter-interface}? 269 +--rw querier-source? inet:ipv6-address 270 +--rw static-l2-multicast-group* [group source-addr] 271 | {static-l2-multicast-group}? 272 | +--rw group inet:ipv6-address 273 | +--rw source-addr source-ipv6-addr-type 274 | +--rw bridge-outgoing-interface* if:interface-ref 275 | +--rw l2vpn-outgoing-ac* l2vpn-instance-ac-ref 276 | +--rw l2vpn-outgoing-pw* l2vpn-instance-pw-ref 277 +--ro entries-count? uint32 278 +--ro bridge-mrouter-interface* if:interface-ref 279 +--ro l2vpn-mrouter-interface-ac* if:interface-ref 280 +--ro l2vpn-mrouter-interface-pw* 281 | l2vpn-instance-pw-ref 282 +--ro group* [address] 283 +--ro address inet:ipv6-address 284 +--ro mac-address? yang:phys-address 285 +--ro expire? uint32 286 +--ro up-time? uint32 287 +--ro last-reporter? inet:ipv6-address 288 +--ro source* [address] 289 +--ro address inet:ipv6-address 290 +--ro bridge-outgoing-interface* if:interface-ref 291 +--ro l2vpn-outgoing-ac* l2vpn-instance-ac-ref 292 +--ro l2vpn-outgoing-pw* l2vpn-instance-pw-ref 293 +--ro up-time? uint32 294 +--ro expire? uint32 295 +--ro host-count? uint32 296 | {explicit-tracking}? 297 +--ro last-reporter? inet:ipv6-address 298 +--ro host* [host-address] {explicit-tracking}? 299 +--ro host-address inet:ipv6-address 300 +--ro host-filter-mode? enumeration 302 2.4. IGMP and MLD Snooping Instances Reference 304 The igmp-snooping-instance could be referenced in the scenario of BRIDGE 305 or L2VPN to configure the IGMP Snooping. 307 For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge 308 to reference igmp-snooping-instance. It means IGMP Snooping is enabled 309 in the whole bridge. 311 It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ 312 dot1q:bridge-vlan/dot1q:vlan to reference igmp-snooping-instance. It 313 means IGMP Snooping is enabled in the certain VLAN of the bridge. 315 augment /dot1q:bridges/dot1q:bridge: 316 +--rw igmp-snooping-instance? igmp-snooping-instance-ref 317 +--rw mld-snooping-instance? mld-snooping-instance-ref 319 augment /dot1q:bridges/dot1q:bridge/dot1q:component/dot1q:bridge-vlan/dot1q:vlan: 320 +--rw igmp-snooping-instance? igmp-snooping-instance-ref 321 +--rw mld-snooping-instance? mld-snooping-instance-ref 323 For the L2VPN scenario this model augments /ni:network-instances/ 324 ni:network-instance/ni:ni-type/l2vpn:l2vpn to reference igmp-snooping- 325 instance. It means IGMP Snooping is enabled in the specified l2vpn 326 instance. 328 augment /ni:network-instances/ni:network-instance/ni:ni-type/l2vpn:l2vpn: 329 +--rw igmp-snooping-instance? igmp-snooping-instance-ref 330 +--rw mld-snooping-instance? mld-snooping-instance-ref 332 The mld-snooping-instance could be referenced in concurrence with igmp- 333 snooping-instance to configure the MLD Snooping. 335 2.5. Augment /if:interfaces/if:interface 337 This model augments /if:interfaces/if:interface and then add the IGMP 338 and MLD Snooping related attributes under it. The attributes include 339 enable, version, etc. 341 The static-mrouter-interface and static-l2-multicast-group could be 342 configured statically under the /if:interfaces/if:interface/ims:igmp- 343 mld-snooping view. Meanwhile, you can configure them under the IGMP and 344 MLD Snooping instance view. 346 The attributes under the statistics are read-only. They show the 347 statistics of IGMP and MLD Snooping related packets. 349 augment /if:interfaces/if:interface: 350 +--rw igmp-mld-snooping 351 +--rw enable? boolean 352 +--rw version? uint8 353 +--rw type? enumeration 354 +--rw static-mrouter-interface 355 | +--rw (static-mrouter-interface)? 356 | +--:(bridge) 357 | | +--rw bridge-name? string 358 | | +--rw vlan-id* uint32 359 | +--:(l2vpn) 360 | +--rw l2vpn-instance-name? string 361 +--rw static-l2-multicast-group 362 | +--rw (static-l2-multicast-group)? 363 | +--:(bridge) 364 | | +--rw bridge-name? string 365 | | +--rw bridge-group-v4* [group source-addr] 366 | | | +--rw group inet:ipv4-address 367 | | | +--rw source-addr source-ipv4-addr-type 368 | | | +--rw vlan-id* uint32 369 | | +--rw bridge-group-v6* [group source-addr] 370 | | +--rw group inet:ipv6-address 371 | | +--rw source-addr source-ipv6-addr-type 372 | | +--rw vlan-id* uint32 373 | +--:(l2vpn) 374 | +--rw l2vpn-group-v4* [group source-addr] 375 | | +--rw group inet:ipv4-address 376 | | +--rw source-addr source-ipv4-addr-type 377 | | +--rw l2vpn-instance-name? string 378 | +--rw l2vpn-group-v6* [group source-addr] 379 | +--rw group inet:ipv6-address 380 | +--rw source-addr source-ipv6-addr-type 381 | +--rw l2vpn-instance-name? string 382 +--ro statistics 383 +--ro received 384 | +--ro query? yang:counter64 385 | +--ro membership-report-v1? yang:counter64 386 | +--ro membership-report-v2? yang:counter64 387 | +--ro membership-report-v3? yang:counter64 388 | +--ro leave? yang:counter64 389 | +--ro non-member-leave? yang:counter64 390 | +--ro pim? yang:counter64 391 +--ro sent 392 +--ro query? yang:counter64 393 +--ro membership-report-v1? yang:counter64 394 +--ro membership-report-v2? yang:counter64 395 +--ro membership-report-v3? yang:counter64 396 +--ro leave? yang:counter64 397 +--ro non-member-leave? yang:counter64 398 +--ro pim? yang:counter64 400 2.6. IGMP and MLD Snooping RPC 402 IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping 403 group tables. 405 rpcs: 406 +---x clear-igmp-snooping-groups {rpc-clear-groups}? 407 | +---w input 408 | +---w name? string 409 | +---w group? inet:ipv4-address 410 | +---w source? inet:ipv4-address 411 +---x clear-mld-snooping-groups {rpc-clear-groups}? 412 +---w input 413 +---w name? string 414 +---w group? inet:ipv6-address 415 +---w source? inet:ipv6-address 417 3. IGMP and MLD Snooping YANG Module 419 file ietf-igmp-mld-snooping@2018-08-02.yang 420 module ietf-igmp-mld-snooping { 421 yang-version 1.1; 422 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; 423 // replace with IANA namespace when assigned 424 prefix ims; 426 import ietf-inet-types { 427 prefix "inet"; 428 } 430 import ietf-yang-types { 431 prefix "yang"; 432 } 434 import ietf-interfaces { 435 prefix "if"; 436 } 438 import ietf-l2vpn { 439 prefix "l2vpn"; 440 } 442 import ietf-network-instance { 443 prefix "ni"; 444 } 446 import ieee802-dot1q-bridge { 447 prefix "dot1q"; 448 } 449 organization 450 "IETF PIM Working Group"; 452 contact 453 "WG Web: 454 WG List: 456 Editors: Hongji Zhao 457 459 Xufeng Liu 460 462 Yisong Liu 463 465 Anish Peter 466 468 Mahesh Sivakumar 469 471 "; 473 description 474 "The module defines a collection of YANG definitions common for 475 all Internet Group Management Protocol (IGMP) and Multicast 476 Listener Discovery (MLD) Snooping devices. 478 Copyright (c) 2018 IETF Trust and the persons identified as 479 authors of the code. All rights reserved. 481 Redistribution and use in source and binary forms, with or 482 without modification, is permitted pursuant to, and subject to 483 the license terms contained in, the Simplified BSD License set 484 forth in Section 4.c of the IETF Trust's Legal Provisions 485 Relating to IETF Documents 486 (http://trustee.ietf.org/license-info). 488 This version of this YANG module is part of RFC XXXX; see the 489 RFC itself for full legal notices."; 491 revision 2018-08-02 { 492 description 493 "Initial revision."; 494 reference 495 "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; 496 } 497 /* 498 * Features 499 */ 501 feature immediate-leave { 502 description 503 "Support configuration of immediate-leave."; 504 } 506 feature join-group { 507 description 508 "Support configuration of join-group."; 509 } 511 feature require-router-alert { 512 description 513 "Support configuration of require-router-alert."; 514 } 516 feature static-l2-multicast-group { 517 description 518 "Support configuration of L2 multicast static-group."; 519 } 521 feature static-mrouter-interface { 522 description 523 "Support configuration of mrouter interface."; 524 } 526 feature rpc-clear-groups { 527 description 528 "Support clearing statistics by RPC for IGMP & MLD snooping."; 529 } 531 feature explicit-tracking { 532 description 533 "Support configuration of per instance explicit-tracking."; 534 } 536 feature exclude-lite { 537 description 538 "Support configuration of per instance exclude-lite."; 539 } 541 /* 542 * Typedefs 543 */ 544 typedef igmp-snooping-instance-ref { 545 type leafref { 546 path "/igmp-snooping-instances/igmp-snooping-instance/name"; 547 } 548 description 549 "This type is used by data models that need to reference 550 IGMP snooping instance."; 551 } 553 typedef mld-snooping-instance-ref { 554 type leafref { 555 path "/mld-snooping-instances/mld-snooping-instance/name"; 556 } 557 description 558 "This type is used by data models that need to reference 559 MLD snooping instance."; 560 } 562 typedef l2vpn-instance-ac-ref { 563 type leafref { 564 path "/ni:network-instances/ni:network-instance"+ 565 "/l2vpn:endpoint/l2vpn:name"; 566 } 567 description "l2vpn-instance-ac-ref"; 568 } 570 typedef l2vpn-instance-pw-ref { 571 type leafref { 572 path "/ni:network-instances/ni:network-instance"+ 573 "/l2vpn:endpoint/l2vpn:name"; 574 } 575 description "l2vpn-instance-pw-ref"; 576 } 578 typedef source-ipv4-addr-type { 579 type union { 580 type enumeration { 581 enum '*' { 582 description 583 "Any source address."; 584 } 585 } 586 type inet:ipv4-address; 587 } 588 description 589 "Multicast source IPV4 address type."; 590 } // source-ipv4-addr-type 592 typedef source-ipv6-addr-type { 593 type union { 594 type enumeration { 595 enum '*' { 596 description 597 "Any source address."; 598 } 600 } 601 type inet:ipv6-address; 602 } 603 description 604 "Multicast source IPV6 address type."; 605 } // source-ipv6-addr-type 607 /* 608 * Groupings 609 */ 611 grouping general-state-attributes { 613 description "General State attributes"; 615 container received { 616 config false; 617 description "Statistics of received IGMP and MLD snooping 618 related packets."; 620 uses general-statistics-sent-received; 621 } 622 container sent { 623 config false; 624 description "Statistics of sent IGMP and MLD snooping 625 related packets."; 627 uses general-statistics-sent-received; 628 } 630 } // general-state-attributes 632 grouping instance-config-attributes-igmp-snooping { 633 description "IGMP snooping configuration for each"+ 634 "BRIDGE or L2VPN instance."; 636 uses instance-config-attributes-igmp-mld-snooping; 638 leaf querier-source { 639 type inet:ipv4-address; 640 description "Use the IGMP snooping querier to support IGMP 641 snooping in a VLAN where PIM and IGMP are not configured. 642 The IPV4 address is used as source address in messages."; 643 } 645 list static-l2-multicast-group { 646 if-feature static-l2-multicast-group; 647 key "group source-addr"; 648 description 649 "A static multicast route, (*,G) or (S,G)."; 651 leaf group { 652 type inet:ipv4-address; 653 description 654 "Multicast group IPV4 address"; 655 } 657 leaf source-addr { 658 type source-ipv4-addr-type; 659 description 660 "Multicast source IPV4 address."; 661 } 663 leaf-list bridge-outgoing-interface { 664 when "../../type = 'bridge'"; 665 type if:interface-ref; 666 description "Outgoing interface in BRIDGE forwarding"; 667 } 669 leaf-list l2vpn-outgoing-ac { 670 when "../../type = 'l2vpn'"; 671 type l2vpn-instance-ac-ref; 672 description "Outgoing AC in L2VPN forwarding"; 673 } 675 leaf-list l2vpn-outgoing-pw { 676 when "../../type = 'l2vpn'"; 677 type l2vpn-instance-pw-ref; 678 description "Outgoing PW in L2VPN forwarding"; 679 } 680 } // static-l2-multicast-group 681 } // instance-config-attributes-igmp-snooping 683 grouping instance-config-attributes-igmp-mld-snooping { 684 description 685 "IGMP and MLD snooping configuration of each VLAN."; 687 leaf enable { 688 type boolean; 689 default false; 690 description 691 "Set the value to true to enable IGMP and MLD snooping in the 692 VLAN instance."; 693 } 695 leaf forwarding-mode { 696 type enumeration { 697 enum "mac" { 698 description 699 "MAC-based lookup mode"; 700 } 701 enum "ip" { 702 description 703 "IP-based lookup mode"; 704 } 705 } 706 default "ip"; 707 description "The default forwarding mode is ip"; 708 } 710 leaf explicit-tracking { 711 if-feature explicit-tracking; 712 type boolean; 713 default false; 714 description "Tracks IGMP & MLD snooping v3 membership reports 715 from individual hosts. It contributes to saving network 716 resources and shortening leave latency."; 717 } 719 leaf exclude-lite { 720 if-feature exclude-lite; 721 type boolean; 722 default false; 723 description 724 "lightweight IGMPv3 and MLDv2 protocols, which simplify the 725 standard versions of IGMPv3 and MLDv2."; 726 reference "RFC5790"; 727 } 729 leaf send-query { 730 type boolean; 731 default false; 732 description "Enable quick response for topo changes. 733 To support IGMP snooping in a VLAN where PIM and IGMP are 734 not configured. It cooperates with param querier-source. "; 735 } 737 leaf immediate-leave { 738 if-feature immediate-leave; 739 type empty; 740 description 741 "When immediate leave is enabled, the IGMP software assumes 742 that no more than one host is present on each VLAN port."; 743 } 745 leaf last-member-query-interval { 746 type uint16 { 747 range "1..65535"; 748 } 749 units seconds; 750 default 1; 751 description 752 "Last Member Query Interval, which may be tuned to modify 753 the leave latency of the network."; 754 reference "RFC3376. Sec. 8.8."; 755 } 757 leaf query-interval { 758 type uint16; 759 units seconds; 760 default 125; 761 description 762 "The Query Interval is the interval between General Queries 763 sent by the Querier."; 764 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 765 } 767 leaf query-max-response-time { 768 type uint16; 769 units seconds; 770 default 10; 771 description 772 "Query maximum response time specifies the maximum time 773 allowed before sending a responding report."; 774 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 775 } 777 leaf require-router-alert { 778 if-feature require-router-alert; 779 type boolean; 780 default false; 781 description 782 "When the value is true, router alert should exist 783 in the IP head of IGMP or MLD packet."; 784 } 786 leaf robustness-variable { 787 type uint8 { 788 range "1..7"; 789 } 790 default 2; 791 description 792 "Querier's Robustness Variable allows tuning for the 793 expected packet loss on a network."; 794 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 795 } 797 leaf version { 798 type uint8 { 799 range "1..3"; 801 } 802 default 2; 803 description "IGMP and MLD snooping version."; 804 } 806 leaf-list static-bridge-mrouter-interface { 807 when "../type = 'bridge'"; 808 if-feature static-mrouter-interface; 809 type if:interface-ref; 810 description "static mrouter interface in BRIDGE forwarding"; 811 } 813 leaf-list static-l2vpn-mrouter-interface-ac { 814 when "../type = 'l2vpn'"; 815 if-feature static-mrouter-interface; 816 type if:interface-ref; 817 description "static mrouter interface whose type is interface 818 in L2VPN forwarding"; 819 } 821 leaf-list static-l2vpn-mrouter-interface-pw { 822 when "../type = 'l2vpn'"; 823 if-feature static-mrouter-interface; 824 type l2vpn-instance-pw-ref; 825 description "static mrouter interface whose type is PW 826 in L2VPN forwarding"; 827 } 828 } // instance-config-attributes-igmp-mld-snooping 830 grouping instance-config-attributes-mld-snooping { 831 description "MLD snooping configuration of each VLAN."; 833 uses instance-config-attributes-igmp-mld-snooping; 835 leaf querier-source { 836 type inet:ipv6-address; 837 description 838 "Use the MLD snooping querier to support MLD snooping where 839 PIM and MLD are not configured. The IPV6 address is used as 840 the source address in messages."; 841 } 843 list static-l2-multicast-group { 844 if-feature static-l2-multicast-group; 845 key "group source-addr"; 846 description 847 "A static multicast route, (*,G) or (S,G)."; 849 leaf group { 850 type inet:ipv6-address; 851 description 852 "Multicast group IPV6 address"; 853 } 855 leaf source-addr { 856 type source-ipv6-addr-type; 857 description 858 "Multicast source IPV6 address."; 859 } 861 leaf-list bridge-outgoing-interface { 862 when "../../type = 'bridge'"; 863 type if:interface-ref; 864 description "Outgoing interface in BRIDGE forwarding"; 865 } 867 leaf-list l2vpn-outgoing-ac { 868 when "../../type = 'l2vpn'"; 869 type l2vpn-instance-ac-ref; 870 description "Outgoing AC in L2VPN forwarding"; 871 } 873 leaf-list l2vpn-outgoing-pw { 874 when "../../type = 'l2vpn'"; 875 type l2vpn-instance-pw-ref; 876 description "Outgoing PW in L2VPN forwarding"; 877 } 878 } // static-l2-multicast-group 879 } // instance-config-attributes-mld-snooping 881 grouping instance-state-group-attributes-igmp-mld-snooping { 882 description 883 "Attributes for both IGMP and MLD snooping groups."; 885 leaf mac-address { 886 type yang:phys-address; 887 description "Destination MAC address for L2 multicast."; 888 } 890 leaf expire { 891 type uint32; 892 units seconds; 893 description 894 "The time left before multicast group timeout."; 895 } 897 leaf up-time { 898 type uint32; 899 units seconds; 900 description 901 "The time elapsed since L2 multicast record created."; 902 } 904 } // instance-state-group-attributes-igmp-mld-snooping 906 grouping instance-state-attributes-igmp-snooping { 907 description 908 "State attributes for IGMP snooping for each instance."; 910 uses instance-state-attributes-igmp-mld-snooping; 912 list group { 914 key "address"; 916 config false; 918 description "IGMP snooping information"; 920 leaf address { 921 type inet:ipv4-address; 922 description 923 "Multicast group IPV4 address"; 924 } 926 uses instance-state-group-attributes-igmp-mld-snooping; 928 leaf last-reporter { 929 type inet:ipv4-address; 930 description 931 "Address of the last host which has sent report to join 932 the multicast group."; 933 } 935 list source { 936 key "address"; 937 description "Source IPV4 address for multicast stream"; 938 leaf address { 939 type inet:ipv4-address; 940 description "Source IPV4 address for multicast stream"; 941 } 943 uses instance-state-source-attributes-igmp-mld-snooping; 945 leaf last-reporter { 946 type inet:ipv4-address; 947 description 948 "Address of the last host which has sent report 949 to join the multicast group."; 950 } 952 list host { 953 if-feature explicit-tracking; 954 key "host-address"; 955 description 956 "List of multicast membership hosts 957 of the specific multicast source-group."; 959 leaf host-address { 960 type inet:ipv4-address; 961 description 962 "Multicast membership host address."; 963 } 964 leaf host-filter-mode { 965 type enumeration { 966 enum "include" { 967 description 968 "In include mode"; 969 } 970 enum "exclude" { 971 description 972 "In exclude mode."; 973 } 974 } 975 description 976 "Filter mode for a multicast membership 977 host may be either include or exclude."; 978 } 979 }// list host 981 } // list source 982 } // list group 983 } // instance-state-attributes-igmp-snooping 985 grouping instance-state-attributes-igmp-mld-snooping { 987 description 988 "State attributes for IGMP & MLD snooping instance."; 990 leaf entries-count { 991 type uint32; 992 config false; 993 description 994 "The number of L2 multicast entries in IGMP & MLD snooping"; 995 } 997 leaf-list bridge-mrouter-interface { 998 when "../type = 'bridge'"; 999 type if:interface-ref; 1000 config false; 1001 description "mrouter interface in BRIDGE forwarding"; 1002 } 1004 leaf-list l2vpn-mrouter-interface-ac { 1005 when "../type = 'l2vpn'"; 1006 type if:interface-ref; 1007 config false; 1008 description "mrouter interface whose type is interface 1009 in L2VPN forwarding"; 1011 } 1013 leaf-list l2vpn-mrouter-interface-pw { 1014 when "../type = 'l2vpn'"; 1015 type l2vpn-instance-pw-ref; 1016 config false; 1017 description "mrouter interface whose type is PW 1018 in L2VPN forwarding"; 1019 } 1020 } // instance-config-attributes-igmp-mld-snooping 1022 grouping instance-state-attributes-mld-snooping { 1023 description 1024 "State attributes for MLD snooping of each VLAN."; 1026 uses instance-state-attributes-igmp-mld-snooping; 1028 list group { 1029 key "address"; 1030 config false; 1031 description "MLD snooping statistics information"; 1033 leaf address { 1034 type inet:ipv6-address; 1035 description 1036 "Multicast group IPV6 address"; 1037 } 1039 uses instance-state-group-attributes-igmp-mld-snooping; 1041 leaf last-reporter { 1042 type inet:ipv6-address; 1043 description 1044 "Address of the last host which has sent report 1045 to join the multicast group."; 1046 } 1048 list source { 1049 key "address"; 1050 description "Source IPV6 address for multicast stream"; 1052 leaf address { 1053 type inet:ipv6-address; 1054 description "Source IPV6 address for multicast stream"; 1055 } 1056 uses instance-state-source-attributes-igmp-mld-snooping; 1058 leaf last-reporter { 1059 type inet:ipv6-address; 1060 description 1061 "Address of the last host which has sent report 1062 to join the multicast group."; 1063 } 1065 list host { 1066 if-feature explicit-tracking; 1067 key "host-address"; 1068 description 1069 "List of multicast membership hosts 1070 of the specific multicast source-group."; 1072 leaf host-address { 1073 type inet:ipv6-address; 1074 description 1075 "Multicast membership host address."; 1076 } 1077 leaf host-filter-mode { 1078 type enumeration { 1079 enum "include" { 1080 description 1081 "In include mode"; 1082 } 1083 enum "exclude" { 1084 description 1085 "In exclude mode."; 1086 } 1087 } 1088 description 1089 "Filter mode for a multicast membership 1090 host may be either include or exclude."; 1091 } 1092 }// list host 1093 } // list source 1094 } // list group 1095 } // instance-state-attributes-mld-snooping 1097 grouping instance-state-source-attributes-igmp-mld-snooping { 1098 description 1099 "State attributes for IGMP & MLD snooping instance."; 1101 leaf-list bridge-outgoing-interface { 1102 when "../../../type = 'bridge'"; 1103 type if:interface-ref; 1104 description "Outgoing interface in BRIDGE forwarding"; 1105 } 1106 leaf-list l2vpn-outgoing-ac { 1107 when "../../../type = 'l2vpn'"; 1108 type l2vpn-instance-ac-ref; 1109 description "Outgoing AC in L2VPN forwarding"; 1110 } 1112 leaf-list l2vpn-outgoing-pw { 1113 when "../../../type = 'l2vpn'"; 1114 type l2vpn-instance-pw-ref; 1115 description "Outgoing PW in L2VPN forwarding"; 1116 } 1118 leaf up-time { 1119 type uint32; 1120 units seconds; 1121 description "The time elapsed since L2 multicast 1122 record created"; 1123 } 1125 leaf expire { 1126 type uint32; 1127 units seconds; 1128 description 1129 "The time left before multicast group timeout."; 1130 } 1132 leaf host-count { 1133 if-feature explicit-tracking; 1134 type uint32; 1135 description 1136 "The number of host addresses."; 1137 } 1138 } // instance-state-source-attributes-igmp-mld-snooping 1140 grouping general-statistics-error { 1141 description 1142 "A grouping defining statistics attributes for errors."; 1144 leaf checksum { 1145 type yang:counter64; 1146 description 1147 "The number of checksum errors."; 1148 } 1149 leaf too-short { 1150 type yang:counter64; 1151 description 1152 "The number of messages that are too short."; 1153 } 1154 } // general-statistics-error 1155 grouping general-statistics-sent-received { 1156 description 1157 "A grouping defining statistics attributes."; 1159 leaf query { 1160 type yang:counter64; 1161 description 1162 "The number of query messages."; 1163 } 1164 leaf membership-report-v1 { 1165 type yang:counter64; 1166 description 1167 "The number of membership report v1 messages."; 1168 } 1169 leaf membership-report-v2 { 1170 type yang:counter64; 1171 description 1172 "The number of membership report v2 messages."; 1173 } 1174 leaf membership-report-v3 { 1175 type yang:counter64; 1176 description 1177 "The number of membership report v3 messages."; 1178 } 1179 leaf leave { 1180 type yang:counter64; 1181 description 1182 "The number of leave messages."; 1183 } 1184 leaf non-member-leave { 1185 type yang:counter64; 1186 description 1187 "The number of non member leave messages."; 1188 } 1189 leaf pim { 1190 type yang:counter64; 1191 description 1192 "The number of pim hello messages."; 1193 } 1194 } // general-statistics-sent-received 1196 grouping interface-endpoint-attributes-igmp-snooping { 1198 description "interface attributes for IGMP snooping"; 1200 list host { 1202 if-feature explicit-tracking; 1204 key "host-address"; 1205 config false; 1207 description 1208 "List of multicast membership hosts 1209 of the specific multicast source-group."; 1211 leaf host-address { 1212 type inet:ipv4-address; 1213 description 1214 "Multicast membership host address."; 1215 } 1216 leaf host-filter-mode { 1217 type enumeration { 1218 enum "include" { 1219 description 1220 "In include mode"; 1221 } 1222 enum "exclude" { 1223 description 1224 "In exclude mode."; 1225 } 1226 } 1227 description 1228 "Filter mode for a multicast membership 1229 host may be either include or exclude."; 1230 } 1231 }// list host 1232 } // interface-endpoint-attributes-igmp-snooping 1234 grouping interface-endpoint-attributes-mld-snooping { 1236 description "interface endpoint attributes MLD snooping"; 1238 list host { 1240 if-feature explicit-tracking; 1242 key "host-address"; 1244 config false; 1246 description 1247 "List of multicast membership hosts 1248 of the specific multicast source-group."; 1250 leaf host-address { 1251 type inet:ipv6-address; 1252 description 1253 "Multicast membership host address."; 1254 } 1255 leaf host-filter-mode { 1256 type enumeration { 1257 enum "include" { 1258 description 1259 "In include mode"; 1260 } 1261 enum "exclude" { 1262 description 1263 "In exclude mode."; 1264 } 1265 } 1266 description 1267 "Filter mode for a multicast membership 1268 host may be either include or exclude."; 1269 } 1270 }// list host 1271 } // interface-endpoint-attributes-mld-snooping 1273 /* 1274 * igmp-snooping-instance 1275 */ 1276 container igmp-snooping-instances { 1277 description 1278 "igmp-snooping-instance list"; 1280 list igmp-snooping-instance { 1281 key "name"; 1282 description 1283 "IGMP snooping instance to configure the igmp-snooping."; 1285 leaf name { 1286 type string; 1287 description 1288 "Name of the igmp-snooping-instance"; 1289 } 1291 leaf type { 1292 type enumeration { 1293 enum "bridge" { 1294 description "BRIDGE"; 1295 } 1296 enum "l2vpn" { 1297 description "L2VPN"; 1298 } 1299 } 1300 description "The type indicates BRIDGE or L2VPN."; 1301 } 1303 uses instance-config-attributes-igmp-snooping; 1305 uses instance-state-attributes-igmp-snooping; 1307 } //igmp-snooping-instance 1308 } //igmp-snooping-instances 1310 /* 1311 * mld-snooping-instance 1312 */ 1314 container mld-snooping-instances { 1315 description 1316 "mld-snooping-instance list"; 1318 list mld-snooping-instance { 1319 key "name"; 1320 description 1321 "MLD snooping instance to configure the mld-snooping."; 1323 leaf name { 1324 type string; 1325 description 1326 "Name of the mld-snooping-instance"; 1327 } 1329 leaf type { 1330 type enumeration { 1331 enum "bridge" { 1332 description "BRIDGE"; 1333 } 1334 enum "l2vpn" { 1335 description "L2VPN"; 1336 } 1337 } 1338 description "The type indicates BRIDGE or L2VPN."; 1339 } 1341 uses instance-config-attributes-mld-snooping; 1343 uses instance-state-attributes-mld-snooping; 1345 } //mld-snooping-instance 1346 } //mld-snooping-instances 1348 /* augments */ 1350 augment "/dot1q:bridges/dot1q:bridge" { 1351 description 1352 "Reference IGMP & MLD snooping instance in BRIDGE scenario"; 1354 leaf igmp-snooping-instance { 1355 type igmp-snooping-instance-ref; 1356 description 1357 "Configure IGMP snooping instance under bridge view"; 1358 } 1359 leaf mld-snooping-instance { 1360 type mld-snooping-instance-ref; 1361 description 1362 "Configure MLD snooping instance under bridge view"; 1363 } 1364 } 1366 augment "/dot1q:bridges/dot1q:bridge"+ 1367 "/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" { 1368 description 1369 "Refrence IGMP & MLD snooping instance in BRIDGE scenario"; 1371 leaf igmp-snooping-instance { 1372 type igmp-snooping-instance-ref; 1373 description 1374 "Configure IGMP snooping instance under VLAN view"; 1375 } 1377 leaf mld-snooping-instance { 1378 type mld-snooping-instance-ref; 1379 description 1380 "Configure MLD snooping instance under VLAN view"; 1381 } 1382 } 1384 augment "/ni:network-instances/ni:network-instance"+ 1385 "/ni:ni-type/l2vpn:l2vpn" { 1387 description 1388 "Reference IGMP & MLD snooping instance in L2VPN scenario"; 1390 leaf igmp-snooping-instance { 1391 type igmp-snooping-instance-ref; 1392 description 1393 "Configure IGMP snooping instance in L2VPN scenario"; 1394 } 1395 leaf mld-snooping-instance { 1396 type mld-snooping-instance-ref; 1397 description 1398 "Configure MLD snooping instance in L2VPN scenario"; 1399 } 1400 } 1401 augment "/if:interfaces/if:interface" { 1402 description 1403 "Augment interface for referencing attributes 1404 which only fit for interface view."; 1406 container igmp-mld-snooping { 1407 description 1408 "igmp-mld-snooping related attributes under interface view"; 1410 leaf enable { 1411 type boolean; 1412 default false; 1413 description 1414 "Set the value to true to enable IGMP and MLD snooping 1415 in the VLAN instance."; 1416 } 1418 leaf version { 1419 type uint8 { 1420 range "1..3"; 1421 } 1422 default 2; 1423 description "IGMP and MLD snooping version."; 1424 } 1426 leaf type { 1427 type enumeration { 1428 enum "bridge" { 1429 description "BRIDGE"; 1430 } 1431 enum "l2vpn" { 1432 description "L2VPN"; 1433 } 1434 } 1435 description "The type indicates BRIDGE or L2VPN."; 1436 } 1438 container static-mrouter-interface { 1439 description 1440 "Container for choice static-mrouter-interface"; 1442 choice static-mrouter-interface { 1443 description 1444 "Configure static multicast router interface 1445 under the interface view"; 1447 case bridge { 1448 when "../type = 'bridge'" { 1449 description 1450 "Applies to BRIDGE scenario."; 1451 } 1453 description 1454 "Applies to BRIDGE scenario."; 1456 leaf bridge-name { 1457 type string; 1458 description 1459 "The name for a bridge. 1460 Each interface belongs to only one bridge."; 1462 } 1463 leaf-list vlan-id { 1464 type uint32; 1465 description 1466 "The VLAN ids for bridge. If you don't specify 1467 VLAN id here, the interface serves as the mrouter 1468 interface for all the VLANs in this bridge."; 1469 } 1470 } 1471 case l2vpn { 1472 when "../type = 'l2vpn'" { 1473 description 1474 "Applies to L2VPN scenario."; 1475 } 1477 description 1478 "Applies to L2VPN scenario."; 1480 leaf l2vpn-instance-name { 1481 type string; 1482 description 1483 "The L2VPN instance name applied in the interface"; 1485 } 1486 } 1487 } // choice static-mrouter-interface 1488 } // container static-mrouter-interface 1490 container static-l2-multicast-group { 1491 description 1492 "Container for static-l2-multicast-group"; 1494 choice static-l2-multicast-group { 1495 description 1496 "Configure static l2 multicast group 1497 under interface view"; 1499 case bridge { 1500 when "../type = 'bridge'" { 1501 description 1502 "Applies to BRIDGE scenario."; 1504 } 1506 description 1507 "Applies to BRIDGE scenario."; 1509 leaf bridge-name { 1510 type string; 1511 description 1512 "bridge name."; 1513 } 1515 list bridge-group-v4 { 1516 key "group source-addr"; 1517 description 1518 "A static multicast route, (*,G) or (S,G)."; 1520 leaf group { 1521 type inet:ipv4-address; 1522 description 1523 "Multicast group IPV4 address"; 1524 } 1526 leaf source-addr { 1527 type source-ipv4-addr-type; 1528 description 1529 "Multicast source IPV4 address."; 1530 } 1532 leaf-list vlan-id { 1533 type uint32; 1534 description 1535 "VLAN id."; 1536 } 1537 } 1539 list bridge-group-v6 { 1540 key "group source-addr"; 1541 description 1542 "A static multicast route, (*,G) or (S,G)."; 1544 leaf group { 1545 type inet:ipv6-address; 1546 description 1547 "Multicast group IPV6 address"; 1548 } 1550 leaf source-addr { 1551 type source-ipv6-addr-type; 1552 description 1553 "Multicast source IPV6 address."; 1554 } 1555 leaf-list vlan-id { 1556 type uint32; 1557 description 1558 "VLAN id."; 1559 } 1560 } 1561 } // case bridge 1563 case l2vpn { 1565 when "../type = 'l2vpn'" { 1566 description 1567 "Applies to L2VPN scenario."; 1568 } 1569 description 1570 "Applies to L2VPN scenario."; 1572 list l2vpn-group-v4 { 1573 key "group source-addr"; 1574 description 1575 "A static multicast route, (*,G) or (S,G)."; 1577 leaf group { 1578 type inet:ipv4-address; 1579 description 1580 "Multicast group IPV4 address"; 1581 } 1583 leaf source-addr { 1584 type source-ipv4-addr-type; 1585 description 1586 "Multicast source IPV4 address."; 1587 } 1589 leaf l2vpn-instance-name { 1590 type string; 1591 description 1592 "L2VPN instance name applied in the interface"; 1593 } 1594 } 1596 list l2vpn-group-v6 { 1598 key "group source-addr"; 1600 description 1601 "A static multicast route, (*,G) or (S,G)."; 1603 leaf group { 1604 type inet:ipv6-address; 1605 description 1606 "Multicast group IPV6 address"; 1607 } 1609 leaf source-addr { 1610 type source-ipv6-addr-type; 1611 description 1612 "Multicast source IPV6 address."; 1613 } 1615 leaf l2vpn-instance-name { 1616 type string; 1617 description 1618 "L2VPN instance name applied in the interface"; 1619 } 1620 } 1621 } 1622 } //choice static-l2-multicast-group 1623 } // container static-l2-multicast-group 1625 container statistics { 1626 config false; 1627 description 1628 "A collection of interface-related statistics objects."; 1630 uses general-state-attributes; 1631 } 1632 } 1633 } 1635 /* RPCs */ 1637 rpc clear-igmp-snooping-groups { 1638 if-feature rpc-clear-groups; 1639 description 1640 "Clears the specified IGMP snooping cache tables."; 1642 input { 1644 leaf name { 1645 type string; 1646 description 1647 "Name of the igmp-snooping-instance"; 1648 } 1650 leaf group { 1651 type inet:ipv4-address; 1652 description 1653 "Multicast group IPv4 address. 1654 If it is not specified, all IGMP snooping group tables 1656 are cleared."; 1657 } 1659 leaf source { 1660 type inet:ipv4-address; 1661 description 1662 "Multicast source IPv4 address. 1663 If it is not specified, all IGMP snooping source-group 1664 tables are cleared."; 1665 } 1666 } 1667 } // rpc clear-igmp-snooping-groups 1669 rpc clear-mld-snooping-groups { 1670 if-feature rpc-clear-groups; 1671 description 1672 "Clears the specified MLD snooping cache tables."; 1674 input { 1675 leaf name { 1676 type string; 1677 description 1678 "Name of the mld-snooping-instance"; 1679 } 1681 leaf group { 1682 type inet:ipv6-address; 1683 description 1684 "Multicast group IPv6 address. 1685 If it is not specified, all MLD snooping group tables are 1686 cleared."; 1687 } 1689 leaf source { 1690 type inet:ipv6-address; 1691 description 1692 "Multicast source IPv6 address. 1693 If it is not specified, all MLD snooping source-group 1694 tables are cleared."; 1695 } 1696 } 1697 } // rpc clear-mld-snooping-groups 1698 } 1699 1700 4. Security Considerations 1702 The YANG module specified in this document defines a schema for data 1703 that is designed to be accessed via network management protocols such 1704 as NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer 1705 is the secure transport layer, and the mandatory-to-implement secure 1706 transport is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer 1707 is HTTPS, and the mandatory-to-implement secure transport is TLS 1708 [RFC5246]. 1710 The NETCONF access control model [RFC6536] provides the means to 1711 restrict access for particular NETCONF or RESTCONF users to a 1712 preconfigured subset of all available NETCONF or RESTCONF protocol 1713 operations and content. 1715 There are a number of data nodes defined in this YANG module that are 1716 writable/creatable/deletable (i.e., config true, which is the 1717 default). These data nodes may be considered sensitive or vulnerable 1718 in some network environments. Write operations (e.g., edit-config) to 1719 these data nodes without proper protection can have a negative effect 1720 on network operations. These are the subtrees and data nodes and 1721 their sensitivity/vulnerability: 1723 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 1725 /ims:mld-snooping-instances/ims:mld-snooping-instance 1727 /if:interfaces/if:interface/ims:igmp-mld-snooping 1729 Unauthorized access to any data node of these subtrees can adversely 1730 affect the IGMP & MLD Snooping subsystem of both the local device and 1731 the network. This may lead to network malfunctions, delivery of 1732 packets to inappropriate destinations, and other problems. 1734 Some of the readable data nodes in this YANG module may be considered 1735 sensitive or vulnerable in some network environments. It is thus 1736 important to control read access (e.g., via get, get-config, or 1737 notification) to these data nodes. These are the subtrees and data 1738 nodes and their sensitivity/vulnerability: 1740 /ims:igmp-snooping-instances/ims:igmp-snooping-instance 1742 /ims:mld-snooping-instances/ims:mld-snooping-instance 1744 /if:interfaces/if:interface/ims:igmp-mld-snooping 1746 Unauthorized access to any data node of these subtrees can disclose 1747 the operational state information of IGMP & MLD Snooping on this 1748 device. 1750 Some of the RPC operations in this YANG module may be considered 1751 sensitive or vulnerable in some network environments. It is thus 1752 important to control access to these operations. The IGMP & MLD 1753 Snooping Yang module support the "clear-igmp-snooping-groups" and " 1754 clear-mld-snooping-groups" RPCs. If it meets unauthorized RPC 1755 operation invocation, the IGMP and MLD Snooping group tables will be 1756 cleared unexpectedly. 1758 5. IANA Considerations 1760 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1761 actual RFC number (and remove this note). 1763 This document registers the following namespace URIs in the IETF XML 1765 registry [RFC3688]: 1767 -------------------------------------------------------------------- 1769 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 1771 Registrant Contact: The IESG. 1773 XML: N/A, the requested URI is an XML namespace. 1775 -------------------------------------------------------------------- 1777 This document registers the following YANG modules in the YANG 1778 Module Names registry [RFC7950]: 1780 -------------------------------------------------------------------- 1782 name: ietf-igmp-mld-snooping 1784 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 1786 prefix: ims 1788 reference: RFC XXXX 1790 -------------------------------------------------------------------- 1792 6. Normative References 1794 [P802.1Qcp/D2.2] IEEE Approved Draft Standard for Local and 1795 Metropolitan Area Networks, "Bridges and Bridged Networks 1796 Amendment: YANG Data Model", Mar 2018 1798 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1799 2", RFC 2236, November 1997. 1801 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1802 Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. 1804 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1805 Thyagarajan, "Internet Group Management Protocol, Version 1806 3", RFC 3376, October 2002. 1808 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1809 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1811 [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations 1812 for Internet Group Management Protocol (IGMP) and Multicast 1813 Listener Discovery (MLD) Snooping Switches", RFC 4541, May 1814 2006. 1816 [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet 1817 Group Management Protocol Version 3 (IGMPv3) and Multicast 1818 Listener Discovery Protocol Version 2 (MLDv2) for Source- 1819 Specific Multicast", RFC 4604, August 2006. 1821 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 1822 IP", RFC 4607, August 2006. 1824 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1825 the Network Configuration Protocol (NETCONF)", RFC 6020, 1826 October 2010. 1828 [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6021, 1829 October 2010. 1831 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, 1832 July 2013. 1834 [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management 1835 Datastore Architecture (NMDA)", RFC 8342, March 2018. 1837 [RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management", 1838 RFC 8343, March 2018. 1840 [draft-ietf-pim-igmp-mld-yang-06] X. Liu, F. Guo, M. Sivakumar, P. 1841 McAllister, A. Peter, "A YANG data model for Internet Group 1842 Management Protocol (IGMP) and Multicast Listener Discovery 1843 (MLD)", draft-ietf-pim-igmp-mld-yang-06, Oct 20, 2017. 1845 [draft-dsdt-nmda-guidelines-01] M. Bjorklund, J. Schoenwaelder, P. 1846 Shafer, K. Watsen, R. Wilton, "Guidelines for YANG Module 1847 Authors (NMDA)", draft-dsdt-nmda-guidelines-01, May 2017 1849 [draft-bjorklund-netmod-rfc7223bis-00] M. Bjorklund, "A YANG Data 1850 Model for Interface Management", draft-bjorklund-netmod- 1851 rfc7223bis-00, August 21, 2017 1853 [draft-bjorklund-netmod-rfc7277bis-00] M. Bjorklund, "A YANG Data 1854 Model for IP Management", draft-bjorklund-netmod- 1855 rfc7277bis-00, August 21, 2017 1857 [draft-ietf-netmod-revised-datastores-03] M. Bjorklund, J. 1858 Schoenwaelder, P. Shafer, K. Watsen, R. Wilton, "Network 1859 Management Datastore Architecture", draft-ietf-netmod- 1860 revised-datastores-03, July 3, 2017 1862 [draft-ietf-bess-evpn-yang-02] P.Brissette, A. Sajassi, H. Shah, Z. 1863 Li, H. Chen, K. Tiruveedhula, I. Hussain, J. Rabadan, "Yang 1864 Data Model for EVPN", draft-ietf-bess-evpn-yang-02, March 1865 13, 2017 1867 [draft-ietf-bess-l2vpn-yang-08] H. Shah, P. Brissette, I. Chen, I. 1868 Hussain, B. Wen, K. Tiruveedhula, "YANG Data Model for 1869 MPLS-based L2VPN", draft-ietf-bess-l2vpn-yang-06.txt, 1870 February 17, 2018 1872 [draft-ietf-rtgwg-ni-model-12] L. Berger, C. Hopps, A. Lindem, X. 1873 Liu, "YANG Model for Network Instances", draft-ietf-rtgwg- 1874 ni-model-12.txt, March 19, 2018 1876 Appendix A. Data Tree Example 1878 This section contains an example of an instance data tree in the JSON 1880 encoding [RFC7951], containing both configuration and state data. 1882 +-----------+ 1883 + Source + 1884 +-----+-----+ 1885 | 1886 -----------------+---------------------------- 1887 |eth1/1 1888 +---+---+ 1889 + R1 + 1890 +-+---+-+ 1891 eth1/2 | \ eth1/3 1892 | \ 1893 | \ 1894 | \ 1895 | \ 1896 eth2/1 | \ eth3/1 1897 +---+---+ +--+---+ 1898 + R2 + + R3 + 1899 +---+---+ +--+---+ 1900 eth2/2 | | eth3/2 1901 | | 1902 ---------------+----------+------------------- 1903 | | 1904 | | 1905 +--------+--+ +---+--------+ 1906 + Receiver1 + + Receiver2 + 1907 +-----------+ +------------+ 1909 The configuration instance data tree for R1 in the above figure could be 1910 as follows: 1912 { 1913 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 1914 "igmp-snooping-instance": [ 1915 { 1916 "name": "ins101", 1917 "type": "bridge", 1918 "enable": true 1919 } 1920 ] 1921 }, 1922 "ietf-igmp-mld-snooping:mld-snooping-instances": { 1923 "mld-snooping-instance": [ 1924 { 1925 "name": "ins102", 1926 "type": "bridge", 1927 "enable": true 1928 } 1929 ] 1930 }, 1931 "ieee802-dot1q-bridge:bridges": { 1932 "bridge": [ 1933 { 1934 "name": "isp", 1935 "address": "00-23-ef-a5-77-12", 1936 "bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge", 1937 "component": [ 1938 { 1939 "name": "comp1", 1940 "type": "ieee802-dot1q-bridge:c-vlan-component", 1941 "bridge-vlan": { 1942 "vlan": [ 1943 { 1944 "vid": 101, 1945 "ietf-igmp-mld-snooping:igmp-snooping-instance": "ins101" 1946 }, 1947 { 1948 "vid": 102, 1949 "ietf-igmp-mld-snooping:mld-snooping-instance": "ins102" 1950 } 1951 ] 1952 } 1953 } 1954 ] 1955 } 1956 ] 1957 } 1958 } 1960 The corresponding operational state data for R1 could be as follows: 1962 { 1963 "ietf-interfaces:interfaces": { 1964 "interface": [ 1965 { 1966 "name": "1/1", 1967 "type": "iana-if-type:ethernetCsmacd", 1968 "admin-status": "up", 1969 "if-index": 214748, 1970 "oper-status": "up", 1971 "statistics": { 1972 "discontinuity-time": "2018-05-23T12:34:56-05:00" 1973 } 1974 }, 1975 { 1976 "name": "1/2", 1977 "type": "iana-if-type:ethernetCsmacd", 1978 "admin-status": "up", 1979 "if-index": 214749, 1980 "oper-status": "up", 1981 "statistics": { 1982 "discontinuity-time": "2018-05-23T12:35:06-05:02" 1983 } 1984 } 1985 ] 1986 }, 1987 "ietf-igmp-mld-snooping:igmp-snooping-instances": { 1988 "igmp-snooping-instance": [ 1989 { 1990 "name": "ins101", 1991 "type": "bridge", 1992 "enable": true, 1993 "forwarding-mode": "ip", 1994 "explicit-tracking": false, 1995 "exclude-lite": false, 1996 "send-query": true, 1997 "immediate-leave": [null], 1998 "last-member-query-interval": 1, 1999 "query-interval": 125, 2000 "query-max-response-time": 10, 2001 "require-router-alert": false, 2002 "robustness-variable": 2, 2003 "entries-count": 1, 2004 "bridge-mrouter-interface": ["1/1"], 2005 "group": [ 2006 { 2007 "address": "223.0.0.1", 2008 "mac-address": "01:00:5e:00:00:01", 2009 "expire": 120, 2010 "up-time": 180, 2011 "last-reporter": "100.0.0.1", 2012 "source": [ 2013 { 2014 "address": "192.168.0.1", 2015 "bridge-outgoing-interface": ["1/2"], 2016 "up-time": 180, 2017 "expire": 120, 2018 "last-reporter": "100.0.0.1" 2019 } 2020 ] 2021 } 2022 ] 2023 } 2024 ] 2025 }, 2026 "ietf-igmp-mld-snooping:mld-snooping-instances": { 2027 "mld-snooping-instance": [ 2028 { 2029 "name": "ins102", 2030 "type": "bridge", 2031 "enable": true, 2032 "forwarding-mode": "ip", 2033 "explicit-tracking": false, 2034 "exclude-lite": false, 2035 "send-query": true, 2036 "immediate-leave": [null], 2037 "last-member-query-interval": 1, 2038 "query-interval": 125, 2039 "query-max-response-time": 10, 2040 "require-router-alert": false, 2041 "robustness-variable": 2, 2042 "entries-count": 1, 2043 "bridge-mrouter-interface": ["1/1"], 2044 "group": [ 2045 { 2046 "address": "FF0E::1", 2047 "mac-address": "01:00:5e:00:00:01", 2048 "expire": 120, 2049 "up-time": 180, 2050 "last-reporter": "2001::1", 2051 "source": [ 2052 { 2053 "address": "3001::1", 2054 "bridge-outgoing-interface": ["1/2"], 2055 "up-time": 180, 2056 "expire": 120, 2057 "last-reporter": "2001::1" 2058 } 2059 ] 2060 } 2062 ] 2063 } 2064 ] 2065 } 2066 } 2068 Authors' Addresses 2070 Hongji Zhao 2071 Ericsson (China) Communications Company Ltd. 2072 Ericsson Tower, No. 5 Lize East Street, 2073 Chaoyang District Beijing 100102, P.R. China 2075 Email: hongji.zhao@ericsson.com 2077 Xufeng Liu 2078 Jabil 2079 8281 Greensboro Drive, Suite 200 2080 McLean VA 22102 2081 USA 2083 EMail: Xufeng.liu.ietf@gmail.com 2085 Yisong Liu 2086 Huawei Technologies 2087 Huawei Bld., No.156 Beiqing Rd. 2088 Beijing 100095 2089 China 2091 Email: liuyisong@huawei.com 2093 Anish Peter 2094 Individual 2096 EMail: anish.ietf@gmail.com 2098 Mahesh Sivakumar 2099 Juniper 2100 510 McCarthy Boulevard 2101 Milpitas, California 2102 USA 2104 EMail: sivakumar.mahesh@gmail.com