idnits 2.17.1 draft-ietf-pim-igmp-mld-snooping-yang-10.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 : ---------------------------------------------------------------------------- No issues found here. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust and authors Copyright Line does not match the current year == Line 407 has weird spacing: '...er-mode fil...' == Line 522 has weird spacing: '...er-mode fil...' -- The document date (May 02, 2020) is 1456 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) No issues found here. Summary: 0 errors (**), 0 flaws (~~), 3 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: November 01, 2020 Volta Networks 5 Y. Liu 6 China Mobile 7 M. Sivakumar 8 Juniper 9 A. Peter 10 Individual 12 May 02, 2020 14 A Yang Data Model for IGMP and MLD Snooping 15 draft-ietf-pim-igmp-mld-snooping-yang-10.txt 17 Abstract 19 This document defines a YANG data model that can be used to configure 20 and manage Internet Group Management Protocol (IGMP) and Multicast 21 Listener Discovery (MLD) Snooping devices. The YANG module in this 22 document conforms to Network Management Datastore Architecture (NMDA). 24 Status of this Memo 26 This Internet-Draft is submitted in full conformance with the 27 provisions of BCP 78 and BCP 79. 29 Internet-Drafts are working documents of the Internet Engineering 30 Task Force (IETF), its areas, and its working groups. Note that 31 other groups may also distribute working documents as Internet- 32 Drafts. 34 Internet-Drafts are draft documents valid for a maximum of six months 35 and may be updated, replaced, or obsoleted by other documents at any 36 time. It is inappropriate to use Internet-Drafts as reference 37 material or to cite them other than as "work in progress." 39 The list of current Internet-Drafts can be accessed at 40 http://www.ietf.org/ietf/1id-abstracts.txt 42 The list of Internet-Draft Shadow Directories can be accessed at 43 http://www.ietf.org/shadow.html 45 This Internet-Draft will expire on November 01, 2020. 47 Copyright Notice 49 Copyright (c) 2020 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.............................................4 67 1.3. Prefixes in Data Node Names...............................4 68 2. Design of Data Model...........................................5 69 2.1. Overview..................................................5 70 2.2. Optional Capabilities.....................................6 71 2.3. Position of Address Family in Hierarchy...................6 72 3. Module Structure...............................................7 73 3.1. IGMP Snooping Instances...................................7 74 3.2. MLD Snooping Instances...................................10 75 3.3. Using IGMP and MLD Snooping Instances....................12 76 3.4. IGMP and MLD Snooping RPC................................13 77 4. IGMP and MLD Snooping YANG Module.............................13 78 5. Security Considerations.......................................35 79 6. IANA Considerations...........................................37 80 7. References....................................................38 81 7.1. Normative References.....................................38 82 7.2. Informative References...................................40 83 Appendix A. Data Tree Example...................................41 84 A.1 Bridge scenario...........................................41 85 A.2 L2VPN scenario............................................44 86 Authors' Addresses...............................................48 88 1. Introduction 90 This document defines a YANG [RFC6020] data model for the management of 91 Internet Group Management Protocol (IGMP) and Multicast Listener 92 Discovery (MLD) Snooping [RFC4541] devices. 94 The YANG module in this document conforms to the Network Management 95 Datastore Architecture defined in [RFC8342]. The "Network Management 96 Datastore Architecture" (NMDA) adds the ability to inspect the current 97 operational values for configuration, allowing clients to use identical 98 paths for retrieving the configured values and the operational values. 100 1.1. Terminology 102 The terminology for describing YANG data models is found in [RFC6020] 104 and [RFC7950], including: 106 * augment 108 * data model 110 * data node 112 * identity 114 * module 116 The following terminologies are used in this document: 118 * mrouter: multicast router, which means nodes attached to a switch 119 have multicast routing enabled [RFC4286]. 121 * mrouter interfaces: snooping switch ports where multicast routers 122 are attached [RFC4541]. 124 The following abbreviations are used in this document and defined model: 126 IGMP: Internet Group Management Protocol [RFC3376]. 128 MLD: Multicast Listener Discovery [RFC3810]. 130 AC: Attachment Circuit [RFC3916]. 132 PW: Pseudo Wire [RFC3916]. 134 1.2. Tree Diagrams 136 Tree diagrams used in this document follow the notation defined in 138 [RFC8340]. 140 1.3. Prefixes in Data Node Names 142 In this document, names of data nodes, actions, and other data model 143 objects are often used without a prefix, as long as it is clear from the 144 context in which YANG module each name is defined. Otherwise, names are 145 prefixed using the standard prefix associated with the corresponding 146 YANG module, as shown in Table 1. 148 +----------+-----------------------+---------------------------------+ 150 | Prefix | YANG module | Reference | 152 +==========+=======================+=================================+ 154 | inet | ietf-inet-types | [RFC6991] | 156 +----------+-----------------------+---------------------------------+ 158 | yang | ietf-yang-types | [RFC6991] | 160 +----------+-----------------------+---------------------------------+ 162 | if | ietf-interfaces | [RFC8343] | 164 +----------+-----------------------+---------------------------------+ 166 | rt | ietf-routing | [RFC8349] | 168 +----------+-----------------------+---------------------------------+ 170 | rt-types | ietf-routing-types | [RFC8294] | 172 +----------+-----------------------+---------------------------------+ 174 | ni | ietf-network-instance | [RFC8529] | 176 +----------+-----------------------+---------------------------------+ 178 | pw | ietf-pseudowires | [draft-ietf-bess-l2vpn-yang] | 180 +----------+-----------------------+---------------------------------+ 182 | l2vpn | ietf-l2vpn | [draft-ietf-bess-l2vpn-yang] | 183 +----------+-----------------------+---------------------------------+ 185 | dot1q | ieee802-dot1q-bridge | [dot1Qcp] | 187 +----------+-----------------------+---------------------------------+ 189 Table 1: Prefixes and Corresponding YANG Modules 191 2. Design of Data Model 193 The model covers considerations for Internet Group Management Protocol 194 (IGMP) and Multicast Listener Discovery (MLD) Snooping Switches 195 [RFC4541]. 197 In recent years, a number of commercial vendors have introduced products 198 described as "IGMP snooping switches" to the market. These devices do 199 not adhere to the conceptual model that provides the strict separation 200 of functionality between different communications layers in the ISO 201 model, and instead utilize information in the upper level protocol 202 headers as factors to be considered in processing at the lower levels 203 [RFC4541]. 205 IGMP Snooping switches utilize IGMP, and could support IGMPv1, IGMPv2, 206 and IGMPv3. IGMP snooping switches may maintain forwarding tables based 207 on either MAC addresses or IP addresses [RFC4541]. MLD Snooping switches 208 utilize MLD, and could support MLDv1 and MLDv2. 210 The goal of this document is to define a data model that provides a 211 common user interface to IGMP and MLD Snooping. 213 2.1. Overview 215 The IGMP and MLD Snooping YANG module defined in this document has all 216 the common building blocks for the IGMP and MLD Snooping switches. 218 The YANG module includes IGMP and MLD Snooping instance definition, 219 using instance in the scenario of BRIDGE [dot1Qcp] and L2VPN [draft- 220 ietf-bess-l2vpn-yang]. The module also includes the RPC methods for 221 clearing IGMP and MLD Snooping group tables. 223 This YANG module conforms to Network Management Datastore Architecture 224 (NMDA)[RFC8342]. This NMDA architecture provides an architectural 225 framework for datastores as they are used by network management 226 protocols such as NETCONF [RFC6241], RESTCONF [RFC8040] and the YANG 227 [RFC7950] data modeling language. 229 2.2. Optional Capabilities 231 This model is designed to represent the capabilities of IGMP and MLD 232 switches with various specifications, including the basic capability 233 subsets of IGMP and MLD Snooping. The main design goals of this document 234 are that the basic capabilities described in the model are supported by 235 any major now-existing implementation, and that the configuration of all 236 implementations meeting the specifications is easy to express through 237 some combination of the optional features in the model and simple vendor 238 augmentations. 240 There is also value in widely supported features being standardized, to 241 provide a standardized way to access these features, to save work for 242 individual vendors, and so that mapping between different vendors' 243 configuration is not needlessly complicated. Therefore, this model 244 declares a number of features representing capabilities that not all 245 deployed devices support. 247 The extensive use of feature declarations should also substantially 248 simplify the capability negotiation process for a vendor's IGMP and MLD 249 Snooping implementations. 251 On the other hand, operational state parameters are not so widely 252 designated as features, as there are many cases where the defaulting 253 of an operational state parameter would not cause any harm to the 254 system, and it is much more likely that an implementation without 255 native support for a piece of operational state would be able to derive 256 a suitable value for a state variable that is not natively supported. 258 2.3. Position of Address Family in Hierarchy 260 IGMP Snooping only supports IPv4, while MLD Snooping only supports IPv6. 261 The data model defined in this document can be used for both IPv4 and 262 IPv6 address families. 264 This document defines IGMP Snooping and MLD Snooping as separate schema 265 branches in the structure. The benefits are: 267 * The model can support IGMP Snooping (IPv4), MLD Snooping (IPv6), or 268 both optionally and independently. Such flexibility cannot be achieved 269 cleanly with a combined branch. 271 * The structure is consistent with other YANG data models such as 272 [RFC8344], which uses separate branches for IPv4 and IPv6. 274 * The separate branches for IGMP Snooping and MLD Snooping can 275 accommodate their differences better and cleaner. The two branches can 276 better support different features and node types. 278 3. Module Structure 280 This model augments the core routing data model specified in [RFC8349]. 282 +--rw routing 284 +--rw router-id? 286 +--rw control-plane-protocols 288 | +--rw control-plane-protocol* [type name] 290 | +--rw type 292 | +--rw name 294 | +--rw igmp-snooping-instance <= Augmented by this Model 296 ... 298 | +--rw mld-snooping-instance <= Augmented by this Model 300 ... 302 The "igmp-snooping-instance" container instantiates an IGMP Snooping 303 Instance. The "mld-snooping-instance" container instantiates an MLD 304 Snooping Instance. 306 The YANG data model defined in this document conforms to the Network 307 Management Datastore Architecture (NMDA) [RFC8342]. The operational 308 state data is combined with the associated configuration data in the 309 same hierarchy [RFC8407]. 311 A configuration data node is marked as mandatory only when its value 312 must be provided by the user. Where nodes are not essential to protocol 313 operation, they are marked as optional. Some other nodes are essential 314 but have a default specified, so that they are also optional and need 315 not be configured explicitly. 317 3.1. IGMP Snooping Instances 319 The YANG module defines igmp-snooping-instance which augments 320 /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol. 322 All the IGMP Snooping related attributes have been defined in the igmp- 323 snooping-instance. The read-write attribute represents configurable 324 data. The read-only attribute represents state data. 326 One igmp-snooping-instance could be used in one BRIDGE [dot1Qcp] 327 instance or L2VPN [draft-ietf-bess-l2vpn-yang] instance. One igmp- 328 snooping-instance corresponds to one BRIDGE instance or one L2VPN 329 instance. 331 The value of scenario in igmp-snooping-instance is bridge or l2vpn. When 332 it is bridge, igmp-snooping-instance will be used in the BRIDGE 333 scenario. When it is l2vpn, igmp-snooping-instance will be used in the 334 L2VPN scenario. 336 The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, 337 l2vpn-mrouter-interface-pw are filled by the snooping device 338 dynamically. They are different from static-bridge-mrouter-interface, 339 static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw 340 which are configured statically. 342 The attributes under the interfaces show the statistics of IGMP Snooping 343 related packets. 345 augment /rt:routing/rt:control-plane-protocols 346 /rt:control-plane-protocol: 347 +--rw igmp-snooping-instance {feature-igmp-snooping}? 348 | +--rw scenario? 349 | | snooping-scenario-type 350 | +--rw enable? boolean 351 | +--rw forwarding-table-type? enumeration 352 | +--rw explicit-tracking? boolean 353 | | {feature-explicit-tracking}? 354 | +--rw exclude-lite? boolean 355 | | {feature-exclude-lite}? 356 | +--rw send-query? boolean 357 | +--rw immediate-leave? empty 358 | | {feature-immediate-leave}? 359 | +--rw last-member-query-interval? uint16 360 | +--rw query-interval? uint16 361 | +--rw query-max-response-time? uint16 362 | +--rw require-router-alert? boolean 363 | | {feature-require-router-alert}? 364 | +--rw robustness-variable? uint8 365 | +--rw static-bridge-mrouter-interface* if:interface-ref 366 | | {static-mrouter-interface}? 367 | +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref 368 | | {static-mrouter-interface}? 369 | +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref 370 | | {static-mrouter-interface}? 371 | +--rw igmp-version? uint8 372 | +--rw querier-source? inet:ipv4-address 373 | +--rw static-l2-multicast-group* [group source-addr] 374 | | {feature-static-l2-multicast-group}? 375 | | +--rw group 376 | | | rt-types:ipv4-multicast-group-address 377 | | +--rw source-addr 378 | | | rt-types:ipv4-multicast-source-address 379 | | +--rw bridge-outgoing-interface* if:interface-ref 380 | | +--rw l2vpn-outgoing-ac* if:interface-ref 381 | | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref 382 | +--ro entries-count? uint32 383 | +--ro bridge-mrouter-interface* if:interface-ref 384 | +--ro l2vpn-mrouter-interface-ac* if:interface-ref 385 | +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref 386 | +--ro group* [address] 387 | | +--ro address 388 | | | rt-types:ipv4-multicast-group-address 389 | | +--ro mac-address? yang:phys-address 390 | | +--ro expire? rt-types:timer-value-seconds16 391 | | +--ro up-time uint32 392 | | +--ro last-reporter? inet:ipv4-address 393 | | +--ro source* [address] 394 | | +--ro address 395 | | | rt-types:ipv4-multicast-source-address 396 | | +--ro bridge-outgoing-interface* if:interface-ref 397 | | +--ro l2vpn-outgoing-ac* if:interface-ref 398 | | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref 399 | | +--ro up-time uint32 400 | | +--ro expire? 401 | | | rt-types:timer-value-seconds16 402 | | +--ro host-count? uint32 403 | | | {feature-explicit-tracking}? 404 | | +--ro last-reporter? inet:ipv4-address 405 | | +--ro host* [host-address] {feature-explicit-tracking}? 406 | | +--ro host-address inet:ipv4-address 407 | | +--ro host-filter-mode filter-mode-type 408 | +--ro interfaces 409 | +--ro interface* [name] 410 | +--ro name if:interface-ref 411 | +--ro statistics 412 | +--ro received 413 | | +--ro num-query? yang:counter64 414 | | +--ro num-membership-report-v1? yang:counter64 415 | | +--ro num-membership-report-v2? yang:counter64 416 | | +--ro num-membership-report-v3? yang:counter64 417 | | +--ro num-leave? yang:counter64 418 | | +--ro num-non-member-leave? yang:counter64 419 | | +--ro num-pim-hello? yang:counter64 420 | +--ro sent 421 | +--ro num-query? yang:counter64 422 | +--ro num-membership-report-v1? yang:counter64 423 | +--ro num-membership-report-v2? yang:counter64 424 | +--ro num-membership-report-v3? yang:counter64 425 | +--ro num-leave? yang:counter64 426 | +--ro num-non-member-leave? yang:counter64 427 | +--ro num-pim-hello? yang:counter64 429 3.2. MLD Snooping Instances 431 The YANG module defines mld-snooping-instance which could be used in the 432 BRIDGE [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] scenario to 433 enable MLD Snooping. 435 All the MLD Snooping related attributes have been defined in the mld- 436 snooping-instance. The read-write attribute represents configurable 437 data. The read-only attribute represents state data. 439 The mld-snooping-instance is the same as IGMP snooping except changing 440 IPv4 addresses to IPv6 addresses. One mld-snooping-instance could be 441 used in one BRIDGE instance or L2VPN instance. One mld-snooping-instance 442 corresponds to one BRIDGE instance or L2VPN instance. 444 The value of scenario in mld-snooping-instance is bridge or l2vpn. When 445 it is bridge, mld-snooping-instance will be used in the BRIDGE scenario. 446 When it is l2vpn, mld-snooping-instance will be used in the L2VPN 447 scenario. 449 The value of bridge-mrouter-interface, l2vpn-mrouter-interface-ac, 450 l2vpn-mrouter-interface-pw are filled by the snooping device 451 dynamically. They are different from static-bridge-mrouter-interface, 452 static-l2vpn-mrouter-interface-ac, and static-l2vpn-mrouter-interface-pw 453 which are configured statically. 455 The attributes under the interfaces show the statistics of MLD Snooping 456 related packets. 458 augment /rt:routing/rt:control-plane-protocols 459 /rt:control-plane-protocol: 460 +--rw igmp-snooping-instance {feature-igmp-snooping}? 461 .. 462 +--rw mld-snooping-instance {feature-mld-snooping}? 463 +--rw scenario? 464 | snooping-scenario-type 465 +--rw enable? boolean 466 +--rw forwarding-table-type? enumeration 467 +--rw explicit-tracking? boolean 468 | {feature-explicit-tracking}? 469 +--rw exclude-lite? boolean 470 | {feature-exclude-lite}? 471 +--rw send-query? boolean 472 +--rw immediate-leave? empty 473 | {feature-immediate-leave}? 474 +--rw last-member-query-interval? uint16 475 +--rw query-interval? uint16 476 +--rw query-max-response-time? uint16 477 +--rw require-router-alert? boolean 478 | {feature-require-router-alert}? 479 +--rw robustness-variable? uint8 480 +--rw static-bridge-mrouter-interface* if:interface-ref 481 | {static-mrouter-interface}? 482 +--rw static-l2vpn-mrouter-interface-ac* if:interface-ref 483 | {static-mrouter-interface}? 484 +--rw static-l2vpn-mrouter-interface-pw* pw:pseudowire-ref 485 | {static-mrouter-interface}? 486 +--rw mld-version? uint8 487 +--rw querier-source? inet:ipv6-address 488 +--rw static-l2-multicast-group* [group source-addr] 489 | {feature-static-l2-multicast-group}? 490 | +--rw group 491 | | rt-types:ipv6-multicast-group-address 492 | +--rw source-addr 493 | | rt-types:ipv6-multicast-source-address 494 | +--rw bridge-outgoing-interface* if:interface-ref 495 | +--rw l2vpn-outgoing-ac* if:interface-ref 496 | +--rw l2vpn-outgoing-pw* pw:pseudowire-ref 497 +--ro entries-count? uint32 498 +--ro bridge-mrouter-interface* if:interface-ref 499 +--ro l2vpn-mrouter-interface-ac* if:interface-ref 500 +--ro l2vpn-mrouter-interface-pw* pw:pseudowire-ref 501 +--ro group* [address] 502 | +--ro address 503 | | rt-types:ipv6-multicast-group-address 504 | +--ro mac-address? yang:phys-address 505 | +--ro expire? rt-types:timer-value-seconds16 506 | +--ro up-time uint32 507 | +--ro last-reporter? inet:ipv6-address 508 | +--ro source* [address] 509 | +--ro address 510 | | rt-types:ipv6-multicast-source-address 511 | +--ro bridge-outgoing-interface* if:interface-ref 512 | +--ro l2vpn-outgoing-ac* if:interface-ref 513 | +--ro l2vpn-outgoing-pw* pw:pseudowire-ref 514 | +--ro up-time uint32 515 | +--ro expire? 516 | | rt-types:timer-value-seconds16 517 | +--ro host-count? uint32 518 | | {feature-explicit-tracking}? 519 | +--ro last-reporter? inet:ipv6-address 520 | +--ro host* [host-address] {feature-explicit-tracking}? 521 | +--ro host-address inet:ipv6-address 522 | +--ro host-filter-mode filter-mode-type 523 +--ro interfaces 524 +--ro interface* [name] 525 +--ro name if:interface-ref 526 +--ro statistics 527 +--ro received 528 | +--ro num-query? yang:counter64 529 | +--ro num-report-v1? yang:counter64 530 | +--ro num-report-v2? yang:counter64 531 | +--ro num-done? yang:counter64 532 | +--ro num-pim-hello? yang:counter64 533 +--ro sent 534 +--ro num-query? yang:counter64 535 +--ro num-report-v1? yang:counter64 536 +--ro num-report-v2? yang:counter64 537 +--ro num-done? yang:counter64 538 +--ro num-pim-hello? yang:counter64 540 3.3. Using IGMP and MLD Snooping Instances 542 The igmp-snooping-instance could be used in the scenario of BRIDGE 543 [dot1Qcp] or L2VPN [draft-ietf-bess-l2vpn-yang] to configure the IGMP 544 Snooping. 546 For the BRIDGE scenario this model augments /dot1q:bridges/dot1q:bridge 547 to use igmp-snooping-instance. It means IGMP Snooping is enabled in the 548 whole bridge. 550 It also augments /dot1q:bridges/dot1q:bridge/dot1q:component/ 551 dot1q:bridge-vlan/dot1q:vlan to use igmp-snooping-instance. It means 552 IGMP Snooping is enabled in the certain VLAN of the bridge. 554 augment /dot1q:bridges/dot1q:bridge: 555 +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref 556 +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref 557 augment /dot1q:bridges/dot1q:bridge/dot1q:component 558 /dot1q:bridge-vlan/dot1q:vlan: 559 +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref 560 +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref 562 For the L2VPN scenario this model augments /ni:network-instances/ 563 ni:network-instance/ni:ni-type/l2vpn:l2vpn [RFC8529] to use igmp- 564 snooping-instance. It means IGMP Snooping is enabled in the specified 565 l2vpn instance. 567 augment /ni:network-instances/ni:network-instance/ni:ni-type 568 /l2vpn:l2vpn: 569 +--rw igmp-snooping-instance? igmp-mld-snooping-instance-ref 570 +--rw mld-snooping-instance? igmp-mld-snooping-instance-ref 572 The mld-snooping-instance could be used in concurrence with igmp- 573 snooping-instance to configure the MLD Snooping. 575 3.4. IGMP and MLD Snooping RPC 577 IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping 578 group tables. 580 rpcs: 581 +---x clear-igmp-snooping-groups {rpc-clear-groups}? 582 | +---w input 583 | +---w name? igmp-mld-snooping-instance-ref 584 | | {feature-igmp-snooping}? 585 | +---w group? rt-types:ipv4-multicast-group-address 586 | +---w source? rt-types:ipv4-multicast-source-address 587 +---x clear-mld-snooping-groups {rpc-clear-groups}? 588 +---w input 589 +---w name? igmp-mld-snooping-instance-ref 590 | {feature-mld-snooping}? 591 +---w group? rt-types:ipv6-multicast-group-address 592 +---w source? rt-types:ipv6-multicast-source-address 594 4. IGMP and MLD Snooping YANG Module 596 This module references 597 [RFC2236],[RFC3376],[RFC3810],[RFC4286],[RFC4541],[RFC4604],[RFC4607], 598 [RFC6020],[RFC6241],[RFC6636],[RFC6991],[RFC7950],[RFC8040],[RFC8342], 599 [RFC8343],[RFC8340],[RFC8529],[RFC8652],[dot1Qcp], and [draft-ietf-bess- 600 l2vpn-yang]. 602 file ietf-igmp-mld-snooping@2020-04-29.yang 603 module ietf-igmp-mld-snooping { 604 yang-version 1.1; 605 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; 607 prefix ims; 609 import ietf-inet-types { 610 prefix "inet"; 611 reference 612 "RFC 6991: Common YANG Data Types"; 613 } 615 import ietf-yang-types { 616 prefix "yang"; 617 reference 618 "RFC 6991: Common YANG Data Types"; 619 } 621 import ietf-interfaces { 622 prefix "if"; 623 reference 624 "RFC 8343: A YANG Data Model for Interface Management"; 625 } 626 import ietf-routing { 627 prefix "rt"; 628 reference 629 "RFC 8349: A YANG Data Model for Routing Management (NMDA 630 Version)"; 631 } 633 import ietf-routing-types { 634 prefix "rt-types"; 635 reference 636 "RFC 8294: Common YANG Data Types for the Routing Area"; 637 } 639 import ietf-l2vpn { 640 prefix "l2vpn"; 641 reference 642 "draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based 643 L2VPN"; 644 } 646 import ietf-network-instance { 647 prefix "ni"; 648 reference 649 "RFC 8529: YANG Data Model for Network Instances"; 650 } 652 import ietf-pseudowires { 653 prefix "pw"; 654 reference 655 "draft-ietf-bess-l2vpn-yang: YANG Data Model for MPLS-based 656 L2VPN"; 657 } 659 import ieee802-dot1q-bridge { 660 prefix "dot1q"; 661 reference 662 "dot1Qcp: IEEE 802.1Qcp-2018 Bridges and Bridged Networks 663 - Amendment: YANG Data Model"; 664 } 666 organization 667 "IETF PIM Working Group"; 669 contact 670 "WG Web: 671 WG List: 673 Editors: Hongji Zhao 674 676 Xufeng Liu 677 679 Yisong Liu 680 682 Anish Peter 683 685 Mahesh Sivakumar 686 688 "; 690 description 691 "The module defines a collection of YANG definitions common for 692 all devices that implement Internet Group Management Protocol 693 (IGMP) and Multicast Listener Discovery (MLD) Snooping [RFC 4541]. 695 Copyright (c) 2020 IETF Trust and the persons identified as 696 authors of the code. All rights reserved. 698 Redistribution and use in source and binary forms, with or 699 without modification, is permitted pursuant to, and subject to 700 the license terms contained in, the Simplified BSD License set 701 forth in Section 4.c of the IETF Trust's Legal Provisions 702 Relating to IETF Documents 703 (http://trustee.ietf.org/license-info). 705 This version of this YANG module is part of RFC XXXX; see the 706 RFC itself for full legal notices."; 708 revision 2020-04-29 { 709 description 710 "Initial revision."; 711 reference 712 "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; 713 } 715 /* 716 * Features 717 */ 719 feature feature-igmp-snooping { 720 description 721 "Support IGMP snooping."; 722 } 724 feature feature-mld-snooping { 725 description 726 "Support MLD snooping."; 727 } 728 feature feature-immediate-leave { 729 description 730 "Support configuration of immediate-leave."; 731 } 733 feature feature-static-l2-multicast-group { 734 description 735 "Support configuration of L2 multicast static-group."; 736 } 738 feature static-mrouter-interface { 739 description 740 "Support configuration of mrouter interface."; 741 } 743 feature rpc-clear-groups { 744 description 745 "Support clearing statistics by RPC for IGMP & MLD snooping."; 746 } 748 feature feature-require-router-alert { 749 description 750 "Support configuration of require-router-alert."; 751 reference 752 "RFC 3376, Section 5.2"; 753 } 755 feature feature-exclude-lite { 756 description 757 "Support configuration of per instance exclude-lite."; 758 reference 759 "RFC 5790, Section 3"; 760 } 762 feature feature-explicit-tracking { 763 description 764 "Support configuration of per instance explicit-tracking."; 765 reference 766 "RFC 6636, Section 3"; 767 } 769 /* identities */ 771 identity scenario-type { 772 description 773 "Base identity for scenario type in IGMP & MLD snooping"; 774 } 776 identity bridge { 777 base scenario-type; 778 description 779 "This identity represents BRIDGE scenario."; 780 } 782 identity l2vpn { 783 base scenario-type; 784 description 785 "This identity represents L2VPN scenario."; 786 } 788 identity filter-mode { 789 description 790 "Base identity for filter mode in IGMP & MLD snooping"; 791 } 793 identity include { 794 base filter-mode; 795 description 796 "This identity represents include mode."; 797 } 799 identity exclude { 800 base filter-mode; 801 description 802 "This identity represents exclude mode."; 803 } 805 identity igmp-snooping { 806 base rt:control-plane-protocol; 807 description 808 "IGMP snooping"; 809 } 811 identity mld-snooping { 812 base rt:control-plane-protocol; 813 description 814 "MLD snooping"; 815 } 817 /* 818 * Typedefs 819 */ 821 typedef snooping-scenario-type { 822 type identityref { 823 base "scenario-type"; 824 } 825 description "The IGMP & MLD snooping scenario type"; 826 } 828 typedef filter-mode-type { 829 type identityref { 830 base "filter-mode"; 832 } 833 description "The host filter mode"; 834 } 836 typedef igmp-mld-snooping-instance-ref { 837 type leafref { 838 path "/rt:routing/rt:control-plane-protocols"+ 839 "/rt:control-plane-protocol/rt:name"; 840 } 841 description 842 "This type is used by data models which need to 843 reference IGMP & MLD snooping instance."; 844 } 846 /* 847 * Groupings 848 */ 850 grouping instance-config-attributes-igmp-snooping { 851 description 852 "IGMP snooping configuration for each BRIDGE or L2VPN instance."; 854 uses instance-config-attributes-igmp-mld-snooping; 856 leaf igmp-version { 857 type uint8 { 858 range "1..3"; 859 } 860 default 2; 861 description "IGMP version."; 862 } 864 leaf querier-source { 865 type inet:ipv4-address; 866 description 867 "Use the IGMP snooping querier to support IGMP 868 snooping in a VLAN where PIM and IGMP are not configured. 869 The IPv4 address is used as source address in messages."; 870 } 872 list static-l2-multicast-group { 873 if-feature feature-static-l2-multicast-group; 874 key "group source-addr"; 875 description 876 "A static multicast route, (*,G) or (S,G)."; 878 leaf group { 879 type rt-types:ipv4-multicast-group-address; 880 description 881 "Multicast group IPv4 address"; 883 } 885 leaf source-addr { 886 type rt-types:ipv4-multicast-source-address; 887 description 888 "Multicast source IPv4 address."; 889 } 891 leaf-list bridge-outgoing-interface { 892 when 'derived-from-or-self(../../scenario,"ims:bridge")'; 893 type if:interface-ref; 894 description "Outgoing interface in BRIDGE forwarding"; 895 } 897 leaf-list l2vpn-outgoing-ac { 898 when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; 899 type if:interface-ref; 900 description "Outgoing Attachment Circuit (AC) in L2VPN 901 forwarding"; 902 } 904 leaf-list l2vpn-outgoing-pw { 905 when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; 906 type pw:pseudowire-ref; 907 description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; 908 } 909 } // static-l2-multicast-group 910 } // instance-config-attributes-igmp-snooping 912 grouping instance-config-attributes-igmp-mld-snooping { 913 description 914 "IGMP and MLD snooping configuration of each VLAN."; 916 leaf enable { 917 type boolean; 918 default false; 919 description 920 "Set the value to true to enable IGMP & MLD snooping."; 921 } 923 leaf forwarding-table-type { 924 type enumeration { 925 enum "mac" { 926 description 927 "MAC-based lookup mode"; 928 } 929 enum "ip" { 930 description 931 "IP-based lookup mode"; 932 } 933 } 934 default "ip"; 935 description "The default forwarding table type is ip"; 936 } 938 leaf explicit-tracking { 939 if-feature feature-explicit-tracking; 940 type boolean; 941 default false; 942 description 943 "Track the IGMPv3 and MLDv2 snooping membership reports 944 from individual hosts. It contributes to saving network 945 resources and shortening leave latency."; 946 } 948 leaf exclude-lite { 949 if-feature feature-exclude-lite; 950 type boolean; 951 default false; 952 description 953 "Track the Lightweight IGMPv3 and MLDv2 protocol report"; 954 reference "RFC 5790"; 955 } 957 leaf send-query { 958 type boolean; 959 default false; 960 description 961 "Enable quick response for topology changes. 962 To support IGMP snooping in a VLAN where PIM and IGMP are 963 not configured. It cooperates with parameter querier-source."; 964 } 966 leaf immediate-leave { 967 if-feature feature-immediate-leave; 968 type empty; 969 description 970 "When immediate leave is enabled, the IGMP software assumes 971 that no more than one host is present on each VLAN port."; 972 } 974 leaf last-member-query-interval { 975 type uint16 { 976 range "10..10230"; 977 } 978 units one-tenth-second; 979 default 10; 980 description 981 "Last Member Query Interval, which may be tuned to modify 982 the leave latency of the network. 983 It is represented in units of 1/10 second."; 984 reference "RFC 3376. Sec. 8.8."; 985 } 986 leaf query-interval { 987 type uint16; 988 units seconds; 989 default 125; 990 description 991 "The Query Interval is the interval between General Queries 992 sent by the Querier."; 993 reference "RFC 3376. Sec. 4.1.7, 8.2, 8.14.2."; 994 } 996 leaf query-max-response-time { 997 type uint16; 998 units one-tenth-second; 999 default 100; 1000 description 1001 "Query maximum response time specifies the maximum time 1002 allowed before sending a responding report. 1003 It is represented in units of 1/10 second."; 1004 reference "RFC 3376. Sec. 4.1.1, 8.3, 8.14.3."; 1005 } 1007 leaf require-router-alert { 1008 if-feature feature-require-router-alert; 1009 type boolean; 1010 default false; 1011 description 1012 "When the value is true, router alert should exist 1013 in the IP header of IGMP or MLD packet."; 1014 } 1016 leaf robustness-variable { 1017 type uint8 { 1018 range "1..7"; 1019 } 1020 default 2; 1021 description 1022 "Querier's Robustness Variable allows tuning for the 1023 expected packet loss on a network."; 1024 reference "RFC 3376. Sec. 4.1.6, 8.1, 8.14.1."; 1025 } 1027 leaf-list static-bridge-mrouter-interface { 1028 when 'derived-from-or-self(../scenario,"ims:bridge")'; 1029 if-feature static-mrouter-interface; 1030 type if:interface-ref; 1031 description "static mrouter interface in BRIDGE forwarding"; 1032 } 1034 leaf-list static-l2vpn-mrouter-interface-ac { 1035 when 'derived-from-or-self(../scenario,"ims:l2vpn")'; 1036 if-feature static-mrouter-interface; 1037 type if:interface-ref; 1038 description 1039 "static mrouter interface whose type is interface 1040 in L2VPN forwarding"; 1041 } 1043 leaf-list static-l2vpn-mrouter-interface-pw { 1044 when 'derived-from-or-self(../scenario,"ims:l2vpn")'; 1045 if-feature static-mrouter-interface; 1046 type pw:pseudowire-ref; 1047 description 1048 "static mrouter interface whose type is PW 1049 in L2VPN forwarding"; 1050 } 1051 } // instance-config-attributes-igmp-mld-snooping 1053 grouping instance-config-attributes-mld-snooping { 1054 description "MLD snooping configuration of each VLAN."; 1056 uses instance-config-attributes-igmp-mld-snooping; 1058 leaf mld-version { 1059 type uint8 { 1060 range "1..2"; 1061 } 1062 default 2; 1063 description "MLD version."; 1064 } 1066 leaf querier-source { 1067 type inet:ipv6-address; 1068 description 1069 "Use the MLD snooping querier to support MLD snooping where 1070 PIM and MLD are not configured. The IPv6 address is used as 1071 the source address in messages."; 1072 } 1074 list static-l2-multicast-group { 1075 if-feature feature-static-l2-multicast-group; 1076 key "group source-addr"; 1077 description 1078 "A static multicast route, (*,G) or (S,G)."; 1080 leaf group { 1081 type rt-types:ipv6-multicast-group-address; 1082 description 1083 "Multicast group IPv6 address"; 1084 } 1086 leaf source-addr { 1087 type rt-types:ipv6-multicast-source-address; 1088 description 1089 "Multicast source IPv6 address."; 1091 } 1093 leaf-list bridge-outgoing-interface { 1094 when 'derived-from-or-self(../../scenario,"ims:bridge")'; 1095 type if:interface-ref; 1096 description "Outgoing interface in BRIDGE forwarding"; 1097 } 1099 leaf-list l2vpn-outgoing-ac { 1100 when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; 1101 type if:interface-ref; 1102 description "Outgoing Attachment Circuit (AC) in L2VPN 1103 forwarding"; 1104 } 1106 leaf-list l2vpn-outgoing-pw { 1107 when 'derived-from-or-self(../../scenario,"ims:l2vpn")'; 1108 type pw:pseudowire-ref; 1109 description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; 1110 } 1111 } // static-l2-multicast-group 1112 } // instance-config-attributes-mld-snooping 1114 grouping instance-state-group-attributes-igmp-mld-snooping { 1115 description 1116 "Attributes for both IGMP and MLD snooping groups."; 1118 leaf mac-address { 1119 type yang:phys-address; 1120 description "Destination MAC address for L2 multicast."; 1121 } 1123 leaf expire { 1124 type rt-types:timer-value-seconds16; 1125 units seconds; 1126 description 1127 "The time left before multicast group timeout."; 1128 } 1130 leaf up-time { 1131 type uint32; 1132 units seconds; 1133 mandatory true; 1134 description 1135 "The time elapsed since L2 multicast record created."; 1136 } 1137 } // instance-state-group-attributes-igmp-mld-snooping 1139 grouping instance-state-attributes-igmp-snooping { 1140 description 1141 "State attributes for IGMP snooping for each instance."; 1143 uses instance-state-attributes-igmp-mld-snooping; 1145 list group { 1147 key "address"; 1149 config false; 1151 description "IGMP snooping information"; 1153 leaf address { 1154 type rt-types:ipv4-multicast-group-address; 1155 description 1156 "Multicast group IPv4 address"; 1157 } 1159 uses instance-state-group-attributes-igmp-mld-snooping; 1161 leaf last-reporter { 1162 type inet:ipv4-address; 1163 description 1164 "Address of the last host which has sent report to join 1165 the multicast group."; 1166 } 1168 list source { 1169 key "address"; 1170 description "Source IPv4 address for multicast stream"; 1172 leaf address { 1173 type rt-types:ipv4-multicast-source-address; 1174 description "Source IPv4 address for multicast stream"; 1175 } 1177 uses instance-state-source-attributes-igmp-mld-snooping; 1179 leaf last-reporter { 1180 type inet:ipv4-address; 1181 description 1182 "Address of the last host which has sent report 1183 to join the multicast group."; 1184 } 1186 list host { 1187 if-feature feature-explicit-tracking; 1188 key "host-address"; 1189 description 1190 "List of multicast membership hosts 1191 of the specific multicast source-group."; 1193 leaf host-address { 1194 type inet:ipv4-address; 1195 description 1196 "Multicast membership host address."; 1197 } 1198 leaf host-filter-mode { 1199 type filter-mode-type; 1200 mandatory true; 1201 description 1202 "Filter mode for a multicast membership 1203 host may be either include or exclude."; 1204 } 1205 }// list host 1207 } // list source 1208 } // list group 1209 } // instance-state-attributes-igmp-snooping 1211 grouping instance-state-attributes-igmp-mld-snooping { 1213 description 1214 "State attributes for IGMP & MLD snooping instance."; 1216 leaf entries-count { 1217 type uint32; 1218 config false; 1219 description 1220 "The number of L2 multicast entries in IGMP & MLD snooping"; 1221 } 1223 leaf-list bridge-mrouter-interface { 1224 when 'derived-from-or-self(../scenario,"ims:bridge")'; 1225 type if:interface-ref; 1226 config false; 1227 description "mrouter interface in BRIDGE forwarding"; 1228 } 1230 leaf-list l2vpn-mrouter-interface-ac { 1231 when 'derived-from-or-self(../scenario,"ims:l2vpn")'; 1232 type if:interface-ref; 1233 config false; 1234 description 1235 "mrouter interface whose type is interface 1236 in L2VPN forwarding"; 1238 } 1240 leaf-list l2vpn-mrouter-interface-pw { 1241 when 'derived-from-or-self(../scenario,"ims:l2vpn")'; 1242 type pw:pseudowire-ref; 1243 config false; 1244 description 1245 "mrouter interface whose type is PW in L2VPN forwarding"; 1247 } 1248 } // instance-config-attributes-igmp-mld-snooping 1250 grouping instance-state-attributes-mld-snooping { 1251 description 1252 "State attributes for MLD snooping of each VLAN."; 1254 uses instance-state-attributes-igmp-mld-snooping; 1256 list group { 1257 key "address"; 1258 config false; 1259 description "MLD snooping statistics information"; 1261 leaf address { 1262 type rt-types:ipv6-multicast-group-address; 1263 description 1264 "Multicast group IPv6 address"; 1265 } 1267 uses instance-state-group-attributes-igmp-mld-snooping; 1269 leaf last-reporter { 1270 type inet:ipv6-address; 1271 description 1272 "Address of the last host which has sent report 1273 to join the multicast group."; 1274 } 1276 list source { 1277 key "address"; 1278 description "Source IPv6 address for multicast stream"; 1280 leaf address { 1281 type rt-types:ipv6-multicast-source-address; 1282 description "Source IPv6 address for multicast stream"; 1283 } 1285 uses instance-state-source-attributes-igmp-mld-snooping; 1287 leaf last-reporter { 1288 type inet:ipv6-address; 1289 description 1290 "Address of the last host which has sent report 1291 to join the multicast group."; 1292 } 1294 list host { 1295 if-feature feature-explicit-tracking; 1296 key "host-address"; 1297 description 1298 "List of multicast membership hosts 1299 of the specific multicast source-group."; 1301 leaf host-address { 1302 type inet:ipv6-address; 1303 description 1304 "Multicast membership host address."; 1305 } 1306 leaf host-filter-mode { 1307 type filter-mode-type; 1308 mandatory true; 1309 description 1310 "Filter mode for a multicast membership 1311 host may be either include or exclude."; 1312 } 1313 }// list host 1314 } // list source 1315 } // list group 1316 } // instance-state-attributes-mld-snooping 1318 grouping instance-state-source-attributes-igmp-mld-snooping { 1319 description 1320 "State attributes for IGMP & MLD snooping instance."; 1322 leaf-list bridge-outgoing-interface { 1323 when 'derived-from-or-self(../../../scenario,"ims:bridge")'; 1324 type if:interface-ref; 1325 description "Outgoing interface in BRIDGE forwarding"; 1326 } 1328 leaf-list l2vpn-outgoing-ac { 1329 when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; 1330 type if:interface-ref; 1331 description "Outgoing Attachment Circuit (AC) in L2VPN 1332 forwarding"; 1333 } 1335 leaf-list l2vpn-outgoing-pw { 1336 when 'derived-from-or-self(../../../scenario,"ims:l2vpn")'; 1337 type pw:pseudowire-ref; 1338 description "Outgoing Pseudo Wire (PW) in L2VPN forwarding"; 1339 } 1341 leaf up-time { 1342 type uint32; 1343 units seconds; 1344 mandatory true; 1345 description 1346 "The time elapsed since L2 multicast record created"; 1347 } 1349 leaf expire { 1350 type rt-types:timer-value-seconds16; 1351 units seconds; 1352 description 1353 "The time left before multicast group timeout."; 1354 } 1356 leaf host-count { 1357 if-feature feature-explicit-tracking; 1358 type uint32; 1359 description 1360 "The number of host addresses."; 1361 } 1362 } // instance-state-source-attributes-igmp-mld-snooping 1364 grouping igmp-snooping-statistics { 1365 description 1366 "The statistics attributes for IGMP snooping."; 1368 leaf num-query { 1369 type yang:counter64; 1370 description 1371 "The number of query messages."; 1372 } 1373 leaf num-membership-report-v1 { 1374 type yang:counter64; 1375 description 1376 "The number of membership report v1 messages."; 1377 } 1378 leaf num-membership-report-v2 { 1379 type yang:counter64; 1380 description 1381 "The number of membership report v2 messages."; 1382 } 1383 leaf num-membership-report-v3 { 1384 type yang:counter64; 1385 description 1386 "The number of membership report v3 messages."; 1387 } 1388 leaf num-leave { 1389 type yang:counter64; 1390 description 1391 "The number of leave messages."; 1392 } 1393 leaf num-non-member-leave { 1394 type yang:counter64; 1395 description 1396 "The number of non member leave messages."; 1397 } 1398 leaf num-pim-hello { 1399 type yang:counter64; 1400 description 1401 "The number of PIM hello messages."; 1402 } 1404 } // igmp-snooping-statistics 1406 grouping mld-snooping-statistics { 1407 description 1408 "The statistics attributes for MLD snooping."; 1410 leaf num-query { 1411 type yang:counter64; 1412 description 1413 "The number of Multicast Listener Query messages."; 1414 } 1415 leaf num-report-v1 { 1416 type yang:counter64; 1417 description 1418 "The number of Version 1 Multicast Listener Report."; 1419 } 1420 leaf num-report-v2 { 1421 type yang:counter64; 1422 description 1423 "The number of Version 2 Multicast Listener Report."; 1424 } 1425 leaf num-done { 1426 type yang:counter64; 1427 description 1428 "The number of Version 1 Multicast Listener Done."; 1429 } 1430 leaf num-pim-hello { 1431 type yang:counter64; 1432 description 1433 "The number of PIM hello messages."; 1434 } 1435 } // mld-snooping-statistics 1437 grouping igmp-snooping-interface-statistics-attributes { 1439 description "Interface statistics attributes for IGMP snooping"; 1441 container interfaces { 1442 config false; 1444 description 1445 "Interfaces associated with the IGMP snooping instance"; 1447 list interface { 1448 key "name"; 1450 description 1451 "Interfaces associated with the IGMP snooping instance"; 1453 leaf name { 1454 type if:interface-ref; 1455 description 1456 "The name of interface"; 1458 } 1460 container statistics { 1461 description 1462 "The interface statistics for IGMP snooping"; 1464 container received { 1465 description 1466 "Statistics of received IGMP snooping packets."; 1468 uses igmp-snooping-statistics; 1469 } 1470 container sent { 1471 description 1472 "Statistics of sent IGMP snooping packets."; 1474 uses igmp-snooping-statistics; 1475 } 1476 } 1477 } 1478 } 1479 }//igmp-snooping-interface-statistics-attributes 1481 grouping mld-snooping-interface-statistics-attributes { 1483 description "Interface statistics attributes for MLD snooping"; 1485 container interfaces { 1486 config false; 1488 description 1489 "Interfaces associated with the MLD snooping instance"; 1491 list interface { 1492 key "name"; 1494 description 1495 "Interfaces associated with the MLD snooping instance"; 1497 leaf name { 1498 type if:interface-ref; 1499 description 1500 "The name of interface"; 1502 } 1504 container statistics { 1505 description 1506 "The interface statistics for MLD snooping"; 1508 container received { 1509 description 1510 "Statistics of received MLD snooping packets."; 1512 uses mld-snooping-statistics; 1513 } 1514 container sent { 1515 description 1516 "Statistics of sent MLD snooping packets."; 1518 uses mld-snooping-statistics; 1519 } 1520 } 1521 } 1522 } 1523 }//mld-snooping-interface-statistics-attributes 1525 augment "/rt:routing/rt:control-plane-protocols"+ 1526 "/rt:control-plane-protocol" { 1528 description 1529 "IGMP & MLD snooping augmentation to control plane protocol 1530 configuration and state."; 1532 /* 1533 * igmp-snooping-instance 1534 */ 1536 container igmp-snooping-instance { 1537 when 'derived-from-or-self(../rt:type, "ims:igmp-snooping")' { 1538 description 1539 "This container is only valid for IGMP snooping."; 1540 } 1541 if-feature feature-igmp-snooping; 1542 description 1543 "IGMP snooping instance to configure the igmp-snooping."; 1545 leaf scenario { 1546 type snooping-scenario-type; 1547 default bridge; 1548 description 1549 "The scenario indicates BRIDGE or L2VPN."; 1550 } 1552 uses instance-config-attributes-igmp-snooping; 1554 uses instance-state-attributes-igmp-snooping; 1556 uses igmp-snooping-interface-statistics-attributes; 1558 } //igmp-snooping-instance 1559 /* 1560 * mld-snooping-instance 1561 */ 1563 container mld-snooping-instance { 1564 when 'derived-from-or-self(../rt:type, "ims:mld-snooping")' { 1565 description 1566 "This container is only valid for MLD snooping."; 1567 } 1568 if-feature feature-mld-snooping; 1569 description 1570 "MLD snooping instance to configure the mld-snooping."; 1572 leaf scenario { 1573 type snooping-scenario-type; 1574 default bridge; 1575 description 1576 "The scenario indicates BRIDGE or L2VPN."; 1577 } 1579 uses instance-config-attributes-mld-snooping; 1581 uses instance-state-attributes-mld-snooping; 1583 uses mld-snooping-interface-statistics-attributes; 1585 }//mld-snooping-instance 1586 } 1588 augment "/dot1q:bridges/dot1q:bridge" { 1589 description 1590 "Use IGMP & MLD snooping instance in BRIDGE scenario"; 1592 leaf igmp-snooping-instance { 1593 type igmp-mld-snooping-instance-ref; 1595 description 1596 "Configure IGMP snooping instance under bridge view"; 1597 } 1598 leaf mld-snooping-instance { 1599 type igmp-mld-snooping-instance-ref; 1601 description 1602 "Configure MLD snooping instance under bridge view"; 1603 } 1604 } 1606 augment "/dot1q:bridges/dot1q:bridge"+ 1607 "/dot1q:component/dot1q:bridge-vlan/dot1q:vlan" { 1608 description 1609 "Use IGMP & MLD snooping instance in certain VLAN of BRIDGE"; 1611 leaf igmp-snooping-instance { 1612 type igmp-mld-snooping-instance-ref; 1614 description 1615 "Configure IGMP snooping instance under VLAN view"; 1616 } 1618 leaf mld-snooping-instance { 1619 type igmp-mld-snooping-instance-ref; 1621 description 1622 "Configure MLD snooping instance under VLAN view"; 1623 } 1624 } 1626 augment "/ni:network-instances/ni:network-instance"+ 1627 "/ni:ni-type/l2vpn:l2vpn" { 1629 description 1630 "Use IGMP & MLD snooping instance in L2VPN scenario"; 1632 leaf igmp-snooping-instance { 1633 type igmp-mld-snooping-instance-ref; 1635 description 1636 "Configure IGMP snooping instance in L2VPN scenario"; 1637 } 1638 leaf mld-snooping-instance { 1639 type igmp-mld-snooping-instance-ref; 1641 description 1642 "Configure MLD snooping instance in L2VPN scenario"; 1643 } 1644 } 1646 /* RPCs */ 1648 rpc clear-igmp-snooping-groups { 1649 if-feature rpc-clear-groups; 1650 description 1651 "Clear the specified IGMP snooping cache tables."; 1653 input { 1655 leaf name { 1656 if-feature feature-igmp-snooping; 1657 type igmp-mld-snooping-instance-ref; 1658 description 1659 "Name of the igmp-snooping-instance"; 1660 } 1662 leaf group { 1663 type rt-types:ipv4-multicast-group-address; 1664 description 1665 "Multicast group IPv4 address. If it is not specified, 1666 all IGMP snooping group tables are cleared."; 1667 } 1669 leaf source { 1670 type rt-types:ipv4-multicast-source-address; 1671 description 1672 "Multicast source IPv4 address. If it is not specified, 1673 all IGMP snooping source-group tables are cleared."; 1674 } 1675 } 1676 } // rpc clear-igmp-snooping-groups 1678 rpc clear-mld-snooping-groups { 1679 if-feature rpc-clear-groups; 1680 description 1681 "Clear the specified MLD snooping cache tables."; 1683 input { 1684 leaf name { 1685 if-feature feature-mld-snooping; 1686 type igmp-mld-snooping-instance-ref; 1687 description 1688 "Name of the mld-snooping-instance"; 1689 } 1691 leaf group { 1692 type rt-types:ipv6-multicast-group-address; 1693 description 1694 "Multicast group IPv6 address. If it is not specified, 1695 all MLD snooping group tables are cleared."; 1696 } 1698 leaf source { 1699 type rt-types:ipv6-multicast-source-address; 1700 description 1701 "Multicast source IPv6 address. If it is not specified, 1702 all MLD snooping source-group tables are cleared."; 1703 } 1704 } 1705 } // rpc clear-mld-snooping-groups 1706 } 1707 1708 5. Security Considerations 1710 The YANG module specified in this document defines a schema for data 1711 that is designed to be accessed via network management protocols such as 1712 NETCONF [RFC6241] or RESTCONF [RFC8040]. The lowest NETCONF layer is the 1713 secure transport layer, and the mandatory-to-implement secure transport 1714 is Secure Shell (SSH) [RFC6242]. The lowest RESTCONF layer is HTTPS, and 1715 the mandatory-to-implement secure transport is TLS [RFC8446]. 1717 The Network Configuration Access Control Model (NACM) [RFC8341] provides 1718 the means to restrict access for particular NETCONF or RESTCONF users to 1719 a preconfigured subset of all available NETCONF or RESTCONF protocol 1720 operations and content. 1722 There are a number of data nodes defined in this YANG module that are 1723 writable/creatable/deletable (i.e., config true, which is the default). 1724 These data nodes may be considered sensitive or vulnerable in some 1725 network environments. Write operations (e.g., edit-config) to these data 1726 nodes without proper protection can have a negative effect on network 1727 operations. These are the subtrees and data nodes and their 1728 sensitivity/vulnerability: 1730 /rt:routing/rt:control-plane-protocols 1732 /rt:control-plane-protocol:/ims:igmp-snooping-instance 1734 /rt:routing/rt:control-plane-protocols 1736 /rt:control-plane-protocol:/ims:mld-snooping-instance 1738 The subtrees under /dot1q:bridges/dot1q:bridge 1740 /dot1q:bridges/dot1q:bridge/ims:igmp-snooping-instance 1742 /dot1q:bridges/dot1q:bridge/ims:mld-snooping-instance 1744 The subtrees under /dot1q:bridges/dot1q:bridge/dot1q:component 1745 /dot1q:bridge-vlan/dot1q:vlan 1747 /dot1q:bridges/dot1q:bridge/dot1q:component 1749 /dot1q:bridge-vlan/dot1q:vlan/ims:igmp-snooping-instance 1751 /dot1q:bridges/dot1q:bridge/dot1q:component 1753 /dot1q:bridge-vlan/dot1q:vlan/ims:mld-snooping-instance 1755 Unauthorized access to any data node of these subtrees can adversely 1756 affect the IGMP & MLD Snooping subsystem of both the local device and 1757 the network. This may lead to network malfunctions, delivery of packets 1758 to inappropriate destinations, and other problems. 1760 Some of the readable data nodes in this YANG module may be considered 1761 sensitive or vulnerable in some network environments. It is thus 1762 important to control read access (e.g., via get, get-config, or 1763 notification) to these data nodes. These are the subtrees and data nodes 1764 and their sensitivity/vulnerability: 1766 /rt:routing/rt:control-plane-protocols 1768 /rt:control-plane-protocol:/ims:igmp-snooping-instance 1770 /rt:routing/rt:control-plane-protocols 1772 /rt:control-plane-protocol:/ims:mld-snooping-instance 1774 Unauthorized access to any data node of these subtrees can disclose the 1775 operational state information of IGMP & MLD Snooping on this device. 1777 Some of the RPC operations in this YANG module may be considered 1778 sensitive or vulnerable in some network environments. It is thus 1779 important to control access to these operations. These are the 1780 operations and their sensitivity/vulnerability: 1782 ims:clear-igmp-snooping-groups 1784 ims:clear-mld-snooping-groups 1786 The IGMP & MLD Snooping YANG module supports the "clear-igmp-snooping- 1787 groups" and "clear-mld-snooping-groups" RPCs. If it meets unauthorized 1788 RPC operation invocation, the IGMP and MLD Snooping group tables will be 1789 cleared unexpectedly. 1791 6. IANA Considerations 1793 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1794 actual RFC number (and remove this note). 1796 This document registers the following namespace URIs in the IETF XML 1798 registry [RFC3688]: 1800 -------------------------------------------------------------------- 1802 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 1804 Registrant Contact: The IESG. 1806 XML: N/A, the requested URI is an XML namespace. 1808 -------------------------------------------------------------------- 1810 This document registers the following YANG modules in the YANG Module 1811 Names registry [RFC7950]: 1813 -------------------------------------------------------------------- 1815 name: ietf-igmp-mld-snooping 1817 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping 1819 prefix: ims 1821 reference: RFC XXXX 1823 -------------------------------------------------------------------- 1824 7. References 1826 7.1. Normative References 1828 [dot1Qcp] Holness, M., "IEEE 802.1Qcp-2018 Bridges and Bridged 1829 Networks - Amendment: YANG Data Model", 2018. 1831 [RFC2236] W. Fenner, "Internet Group Management Protocol, Version 2", 1832 RFC 2236, November 1997. 1834 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1835 Thyagarajan, "Internet Group Management Protocol, Version 1836 3", RFC 3376, October 2002. 1838 [RFC3688] Mealling, M., "The IETF XML Registry", RFC 3688, January 1839 2004. 1841 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1842 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1844 [RFC4286] B. Haberman and J. Martin, "Multicast Router Discovery", 1845 RFC 4286, December 2005. 1847 [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using Internet 1848 Group Management Protocol Version 3 (IGMPv3) and Multicast 1849 Listener Discovery Protocol Version 2 (MLDv2) for Source- 1850 Specific Multicast", RFC 4604, August 2006. 1852 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 1853 IP", RFC 4607, August 2006. 1855 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1856 the Network Configuration Protocol (NETCONF)", RFC 6020, 1857 October 2010. 1859 [RFC6241] R. Enns, Ed., M. Bjorklund, Ed., J. Schoenwaelder, Ed., A. 1860 Bierman, Ed., "Network Configuration Protocol (NETCONF)", 1861 RFC 6241, June 2011. 1863 [RFC6242] Wasserman, M., "Using the NETCONF Protocol over Secure 1864 Shell (SSH)", RFC 6242, June 2011. 1866 [RFC6991] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6991, 1867 July 2013. 1869 [RFC7950] M. Bjorklund, Ed., "The YANG 1.1 Data Modeling Language", 1870 RFC 7950, August 2016. 1872 [RFC7951] L. Lhotka, "JSON Encoding of Data Modeled with YANG", RFC 1873 7951, August 2016. 1875 [RFC8040] A. Bierman, M. Bjorklund, K. Watsen, "RESTCONF Protocol", 1876 RFC 8040, January 2017. 1878 [RFC8294] X. Liu, Y. Qu, A. Lindem, C. Hopps, L. Berger, "Common YANG 1879 Data Types for the Routing Area", RFC 8294, December 2017. 1881 [RFC8340] M. Bjorklund, and L. Berger, Ed., "YANG Tree Diagrams", RFC 1882 8340, March 2018. 1884 [RFC8341] Bierman, A. and M. Bjorklund, "Network Configuration Access 1885 Control Model", RFC 8341, March 2018. 1887 [RFC8342] M. Bjorklund and J. Schoenwaelder, "Network Management 1888 Datastore Architecture (NMDA)", RFC 8342, March 2018. 1890 [RFC8343] M. Bjorklund, "A YANG Data Model for Interface Management", 1891 RFC 8343, March 2018. 1893 [RFC8344] M. Bjorklund, "A YANG Data Model for IP Management", RFC 1894 8344, March 2018. 1896 [RFC8349] L. Lhotka, A. Lindem, Y. Qu, "A YANG Data Model for Routing 1897 Management (NMDA Version)", RFC 8349, March 2018. 1899 [RFC8407] A. Bierman, "Guidelines for Authors and Reviewers of 1900 Documents Containing YANG Data Models", RFC 8407, October 1901 2018. 1903 [RFC8446] Rescorla, E., "The Transport Layer Security (TLS) Protocol 1904 Version 1.3", RFC 8446, August 2018. 1906 [RFC8529] L. Berger, C. Hopps, A. Lindem, D. Bogdanovic, X. Liu, 1907 "YANG Data Model for Network Instances", RFC 8529, March 1908 2019. 1910 [RFC8652] X. Liu, F. Guo, M. Sivakumar, P. McAllister, A. Peter, "A 1911 YANG Data Model for the Internet Group Management Protocol 1912 (IGMP) and Multicast Listener Discovery (MLD)", RFC 8652, 1913 November 2019. 1915 [draft-ietf-bess-l2vpn-yang] Shah, H., Brissette, P., Chen, I., 1916 Hussain, I., Wen, B., and K. Tiruveedhula, "YANG Data Model 1917 for MPLS-basedL2VPN", draft-ietf-bess-l2vpn-yang-10 (work 1918 in progress), July 2019. 1920 7.2. Informative References 1922 [RFC3916] X. Xiao, Ed., D. McPherson, Ed., P. Pate, Ed., 1923 "Requirements for Pseudo-Wire Emulation Edge-to-Edge 1924 (PWE3)", RFC 3916, September 2004. 1926 [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations 1927 for Internet Group Management Protocol (IGMP) and Multicast 1928 Listener Discovery (MLD) Snooping Switches", RFC 4541, May 1929 2006. 1931 [RFC6636] H. Asaeda, H. Liu, Q. Wu, "Tuning the Behavior of the 1932 Internet Group Management Protocol (IGMP) and Multicast 1933 Listener Discovery (MLD) for Routers in Mobile and Wireless 1934 Networks", RFC 6636, May 2012. 1936 Appendix A. Data Tree Example 1938 A.1 Bridge scenario 1940 This section contains an example for bridge scenario in the JSON 1941 encoding [RFC7951], containing both configuration and state data. 1943 +-----------+ 1944 + Source + 1945 +-----+-----+ 1946 | 1947 -----------------+---------------------------- 1948 |eth1/1 1949 +---+---+ 1950 + R1 + 1951 +-+---+-+ 1952 eth1/2 | \ eth1/3 1953 | \ 1954 | \ 1955 | \ 1956 | \ 1957 eth2/1 | \ eth3/1 1958 +---+---+ +--+---+ 1959 + R2 + + R3 + 1960 +---+---+ +--+---+ 1961 eth2/2 | | eth3/2 1962 | | 1963 ---------------+----------+------------------- 1964 | | 1965 | | 1966 +--------+--+ +---+--------+ 1967 + Receiver1 + + Receiver2 + 1968 +-----------+ +------------+ 1970 The configuration data for R1 in the above figure could be as follows: 1972 { 1973 "ietf-interfaces:interfaces":{ 1974 "interface":[ 1975 { 1976 "name":"eth1/1", 1977 "type":"iana-if-type:ethernetCsmacd" 1978 } 1979 ] 1980 }, 1981 "ietf-routing:routing":{ 1982 "control-plane-protocols":{ 1983 "control-plane-protocol":[ 1984 { 1985 "type":"ietf-igmp-mld-snooping:igmp-snooping", 1986 "name":"bis1", 1987 "ietf-igmp-mld-snooping:igmp-snooping-instance":{ 1988 "scenario":"ietf-igmp-mld-snooping:bridge", 1989 "enable":true 1990 } 1991 } 1992 ] 1993 } 1994 }, 1995 "ieee802-dot1q-bridge:bridges":{ 1996 "bridge":[ 1997 { 1998 "name":"isp1", 1999 "address":"00-23-ef-a5-77-12", 2000 "bridge-type":"ieee802-dot1q-bridge:customer-vlan-bridge", 2001 "component":[ 2002 { 2003 "name":"comp1", 2004 "type":"ieee802-dot1q-bridge:c-vlan-component", 2005 "bridge-vlan":{ 2006 "vlan":[ 2007 { 2008 "vid":101, 2009 "ietf-igmp-mld-snooping:igmp-snooping-instance":"bis1" 2010 } 2011 ] 2012 } 2013 } 2014 ] 2015 } 2016 ] 2017 } 2018 } 2020 The corresponding operational state data for R1 could be as follows: 2022 { 2023 "ietf-interfaces:interfaces": { 2024 "interface": [ 2025 { 2026 "name": "eth1/1", 2027 "type": "iana-if-type:ethernetCsmacd", 2028 "oper-status": "up", 2029 "statistics": { 2030 "discontinuity-time": "2018-05-23T12:34:56-05:00" 2031 } 2032 } 2033 ] 2034 }, 2035 "ietf-routing:routing": { 2036 "control-plane-protocols": { 2037 "control-plane-protocol": [ 2038 { 2039 "type": "ietf-igmp-mld-snooping:igmp-snooping", 2040 "name": "bis1", 2041 "ietf-igmp-mld-snooping:igmp-snooping-instance": { 2042 "scenario": "ietf-igmp-mld-snooping:bridge", 2043 "enable": true 2044 } 2045 } 2046 ] 2047 } 2048 }, 2049 "ieee802-dot1q-bridge:bridges": { 2050 "bridge": [ 2051 { 2052 "name": "isp1", 2053 "address": "00-23-ef-a5-77-12", 2054 "bridge-type": "ieee802-dot1q-bridge:customer-vlan-bridge", 2055 "component": [ 2056 { 2057 "name": "comp1", 2058 "type": "ieee802-dot1q-bridge:c-vlan-component", 2059 "bridge-vlan": { 2060 "vlan": [ 2061 { 2062 "vid": 101, 2063 "ietf-igmp-mld-snooping:igmp-snooping-instance": "bis1" 2064 } 2065 ] 2066 } 2067 } 2068 ] 2069 } 2070 ] 2071 } 2072 } 2073 A.2 L2VPN scenario 2075 This section contains an example for L2VPN scenario in the JSON encoding 2076 [RFC7951], containing both configuration and state data. 2078 +-----------+ 2079 + Source + 2080 +-----+-----+ 2081 | 2082 -----------------+---------------------------- 2083 |eth1/1 2084 +---+---+ 2085 + R1 + 2086 +-+---+-+ 2087 eth1/2 | \ eth1/3 2088 | \ 2089 | \ 2090 | \ 2091 | \ 2092 eth2/1 | \ eth3/1 2093 +---+---+ +-+---+ 2094 + R2 +----+ R3 + 2095 +---+---+ +-+---+ 2096 eth2/2 | | eth3/2 2097 | | 2098 ---------------+----------+------------------- 2099 | | 2100 | | 2101 +--------+--+ +---+--------+ 2102 + Receiver1 + + Receiver2 + 2103 +-----------+ +------------+ 2105 The configuration data for R1 in the above figure could be as follows: 2106 { 2107 "ietf-interfaces:interfaces":{ 2108 "interface":[ 2109 { 2110 "name":"eth1/1", 2111 "type":"iana-if-type:ethernetCsmacd" 2112 } 2113 ] 2114 }, 2115 "ietf-pseudowires:pseudowires": { 2116 "pseudowire": [ 2117 { 2118 "name": "pw2" 2119 }, 2120 { 2121 "name": "pw3" 2123 } 2124 ] 2125 }, 2126 "ietf-network-instance:network-instances": { 2127 "network-instance": [ 2128 { 2129 "name": "vpls1", 2130 "ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1", 2131 "ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type", 2132 "ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling", 2133 "ietf-l2vpn:endpoint": [ 2134 { 2135 "name": "acs", 2136 "ac": [ 2137 { 2138 "name": "eth1/1" 2139 } 2140 ] 2141 }, 2142 { 2143 "name": "pws", 2144 "pw": [ 2145 { 2146 "name": "pw2" 2147 }, 2148 { 2149 "name": "pw3" 2150 } 2151 ] 2152 } 2153 ] 2154 } 2155 ] 2156 }, 2157 "ietf-routing:routing": { 2158 "control-plane-protocols": { 2159 "control-plane-protocol": [ 2160 { 2161 "type": "ietf-igmp-mld-snooping:igmp-snooping", 2162 "name": "vis1", 2163 "ietf-igmp-mld-snooping:igmp-snooping-instance": { 2164 "scenario": "ietf-igmp-mld-snooping:l2vpn", 2165 "enable": true 2166 } 2167 } 2168 ] 2169 } 2170 } 2171 } 2172 The corresponding operational state data for R1 could be as follows: 2174 { 2175 "ietf-interfaces:interfaces":{ 2176 "interface":[ 2177 { 2178 "name":"eth1/1", 2179 "type":"iana-if-type:ethernetCsmacd", 2180 "oper-status": "up", 2181 "statistics": { 2182 "discontinuity-time": "2018-05-23T12:34:56-05:00" 2183 } 2184 } 2185 ] 2186 }, 2187 "ietf-pseudowires:pseudowires": { 2188 "pseudowire": [ 2189 { 2190 "name": "pw2" 2191 }, 2192 { 2193 "name": "pw3" 2194 } 2195 ] 2196 }, 2197 "ietf-network-instance:network-instances": { 2198 "network-instance": [ 2199 { 2200 "name": "vpls1", 2201 "ietf-igmp-mld-snooping:igmp-snooping-instance": "vis1", 2202 "ietf-l2vpn:type": "ietf-l2vpn:vpls-instance-type", 2203 "ietf-l2vpn:signaling-type": "ietf-l2vpn:ldp-signaling", 2204 "ietf-l2vpn:endpoint": [ 2205 { 2206 "name": "acs", 2207 "ac": [ 2208 { 2209 "name": "eth1/1" 2210 } 2211 ] 2212 }, 2213 { 2214 "name": "pws", 2215 "pw": [ 2216 { 2217 "name": "pw2" 2218 }, 2219 { 2220 "name": "pw3" 2221 } 2222 ] 2223 } 2225 ] 2226 } 2227 ] 2228 }, 2229 "ietf-routing:routing": { 2230 "control-plane-protocols": { 2231 "control-plane-protocol": [ 2232 { 2233 "type": "ietf-igmp-mld-snooping:igmp-snooping", 2234 "name": "vis1", 2235 "ietf-igmp-mld-snooping:igmp-snooping-instance": { 2236 "scenario": "ietf-igmp-mld-snooping:l2vpn", 2237 "enable": true 2238 } 2239 } 2240 ] 2241 } 2242 } 2243 } 2244 Authors' Addresses 2246 Hongji Zhao 2247 Ericsson (China) Communications Company Ltd. 2248 Ericsson Tower, No. 5 Lize East Street, 2249 Chaoyang District Beijing 100102, P.R. China 2251 Email: hongji.zhao@ericsson.com 2253 Xufeng Liu 2254 Volta Networks 2255 USA 2257 EMail: xufeng.liu.ietf@gmail.com 2259 Yisong Liu 2260 China Mobile 2261 China 2263 Email: liuyisong@chinamobile.com 2265 Anish Peter 2266 Individual 2268 EMail: anish.ietf@gmail.com 2270 Mahesh Sivakumar 2271 Juniper Networks 2272 1133 Innovation Way 2273 Sunnyvale, California 2274 USA 2276 EMail: sivakumar.mahesh@gmail.com