idnits 2.17.1 draft-ietf-pim-igmp-mld-yang-03.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 125 instances of too long lines in the document, the longest one being 62 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 268 has weird spacing: '...-policy str...' == Line 271 has weird spacing: '...ce-addr sou...' == Line 336 has weird spacing: '...-policy str...' == Line 339 has weird spacing: '...ce-addr sou...' == Line 442 has weird spacing: '...-policy str...' == (3 more instances...) -- The document date (March 13, 2017) is 2600 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: 'RFC3688' is mentioned on line 1858, but not defined == Unused Reference: 'I-D.ietf-netmod-rfc6087bis' is defined on line 1938, but no explicit reference was found in the text ** Obsolete normative reference: RFC 8022 (Obsoleted by RFC 8349) -- Obsolete informational reference (is this intentional?): RFC 6087 (Obsoleted by RFC 8407) == Outdated reference: A later version (-20) exists of draft-ietf-netmod-rfc6087bis-12 Summary: 2 errors (**), 0 flaws (~~), 10 warnings (==), 2 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 PIM Working Group X. Liu 2 Internet-Draft Jabil 3 Intended Status: Standard Track F. Guo 4 Expires: September 13, 2017 Huawei 5 M. Sivakumar 6 Cisco 7 P. McAllister 8 Metaswitch Networks 9 A. Peter 10 Juniper Networks 11 March 13, 2017 13 A YANG data model for Internet Group Management Protocol (IGMP) and 14 Multicast Listener Discovery (MLD) 15 draft-ietf-pim-igmp-mld-yang-03 17 Status of this Memo 19 This Internet-Draft is submitted in full conformance with the 20 provisions of BCP 78 and BCP 79. 22 Internet-Drafts are working documents of the Internet Engineering 23 Task Force (IETF), its areas, and its working groups. Note that 24 other groups may also distribute working documents as Internet- 25 Drafts. 27 Internet-Drafts are draft documents valid for a maximum of six 28 months and may be updated, replaced, or obsoleted by other documents 29 at any time. It is inappropriate to use Internet-Drafts as 30 reference material or to cite them other than as "work in progress." 32 The list of current Internet-Drafts can be accessed at 33 http://www.ietf.org/ietf/1id-abstracts.txt 35 The list of Internet-Draft Shadow Directories can be accessed at 36 http://www.ietf.org/shadow.html 38 This Internet-Draft will expire on September 13, 2017. 40 Copyright Notice 42 Copyright (c) 2017 IETF Trust and the persons identified as the 43 document authors. All rights reserved. 45 This document is subject to BCP 78 and the IETF Trust's Legal 46 Provisions Relating to IETF Documents 47 (http://trustee.ietf.org/license-info) in effect on the date of 48 publication of this document. Please review these documents 49 carefully, as they describe your rights and restrictions with 50 respect to this document. Code Components extracted from this 51 document must include Simplified BSD License text as described in 52 Section 4.e of the Trust Legal Provisions and are provided without 53 warranty as described in the Simplified BSD License. 55 Abstract 57 This document defines a YANG data model that can be used to 58 configure and manage Internet Group Management Protocol (IGMP) and 59 Multicast Listener Discovery (MLD) devices. 61 Table of Contents 63 1. Introduction ................................................ 2 64 1.1. Requirements Language................................... 3 65 1.2. Terminology ............................................ 3 66 2. Design of Data model......................................... 3 67 2.1. Scope of model ......................................... 3 68 2.2. Optional capabilities................................... 3 69 2.3. Position of address family in hierarchy................. 4 70 3. Module Structure ............................................ 4 71 3.1. IGMP and MLD Configuration.............................. 4 72 3.2. IGMP and MLD Operational State.......................... 8 73 3.3. IGMP and MLD RPC....................................... 12 74 4. IGMP and MLD YANG Modules................................... 13 75 5. Security Considerations..................................... 38 76 6. IANA Considerations ........................................ 38 77 7. References ................................................. 39 78 7.1. Normative References................................... 39 79 7.2. Informative References................................. 40 80 8. Acknowledgments ............................................ 40 82 1. Introduction 84 YANG [RFC6020] [RFC6087] is a data definition language that was 85 introduced to model the configuration and running state of a device 86 managed using NETCONF [RFC6241]. YANG is now also being used as a 87 component of wider management interfaces, such as CLIs. 89 This document defines a draft YANG data model that can be used to 90 configure and manage Internet Group Management Protocol (IGMP) and 91 Multicast Listener Discovery (MLD) devices. Currently this model is 92 incomplete, but it will support the core IGMP and MLD protocols, as 93 well as many other features mentioned in separate IGMP and MLD RFCs. 94 Non-core features are defined as optional in the provided data 95 model. 97 1.1. Requirements Language 99 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 100 "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this 101 document are to be interpreted as described in RFC-2119 [RFC2119]. 103 1.2. Terminology 105 The terminology for describing YANG data models is found 106 in[RFC6020]. 108 This draft employs YANG tree diagrams, which are explained in [I- 109 D.ietf-netmod-rfc6087bis]. 111 2. Design of Data model 113 2.1. Scope of model 115 The model covers IGMPv1 [RFC1112], IGMPv2[RFC2236], IGMPv3[RFC3376] 116 and MLDv1[RFC2710], MLDv2[RFC3810]. 118 The representation of some of extension features is not specified in 119 this draft of the data model. This model is being circulated in its 120 current form for early oversight and review of the basic hierarchy. 122 The operational state fields and rpcs of this model can also be 123 extended, though the structure of what has been written may be taken 124 as representative of the structure of the whole model. 126 This model does not cover other IGMP and MLD related protocols such 127 as IGMP/MLD Proxy[RFC4605] or IGMP/MLD Snooping[RFC4541] etc., these 128 will be specified in separate documents. 130 2.2. Optional capabilities 132 This model is designed to represent the capabilities of IGMP and MLD 133 devices with various specifications, including some with basic 134 subsets of the IGMP and MLD protocols. The main design goals of 135 this draft are that any major now-existing implementation may be 136 said to support the basic model, and that the configuration of all 137 implementations meeting the specification is easy to express through 138 some combination of the features in the basic model and simple 139 vendor augmentations. 141 There is also value in widely-supported features being standardized, 142 to save work for individual vendors, and so that mapping between 143 different vendors' configuration is not needlessly complicated. 144 Therefore these modules declare a number of features representing 145 capabilities that not all deployed devices support. 147 The extensive use of feature declarations should also substantially 148 simplify the capability negotiation process for a vendor's IGMP and 149 MLD implementations. 151 On the other hand, operational state parameters are not so widely 152 designated as features, as there are many cases where the defaulting 153 of an operational state parameter would not cause any harm to the 154 system, and it is much more likely that an implementation without 155 native support for a piece of operational state would be able to 156 derive a suitable value for a state variable that is not natively 157 supported. 159 For the same reason, basic constant ranges (for example, timer 160 maximum and minimum) will be used in the model. It is expected that 161 vendors will augment the model with extended specific restrictions 162 that might be required. Vendors may also extend the features list 163 with proprietary extensions. 165 2.3. Position of address family in hierarchy 167 The current draft contains IGMP and MLD as separate schema branches 168 in the structure. The reason for this is to make it easier for 169 implementations which may optionally choose to support specific 170 address families. And the names of objects may be different between 171 the ipv4(IGMP)and ipv6(MLD)address families. 173 3. Module Structure 175 3.1. IGMP and MLD Configuration 177 The IGMP and MLD modules define the routing-control-plane-protocol- 178 wide configuration options separately in a three-level hierarchy as 179 listed below: 181 Global level: IGMP or MLD configuration attributes for the entire 182 routing system 184 Interface-global: IGMP or MLD configuration attributes applicable 185 to all interfaces IGMP MLD configuration attributes applied to 186 interfaces whose interface level attributes are not existing, with 187 same attributes' value for those 189 Interface-level: IGMP or MLD configuration attributes specific to 190 the given interface 192 Where fields are not genuinely essential to protocol operation, they 193 are marked as optional. Some fields will be essential but have a 194 default specified, so that they need not be configured explicitly. 196 The module structure also applies, where applicable, to the 197 operational state and notifications as well. 199 Our current direction is to agree to a protocol-centric model , and 200 the IGMP and MLD model augments "/rt:routing/rt:control-plane- 201 protocols/ rt:control-plane-protocol" and would allow a single 202 protocol instance per VRF. 204 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 205 +--rw igmp 206 +--rw global 207 | +--rw enable? boolean {global-admin-enable}? 208 | +--rw max-entries? uint32 {global-max-entries}? 209 | +--rw max-groups? uint32 {global-max-groups}? 210 +--rw interfaces 211 +--rw (last-member-query-interval)? 212 | +--:(last-member-query-interval-basic) 213 | | +--rw last-member-query-interval-basic? uint16 214 | +--:(last-member-query-interval-extended) 215 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 216 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 217 +--rw (query-interval)? 218 | +--:(query-interval-basic) 219 | | +--rw query-interval-basic? uint16 220 | +--:(query-interval-extended) 221 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 222 +--rw (query-max-response-time)? 223 | +--:(query-max-response-time-basic) 224 | | +--rw query-max-response-time-basic? uint16 225 | +--:(query-max-response-time-extended) 226 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 227 +--rw require-router-alert? boolean {intf-require-router-alert}? 228 +--rw (robustness-variable)? 229 | +--:(robustness-variable-basic) 230 | | +--rw robustness-variable-basic? uint8 231 | +--:(robustness-variable-extended) 232 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 233 +--rw version? uint8 234 +--rw interface* [interface-name] 235 +--rw interface-name if:interface-ref 236 +--rw enable? boolean {intf-admin-enable}? 237 +--rw group-policy? string 238 +--rw immediate-leave? empty {intf-immediate-leave}? 239 +--rw (last-member-query-interval)? 240 | +--:(last-member-query-interval-basic) 241 | | +--rw last-member-query-interval-basic? uint16 242 | +--:(last-member-query-interval-extended) 243 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 244 +--rw max-groups? uint32 {intf-max-groups}? 245 +--rw max-group-sources? uint32 {intf-max-group-sources}? 246 +--rw (query-interval)? 247 | +--:(query-interval-basic) 248 | | +--rw query-interval-basic? uint16 249 | +--:(query-interval-extended) 250 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 251 +--rw (query-max-response-time)? 252 | +--:(query-max-response-time-basic) 253 | | +--rw query-max-response-time-basic? uint16 254 | +--:(query-max-response-time-extended) 255 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 256 +--rw require-router-alert? boolean {intf-require-router-alert}? 257 +--rw (robustness-variable)? 258 | +--:(robustness-variable-basic) 259 | | +--rw robustness-variable-basic? uint8 260 | +--:(robustness-variable-extended) 261 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 262 +--rw source-policy? string {intf-source-policy}? 263 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 264 +--rw version? uint8 265 +--rw join-group* inet:ipv4-address {intf-join-group}? 266 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 267 | +--rw source-addr ssm-map-ipv4-addr-type 268 | +--rw group-policy string 269 +--rw static-group* [group source-addr] {intf-static-group}? 270 +--rw group inet:ipv4-address 271 +--rw source-addr source-ipv4-addr-type 272 augment /rt:routing/rt:control-plane-protocols/rt:control-plane-protocol: 273 +--rw mld 274 +--rw global 275 | +--rw enable? boolean {global-admin-enable}? 276 | +--rw max-entries? uint32 {global-max-entries}? 277 | +--rw max-groups? uint32 {global-max-groups}? 278 +--rw interfaces 279 +--rw (last-member-query-interval)? 280 | +--:(last-member-query-interval-basic) 281 | | +--rw last-member-query-interval-basic? uint16 282 | +--:(last-member-query-interval-extended) 283 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 284 +--rw max-groups-per-interface? uint32 {intf-max-groups}? 285 +--rw (query-interval)? 286 | +--:(query-interval-basic) 287 | | +--rw query-interval-basic? uint16 288 | +--:(query-interval-extended) 289 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 290 +--rw (query-max-response-time)? 291 | +--:(query-max-response-time-basic) 292 | | +--rw query-max-response-time-basic? uint16 293 | +--:(query-max-response-time-extended) 294 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 295 +--rw require-router-alert? boolean {intf-require-router-alert}? 296 +--rw (robustness-variable)? 297 | +--:(robustness-variable-basic) 298 | | +--rw robustness-variable-basic? uint8 299 | +--:(robustness-variable-extended) 300 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 301 +--rw version? uint8 302 +--rw interface* [interface-name] 303 +--rw interface-name if:interface-ref 304 +--rw enable? boolean {intf-admin-enable}? 305 +--rw group-policy? string 306 +--rw immediate-leave? empty {intf-immediate-leave}? 307 +--rw (last-member-query-interval)? 308 | +--:(last-member-query-interval-basic) 309 | | +--rw last-member-query-interval-basic? uint16 310 | +--:(last-member-query-interval-extended) 311 | +--rw last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 312 +--rw max-groups? uint32 {intf-max-groups}? 313 +--rw max-group-sources? uint32 {intf-max-group-sources}? 314 +--rw (query-interval)? 315 | +--:(query-interval-basic) 316 | | +--rw query-interval-basic? uint16 317 | +--:(query-interval-extended) 318 | +--rw query-interval-extended? uint16 {intf-query-interval-extended}? 319 +--rw (query-max-response-time)? 320 | +--:(query-max-response-time-basic) 321 | | +--rw query-max-response-time-basic? uint16 322 | +--:(query-max-response-time-extended) 323 | +--rw query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 324 +--rw require-router-alert? boolean {intf-require-router-alert}? 325 +--rw (robustness-variable)? 326 | +--:(robustness-variable-basic) 327 | | +--rw robustness-variable-basic? uint8 328 | +--:(robustness-variable-extended) 329 | +--rw robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 330 +--rw source-policy? string {intf-source-policy}? 331 +--rw verify-source-subnet? empty {intf-verify-source-subnet}? 332 +--rw version? uint8 333 +--rw join-group* inet:ipv6-address {intf-join-group}? 334 +--rw ssm-map* [source-addr group-policy] {intf-ssm-map}? 335 | +--rw source-addr ssm-map-ipv6-addr-type 336 | +--rw group-policy string 337 +--rw static-group* [group source-addr] {intf-static-group}? 338 +--rw group inet:ipv6-address 339 +--rw source-addr source-ipv6-addr-type 341 3.2. IGMP and MLD Operational State 343 The IGMP or MLD module contains operational state information also 344 in a three-level hierarchy as mentioned earlier and separately 345 listed as below. 347 Global level: IGMP or MLD operational state attributes for the 348 entire routing system 350 Interface-global: IGMP or MLD interface level operational state 351 attributes applied to interfaces whose interface level attributes do 352 not exist, with same attributes' value for those interfaces 354 Interface-specific: IGMP or MLD operational state attributes 355 specific to the given interface. 357 augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol: 358 +--ro igmp 359 +--ro global 360 | +--ro enable? boolean {global-admin-enable}? 361 | +--ro max-entries? uint32 {global-max-entries}? 362 | +--ro max-groups? uint32 {global-max-groups}? 363 | +--ro entries-count? uint32 364 | +--ro groups-count? uint32 365 | +--ro statistics 366 | +--ro discontinuity-time? yang:date-and-time 367 | +--ro error 368 | | +--ro total? yang:counter64 369 | | +--ro query? yang:counter64 370 | | +--ro report? yang:counter64 371 | | +--ro leave? yang:counter64 372 | | +--ro checksum? yang:counter64 373 | | +--ro too-short? yang:counter64 374 | +--ro received 375 | | +--ro total? yang:counter64 376 | | +--ro query? yang:counter64 377 | | +--ro report? yang:counter64 378 | | +--ro leave? yang:counter64 379 | +--ro sent 380 | +--ro total? yang:counter64 381 | +--ro query? yang:counter64 382 | +--ro report? yang:counter64 383 | +--ro leave? yang:counter64 384 +--ro interfaces 385 +--ro (last-member-query-interval)? 386 | +--:(last-member-query-interval-basic) 387 | | +--ro last-member-query-interval-basic? uint16 388 | +--:(last-member-query-interval-extended) 389 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 390 +--ro max-groups-per-interface? uint32 {intf-max-groups}? 391 +--ro (query-interval)? 392 | +--:(query-interval-basic) 393 | | +--ro query-interval-basic? uint16 394 | +--:(query-interval-extended) 395 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 396 +--ro (query-max-response-time)? 397 | +--:(query-max-response-time-basic) 398 | | +--ro query-max-response-time-basic? uint16 399 | +--:(query-max-response-time-extended) 400 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 401 +--ro require-router-alert? boolean {intf-require-router-alert}? 402 +--ro (robustness-variable)? 403 | +--:(robustness-variable-basic) 404 | | +--ro robustness-variable-basic? uint8 405 | +--:(robustness-variable-extended) 406 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 407 +--ro version? uint8 408 +--ro interface* [interface-name] 409 +--ro interface-name if:interface-ref 410 +--ro enable? boolean {intf-admin-enable}? 411 +--ro group-policy? string 412 +--ro immediate-leave? empty {intf-immediate-leave}? 413 +--ro (last-member-query-interval)? 414 | +--:(last-member-query-interval-basic) 415 | | +--ro last-member-query-interval-basic? uint16 416 | +--:(last-member-query-interval-extended) 417 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 418 +--ro max-groups? uint32 {intf-max-groups}? 419 +--ro max-group-sources? uint32 {intf-max-group-sources}? 420 +--ro (query-interval)? 421 | +--:(query-interval-basic) 422 | | +--ro query-interval-basic? uint16 423 | +--:(query-interval-extended) 424 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 425 +--ro (query-max-response-time)? 426 | +--:(query-max-response-time-basic) 427 | | +--ro query-max-response-time-basic? uint16 428 | +--:(query-max-response-time-extended) 429 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 430 +--ro require-router-alert? boolean {intf-require-router-alert}? 431 +--ro (robustness-variable)? 432 | +--:(robustness-variable-basic) 433 | | +--ro robustness-variable-basic? uint8 434 | +--:(robustness-variable-extended) 435 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 436 +--ro source-policy? string {intf-source-policy}? 437 +--ro verify-source-subnet? empty {intf-verify-source-subnet}? 438 +--ro version? uint8 439 +--ro join-group* inet:ipv4-address {intf-join-group}? 440 +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? 441 | +--ro source-addr ssm-map-ipv4-addr-type 442 | +--ro group-policy string 443 +--ro static-group* [group source-addr] {intf-static-group}? 444 | +--ro group inet:ipv4-address 445 | +--ro source-addr source-ipv4-addr-type 446 +--ro oper-status? enumeration 447 +--ro querier? inet:ipv4-address 448 +--ro joined-group* inet:ipv4-address {intf-join-group}? 449 +--ro group* [address] 450 +--ro address inet:ipv4-address 451 +--ro expire? uint32 452 +--ro filter-mode? enumeration 453 +--ro host-count? uint32 454 +--ro up-time? uint32 455 +--ro host* inet:ipv4-address 456 +--ro last-reporter? inet:ipv4-address 457 +--ro source* [address] 458 +--ro address inet:ipv4-address 459 +--ro expire? uint32 460 +--ro up-time? uint32 461 +--ro last-reporter? inet:ipv4-address 462 augment /rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol: 463 +--ro mld 464 +--ro global 465 | +--ro enable? boolean {global-admin-enable}? 466 | +--ro max-entries? uint32 {global-max-entries}? 467 | +--ro max-groups? uint32 {global-max-groups}? 468 | +--ro entries-count? uint32 469 | +--ro groups-count? uint32 470 | +--ro statistics 471 | +--ro discontinuity-time? yang:date-and-time 472 | +--ro error 473 | | +--ro total? yang:counter64 474 | | +--ro query? yang:counter64 475 | | +--ro report? yang:counter64 476 | | +--ro leave? yang:counter64 477 | | +--ro checksum? yang:counter64 478 | | +--ro too-short? yang:counter64 479 | +--ro received 480 | | +--ro total? yang:counter64 481 | | +--ro query? yang:counter64 482 | | +--ro report? yang:counter64 483 | | +--ro leave? yang:counter64 484 | +--ro sent 485 | +--ro total? yang:counter64 486 | +--ro query? yang:counter64 487 | +--ro report? yang:counter64 488 | +--ro leave? yang:counter64 489 +--ro interfaces 490 +--ro (last-member-query-interval)? 491 | +--:(last-member-query-interval-basic) 492 | | +--ro last-member-query-interval-basic? uint16 493 | +--:(last-member-query-interval-extended) 494 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 495 +--ro max-groups-per-interface? uint32 {intf-max-groups}? 496 +--ro (query-interval)? 497 | +--:(query-interval-basic) 498 | | +--ro query-interval-basic? uint16 499 | +--:(query-interval-extended) 500 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 501 +--ro (query-max-response-time)? 502 | +--:(query-max-response-time-basic) 503 | | +--ro query-max-response-time-basic? uint16 504 | +--:(query-max-response-time-extended) 505 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 506 +--ro require-router-alert? boolean {intf-require-router-alert}? 507 +--ro (robustness-variable)? 508 | +--:(robustness-variable-basic) 509 | | +--ro robustness-variable-basic? uint8 510 | +--:(robustness-variable-extended) 511 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 512 +--ro version? uint8 513 +--ro interface* [interface-name] 514 +--ro interface-name if:interface-ref 515 +--ro enable? boolean {intf-admin-enable}? 516 +--ro group-policy? string 517 +--ro immediate-leave? empty {intf-immediate-leave}? 518 +--ro (last-member-query-interval)? 519 | +--:(last-member-query-interval-basic) 520 | | +--ro last-member-query-interval-basic? uint16 521 | +--:(last-member-query-interval-extended) 522 | +--ro last-member-query-interval-extended? uint16 {intf-last-member-query-interval-extended}? 523 +--ro max-groups? uint32 {intf-max-groups}? 524 +--ro max-group-sources? uint32 {intf-max-group-sources}? 525 +--ro (query-interval)? 526 | +--:(query-interval-basic) 527 | | +--ro query-interval-basic? uint16 528 | +--:(query-interval-extended) 529 | +--ro query-interval-extended? uint16 {intf-query-interval-extended}? 530 +--ro (query-max-response-time)? 531 | +--:(query-max-response-time-basic) 532 | | +--ro query-max-response-time-basic? uint16 533 | +--:(query-max-response-time-extended) 534 | +--ro query-max-response-time-extended? uint16 {intf-query-max-response-time-extended}? 535 +--ro require-router-alert? boolean {intf-require-router-alert}? 536 +--ro (robustness-variable)? 537 | +--:(robustness-variable-basic) 538 | | +--ro robustness-variable-basic? uint8 539 | +--:(robustness-variable-extended) 540 | +--ro robustness-variable-extended? uint8 {intf-robustness-variable-extended}? 541 +--ro source-policy? string {intf-source-policy}? 542 +--ro verify-source-subnet? empty {intf-verify-source-subnet}? 543 +--ro version? uint8 544 +--ro join-group* inet:ipv6-address {intf-join-group}? 545 +--ro ssm-map* [source-addr group-policy] {intf-ssm-map}? 546 | +--ro source-addr ssm-map-ipv6-addr-type 547 | +--ro group-policy string 548 +--ro static-group* [group source-addr] {intf-static-group}? 549 | +--ro group inet:ipv6-address 550 | +--ro source-addr source-ipv6-addr-type 551 +--ro oper-status? enumeration 552 +--ro querier? inet:ipv6-address 553 +--ro joined-group* inet:ipv6-address {intf-join-group}? 554 +--ro group* [address] 555 +--ro address inet:ipv6-address 556 +--ro expire? uint32 557 +--ro filter-mode? enumeration 558 +--ro host-count? uint32 559 +--ro up-time? uint32 560 +--ro host* inet:ipv6-address 561 +--ro last-reporter? inet:ipv6-address 562 +--ro source* [address] 563 +--ro address inet:ipv6-address 564 +--ro expire? uint32 565 +--ro up-time? uint32 566 +--ro last-reporter? inet:ipv6-address 568 3.3. IGMP and MLD RPC 570 rpcs: 572 +---x clear-igmp-groups {rpc-clear-groups}? 574 | +---w input 576 | +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/igmp/interfaces/interface/interface-name 578 | +---w group? inet:ipv4-address 580 | +---w source? inet:ipv4-address 582 +---x clear-mld-groups {rpc-clear-groups}? 583 +---w input 585 +---w interface? -> /rt:routing/control-plane-protocols/control-plane-protocol/mld/interfaces/interface/interface-name 587 +---w group? inet:ipv6-address 589 +---w source? inet:ipv6-address 591 4. IGMP and MLD YANG Modules 593 file "ietf-igmp-mld@2017-03-13.yang" 594 module ietf-igmp-mld { 595 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld"; 596 // replace with IANA namespace when assigned 597 prefix igmp-mld; 599 import ietf-inet-types { 600 prefix "inet"; 601 } 603 import ietf-yang-types { 604 prefix "yang"; 605 } 607 import ietf-routing { 608 prefix "rt"; 609 } 611 import ietf-interfaces { 612 prefix "if"; 613 } 615 import ietf-ip { 616 prefix ip; 617 } 619 organization 620 "IETF PIM Working Group"; 622 contact 623 "WG Web: 624 WG List: 626 WG Chair: Stig Venaas 627 629 WG Chair: Mike McBride 630 632 Editor: Xufeng Liu 633 635 Editor: Feng Guo 636 638 Editor: Mahesh Sivakumar 639 641 Editor: Pete McAllister 642 644 Editor: Anish Peter 645 "; 647 description 648 "The module defines a collection of YANG definitions common for 649 IGMP and MLD."; 651 revision 2017-03-13 { 652 description 653 "Initial revision."; 654 reference 655 "RFC XXXX: A YANG Data Model for IGMP and MLD"; 656 } 658 /* 659 * Features 660 */ 661 feature global-admin-enable { 662 description 663 "Support global configuration to enable or disable protocol."; 664 } 666 feature global-interface-config { 667 description 668 "Support global configuration applied for all interfaces."; 669 } 671 feature global-max-entries { 672 description 673 "Support configuration of global max-entries."; 674 } 676 feature global-max-groups { 677 description 678 "Support configuration of global max-groups."; 679 } 681 feature intf-admin-enable { 682 description 683 "Support configuration of interface administrative enabling."; 684 } 686 feature intf-last-member-query-interval-extended { 687 description 688 "Support configuration of interface last member query interval 689 different value range."; 690 } 692 feature intf-query-interval-extended { 693 description 694 "Support configuration of interface query interval 695 different value range."; 696 } 698 feature intf-query-max-response-time-extended { 699 description 700 "Support configuration of interface query max response time 701 different value range."; 702 } 704 feature intf-robustness-variable-extended { 705 description 706 "Support configuration of interface robustness-variable 707 different value range."; 708 } 710 feature intf-immediate-leave { 711 description 712 "Support configuration of interface immediate-leave."; 713 } 715 feature intf-join-group { 716 description 717 "Support configuration of interface join-group."; 718 } 720 feature intf-max-groups { 721 description 722 "Support configuration of interface max-groups."; 723 } 725 feature intf-max-group-sources { 726 description 727 "Support configuration of interface max-group-sources."; 728 } 730 feature intf-require-router-alert { 731 description 732 "Support configuration of interface require-router-alert."; 733 } 735 feature intf-source-policy { 736 description 737 "Support configuration of interface source policy."; 738 } 740 feature intf-ssm-map { 741 description 742 "Support configuration of interface ssm-map."; 743 } 745 feature intf-static-group { 746 description 747 "Support configuration of interface static-group."; 748 } 750 feature intf-verify-source-subnet { 751 description 752 "Support configuration of interface verify-source-subnet."; 753 } 755 feature per-interface-config { 756 description 757 "Support per interface configuration."; 758 } 760 feature rpc-clear-groups { 761 description 762 "Support rpc's to clear groups."; 763 } 765 /* 766 * Typedefs 767 */ 768 typedef ssm-map-ipv4-addr-type { 769 type union { 770 type enumeration { 771 enum 'policy' { 772 description 773 "Source address is specified in SSM map policy."; 774 } 776 } 777 type inet:ipv4-address; 778 } 779 description 780 "Multicast source IP address type for SSM map."; 781 } // source-ipv4-addr-type 783 typedef ssm-map-ipv6-addr-type { 784 type union { 785 type enumeration { 786 enum 'policy' { 787 description 788 "Source address is specified in SSM map policy."; 789 } 790 } 791 type inet:ipv6-address; 792 } 793 description 794 "Multicast source IP address type for SSM map."; 795 } // source-ipv6-addr-type 797 typedef source-ipv4-addr-type { 798 type union { 799 type enumeration { 800 enum '*' { 801 description 802 "Any source address."; 803 } 804 } 805 type inet:ipv4-address; 806 } 807 description 808 "Multicast source IP address type."; 809 } // source-ipv4-addr-type 811 typedef source-ipv6-addr-type { 812 type union { 813 type enumeration { 814 enum '*' { 815 description 816 "Any source address."; 817 } 818 } 819 type inet:ipv6-address; 820 } 821 description 822 "Multicast source IP address type."; 823 } // source-ipv6-addr-type 824 /* 825 * Identities 826 */ 828 /* 829 * Groupings 830 */ 831 grouping global-config-attributes { 832 description "Global IGMP and MLD configuration."; 834 leaf enable { 835 if-feature global-admin-enable; 836 type boolean; 837 description 838 "true to enable IGMP in the routing instance; 839 false to disable IGMP in the routing instance."; 840 } 842 leaf max-entries { 843 if-feature global-max-entries; 844 type uint32; 845 description 846 "The maximum number of entries in IGMP."; 847 } 848 leaf max-groups { 849 if-feature global-max-groups; 850 type uint32; 851 description 852 "The maximum number of groups that IGMP can join."; 853 } 854 } // global-config-attributes 856 grouping global-state-attributes { 857 description "Global IGMP and MLD state attributes."; 859 leaf entries-count { 860 type uint32; 861 description 862 "The number of entries in IGMP."; 863 } 864 leaf groups-count { 865 type uint32; 866 description 867 "The number of groups that IGMP can join."; 868 } 870 container statistics { 871 description "Global statistics."; 872 leaf discontinuity-time { 873 type yang:date-and-time; 874 description 875 "The time on the most recent occasion at which any one 876 or more of the statistic counters suffered a 877 discontinuity. If no such discontinuities have occurred 878 since the last re-initialization of the local 879 management subsystem, then this node contains the time 880 the local management subsystem re-initialized itself."; 881 } 883 container error { 884 description "Statistics of errors."; 885 uses global-statistics-error; 886 } 888 container received { 889 description "Statistics of received messages."; 890 uses global-statistics-sent-received; 891 } 892 container sent { 893 description "Statistics of sent messages."; 894 uses global-statistics-sent-received; 895 } 896 } // statistics 897 } // global-state-attributes 899 grouping global-statistics-error { 900 description 901 "A grouping defining statistics attributes for errors."; 902 uses global-statistics-sent-received; 903 leaf checksum { 904 type yang:counter64; 905 description 906 "The number of checksum errors."; 907 } 908 leaf too-short { 909 type yang:counter64; 910 description 911 "The number of messages that are too short."; 912 } 913 } // global-statistics-error 915 grouping global-statistics-sent-received { 916 description 917 "A grouping defining statistics attributes."; 918 leaf total { 919 type yang:counter64; 920 description 921 "The number of total messages."; 922 } 923 leaf query { 924 type yang:counter64; 925 description 926 "The number of query messages."; 927 } 928 leaf report { 929 type yang:counter64; 930 description 931 "The number of report messages."; 932 } 933 leaf leave { 934 type yang:counter64; 935 description 936 "The number of leave messages."; 937 } 938 } // global-statistics-sent-received 940 grouping interfaces-config-attributes { 941 description 942 "Configuration attributes applied to interfaces whose 943 per interface attributes are not existing."; 945 choice last-member-query-interval { 946 description 947 "Different vendors can restrict different range to the 948 Last Member Query Interval parameter."; 950 leaf last-member-query-interval-basic { 951 type uint16 { 952 range "1..65535"; 953 } 954 units seconds; 955 default 1; 956 description 957 "Last Member Query Interval, which may be tuned to modify the 958 leave latency of the network."; 959 reference "RFC3376. Sec. 8.8."; 960 } 961 leaf last-member-query-interval-extended { 962 if-feature intf-last-member-query-interval-extended; 963 type uint16; 964 units seconds; 965 default 1; 966 description 967 "Last Member Query Interval, which may be tuned to modify the 968 leave latency of the network."; 969 reference "RFC3376. Sec. 8.8."; 971 } 972 } 973 leaf max-groups-per-interface { 974 if-feature intf-max-groups; 975 type uint32; 976 description 977 "The maximum number of groups that IGMP can join."; 978 } 979 choice query-interval { 980 description 981 "Different vendors can restrict different range to the 982 Query Interval parameter."; 984 leaf query-interval-basic { 985 type uint16 { 986 range "1..31744"; 987 } 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 "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 994 } 995 leaf query-interval-extended { 996 if-feature intf-query-interval-extended; 997 type uint16; 998 units seconds; 999 default 125; 1000 description 1001 "The Query Interval is the interval between General Queries 1002 sent by the Querier."; 1003 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1004 } 1005 } 1006 choice query-max-response-time { 1007 description 1008 "Different vendors can restrict different range to the 1009 Query maximum response time parameter."; 1011 leaf query-max-response-time-basic { 1012 type uint16 { 1013 range "1..65535"; 1014 } 1015 units seconds; 1016 default 10; 1017 description 1018 "Query maximum response time specifies the maximum time 1019 allowed before sending a responding report."; 1021 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1022 } 1023 leaf query-max-response-time-extended { 1024 if-feature intf-query-max-response-time-extended; 1025 type uint16; 1026 units seconds; 1027 default 10; 1028 description 1029 "Query maximum response time specifies the maximum time 1030 allowed before sending a responding report."; 1031 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1032 } 1033 } 1034 leaf require-router-alert { 1035 if-feature intf-require-router-alert; 1036 type boolean; 1037 default false; 1038 description 1039 "Protocol packets should contain router alert IP option."; 1040 } 1041 choice robustness-variable { 1042 description 1043 "Different vendors can restrict different range to the 1044 Robustness Variable parameter."; 1046 leaf robustness-variable-basic { 1047 type uint8 { 1048 range "2..7"; 1049 } 1050 default 2; 1051 description 1052 "Querier's Robustness Variable allows tuning for the expected 1053 packet loss on a network."; 1054 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1055 } 1056 leaf robustness-variable-extended { 1057 if-feature intf-robustness-variable-extended; 1058 type uint8; 1059 default 2; 1060 description 1061 "Querier's Robustness Variable allows tuning for the expected 1062 packet loss on a network."; 1063 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1064 } 1065 } 1066 leaf version { 1067 type uint8 { 1068 range "1..3"; 1069 } 1070 description "IGMP version."; 1071 reference "RFC1112, RFC2236, RFC3376."; 1072 } 1073 } // interfaces-config-attributes 1075 grouping interface-config-attributes-igmp { 1076 description "Per interface igmp configuration for IGMP."; 1078 uses interface-config-attributes-igmp-mld; 1080 leaf-list join-group { 1081 if-feature intf-join-group; 1082 type inet:ipv4-address; 1083 description 1084 "The router joins this multicast group on the interface."; 1085 } 1087 list ssm-map { 1088 if-feature intf-ssm-map; 1089 key "source-addr group-policy"; 1090 description "The policy for (*,G) mapping to (S,G)."; 1091 leaf source-addr { 1092 type ssm-map-ipv4-addr-type; 1093 description 1094 "Multicast source IP address."; 1095 } 1096 leaf group-policy { 1097 type string; 1098 description 1099 "Name of the access policy used to filter IGMP 1100 membership.A device MAY restrict the length 1101 and value of this name, possibly space and special 1102 characters are not allowed."; 1103 } 1104 } 1106 list static-group { 1107 if-feature intf-static-group; 1108 key "group source-addr"; 1109 description 1110 "A static multicast route, (*,G) or (S,G)."; 1112 leaf group { 1113 type inet:ipv4-address; 1114 description 1115 "Multicast group IP address."; 1116 } 1117 leaf source-addr { 1118 type source-ipv4-addr-type; 1119 description 1120 "Multicast source IP address."; 1121 } 1122 } 1123 } // interface-config-attributes-igmp 1125 grouping interface-config-attributes-igmp-mld { 1126 description 1127 "Per interface configuration for both IGMP and MLD."; 1129 leaf enable { 1130 if-feature intf-admin-enable; 1131 type boolean; 1132 default false; 1133 description 1134 "true to enable IGMP on the interface; 1135 false to disable IGMP on the interface."; 1136 } 1137 leaf group-policy { 1138 type string; 1139 description 1140 "Name of the access policy used to filter IGMP 1141 membership.A device MAY restrict the length 1142 and value of this name, possibly space and special 1143 characters are not allowed."; 1144 } 1145 leaf immediate-leave { 1146 if-feature intf-immediate-leave; 1147 type empty; 1148 description 1149 "If present, IGMP perform an immediate leave upon receiving an 1150 IGMP Version 2 (IGMPv2) leave message. 1151 If the router is IGMP-enabled, it sends an IGMP last member 1152 query with a last member query response time. However, the 1153 router does not wait for the response time before it prunes 1154 off the group."; 1155 } 1156 choice last-member-query-interval { 1157 description 1158 "Different vendors can restrict different range to the 1159 Last Member Query Interval parameter."; 1161 leaf last-member-query-interval-basic { 1162 type uint16 { 1163 range "1..65535"; 1164 } 1165 units seconds; 1166 default 1; 1167 description 1168 "Last Member Query Interval, which may be tuned to modify the 1169 leave latency of the network."; 1170 reference "RFC3376. Sec. 8.8."; 1171 } 1172 leaf last-member-query-interval-extended { 1173 if-feature intf-last-member-query-interval-extended; 1174 type uint16; 1175 units seconds; 1176 default 1; 1177 description 1178 "Last Member Query Interval, which may be tuned to modify the 1179 leave latency of the network."; 1180 reference "RFC3376. Sec. 8.8."; 1181 } 1182 } 1183 leaf max-groups { 1184 if-feature intf-max-groups; 1185 type uint32; 1186 description 1187 "The maximum number of groups that IGMP can join."; 1188 } 1189 leaf max-group-sources { 1190 if-feature intf-max-group-sources; 1191 type uint32; 1192 description 1193 "The maximum number of group sources."; 1194 } 1195 choice query-interval { 1196 description 1197 "Different vendors can restrict different range to the 1198 Query Interval parameter."; 1200 leaf query-interval-basic { 1201 type uint16 { 1202 range "1..31744"; 1203 } 1204 units seconds; 1205 default 125; 1206 description 1207 "The Query Interval is the interval between General Queries 1208 sent by the Querier."; 1209 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1210 } 1211 leaf query-interval-extended { 1212 if-feature intf-query-interval-extended; 1213 type uint16; 1214 units seconds; 1215 default 125; 1216 description 1217 "The Query Interval is the interval between General Queries 1218 sent by the Querier."; 1219 reference "RFC3376. Sec. 4.1.7, 8.2, 8.14.2."; 1220 } 1221 } 1222 choice query-max-response-time { 1223 description 1224 "Different vendors can restrict different range to the 1225 Query maximum response time parameter."; 1227 leaf query-max-response-time-basic { 1228 type uint16 { 1229 range "1..65535"; 1230 } 1231 units seconds; 1232 default 10; 1233 description 1234 "Query maximum response time specifies the maximum time 1235 allowed before sending a responding report."; 1236 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1237 } 1238 leaf query-max-response-time-extended { 1239 if-feature intf-query-max-response-time-extended; 1240 type uint16; 1241 units seconds; 1242 default 10; 1243 description 1244 "Query maximum response time specifies the maximum time 1245 allowed before sending a responding report."; 1246 reference "RFC3376. Sec. 4.1.1, 8.3, 8.14.3."; 1247 } 1248 } 1249 leaf require-router-alert { 1250 if-feature intf-require-router-alert; 1251 type boolean; 1252 description 1253 "Protocol packets should contain router alert IP option."; 1254 } 1255 choice robustness-variable { 1256 description 1257 "Different vendors can restrict different range to the 1258 Robustness Variable parameter."; 1260 leaf robustness-variable-basic { 1261 type uint8 { 1262 range "2..7"; 1263 } 1264 default 2; 1265 description 1266 "Querier's Robustness Variable allows tuning for the expected 1267 packet loss on a network."; 1268 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1269 } 1270 leaf robustness-variable-extended { 1271 if-feature intf-robustness-variable-extended; 1272 type uint8; 1273 default 2; 1274 description 1275 "Querier's Robustness Variable allows tuning for the expected 1276 packet loss on a network."; 1277 reference "RFC3376. Sec. 4.1.6, 8.1, 8.14.1."; 1278 } 1279 } 1280 leaf source-policy { 1281 if-feature intf-source-policy; 1282 type string; 1283 description 1284 "Name of the access policy used to filter sources. 1285 A device MAY restrict the length 1286 and value of this name, possibly space and special 1287 characters are not allowed."; 1288 } 1289 leaf verify-source-subnet { 1290 if-feature intf-verify-source-subnet; 1291 type empty; 1292 description 1293 "If present, the interface accepts packets with matching 1294 source IP subnet only."; 1295 } 1296 leaf version { 1297 type uint8 { 1298 range "1..3"; 1299 } 1300 description "IGMP version."; 1301 reference "RFC1112, RFC2236, RFC3376."; 1302 } 1303 } // interface-config-attributes-igmp-mld 1305 grouping interface-config-attributes-mld { 1306 description "Per interface mld configuration for MLD."; 1308 uses interface-config-attributes-igmp-mld; 1310 leaf-list join-group { 1311 if-feature intf-join-group; 1312 type inet:ipv6-address; 1313 description 1314 "The router joins this multicast group on the interface."; 1316 } 1318 list ssm-map { 1319 if-feature intf-ssm-map; 1320 key "source-addr group-policy"; 1321 description "The policy for (*,G) mapping to (S,G)."; 1322 leaf source-addr { 1323 type ssm-map-ipv6-addr-type; 1324 description 1325 "Multicast source IPv6 address."; 1326 } 1327 leaf group-policy { 1328 type string; 1329 description 1330 "Name of the access policy used to filter MLD 1331 membership.A device MAY restrict the length 1332 and value of this name, possibly space and special 1333 characters are not allowed."; 1334 } 1335 } 1337 list static-group { 1338 if-feature intf-static-group; 1339 key "group source-addr"; 1340 description 1341 "A static multicast route, (*,G) or (S,G)."; 1343 leaf group { 1344 type inet:ipv6-address; 1345 description 1346 "Multicast group IPv6 address."; 1347 } 1348 leaf source-addr { 1349 type source-ipv6-addr-type; 1350 description 1351 "Multicast source IPv6 address."; 1352 } 1353 } 1354 } // interface-config-attributes-mld 1356 grouping interface-state-attributes-igmp { 1357 description 1358 "Per interface state attributes for IGMP."; 1360 uses interface-state-attributes-igmp-mld; 1362 leaf querier { 1363 type inet:ipv4-address; 1364 description "The querier address in the subnet"; 1366 } 1367 leaf-list joined-group { 1368 if-feature intf-join-group; 1369 type inet:ipv4-address; 1370 description 1371 "The routers that joined this multicast group."; 1372 } 1374 list group { 1375 key "address"; 1376 description 1377 "Multicast group membership information 1378 that joined on the interface."; 1380 leaf address { 1381 type inet:ipv4-address; 1382 description 1383 "Multicast group address."; 1384 } 1385 uses interface-state-group-attributes-igmp-mld; 1386 leaf-list host { 1387 type inet:ipv4-address; 1388 description 1389 "List of host address that 1390 joined the multicast group"; 1391 } 1392 leaf last-reporter { 1393 type inet:ipv4-address; 1394 description 1395 "The last host address which has sent the 1396 report to join the multicast group."; 1397 } 1398 list source { 1399 key "address"; 1400 description 1401 "List of multicast source information 1402 of the multicast group."; 1404 leaf address { 1405 type inet:ipv4-address; 1406 description 1407 "Multicast source address"; 1408 } 1409 uses interface-state-source-attributes-igmp-mld; 1410 leaf last-reporter { 1411 type inet:ipv4-address; 1412 description 1413 "The last host address which has sent the 1414 report to join the multicast source and group."; 1416 } 1417 } // list source 1418 } // list group 1419 } // interface-state-attributes-igmp 1421 grouping interface-state-attributes-igmp-mld { 1422 description 1423 "Per interface state attributes for both IGMP and MLD."; 1425 leaf oper-status { 1426 type enumeration { 1427 enum up { 1428 description 1429 "Ready to pass packets."; 1430 } 1431 enum down { 1432 description 1433 "The interface does not pass any packets."; 1434 } 1435 } 1436 description 1437 "interface up or down state for IGMP or MLD protocol"; 1438 } 1439 } // interface-config-attributes-igmp-mld 1441 grouping interface-state-attributes-mld { 1442 description 1443 "Per interface state attributes for MLD."; 1445 uses interface-state-attributes-igmp-mld; 1447 leaf querier { 1448 type inet:ipv6-address; 1449 description 1450 "The querier address in the subnet."; 1451 } 1452 leaf-list joined-group { 1453 if-feature intf-join-group; 1454 type inet:ipv6-address; 1455 description 1456 "The routers that joined this multicast group."; 1457 } 1459 list group { 1460 key "address"; 1461 description 1462 "Multicast group membership information 1463 that joined on the interface."; 1465 leaf address { 1466 type inet:ipv6-address; 1467 description 1468 "Multicast group address."; 1469 } 1470 uses interface-state-group-attributes-igmp-mld; 1471 leaf-list host { 1472 type inet:ipv6-address; 1473 description 1474 "List of host address that 1475 joined the multicast group"; 1476 } 1477 leaf last-reporter { 1478 type inet:ipv6-address; 1479 description 1480 "The last host address which has sent the 1481 report to join the multicast group."; 1482 } 1483 list source { 1484 key "address"; 1485 description 1486 "List of multicast source information 1487 of the multicast group."; 1489 leaf address { 1490 type inet:ipv6-address; 1491 description 1492 "Multicast source address"; 1493 } 1494 uses interface-state-source-attributes-igmp-mld; 1495 leaf last-reporter { 1496 type inet:ipv6-address; 1497 description 1498 "The last host address which has sent the 1499 report to join the multicast source and group."; 1500 } 1501 } // list source 1502 } // list group 1503 } // interface-state-attributes-mld 1505 grouping interface-state-group-attributes-igmp-mld { 1506 description 1507 "Per interface state attributes for both IGMP and MLD 1508 groups."; 1510 leaf expire { 1511 type uint32; 1512 units seconds; 1513 description 1514 "The time left before multicast group timeout."; 1515 } 1516 leaf filter-mode { 1517 type enumeration { 1518 enum "include" { 1519 description 1520 "In include mode, reception of packets sent 1521 to the specified multicast address is requested 1522 only from those IP source addresses listed in the 1523 source-list parameter"; 1524 } 1525 enum "exclude" { 1526 description 1527 "In exclude mode, reception of packets sent 1528 to the given multicast address is requested 1529 from all IP source addresses except those 1530 listed in the source-list parameter."; 1531 } 1532 } 1533 description 1534 "Filter mode for a multicast group, 1535 may be either include or exclude."; 1536 } 1537 leaf host-count { 1538 type uint32; 1539 description 1540 "The number of host address."; 1541 } 1542 leaf up-time { 1543 type uint32; 1544 units seconds; 1545 description 1546 "The time after the device created multicast group record."; 1547 } 1548 } // interface-state-group-attributes-igmp-mld 1550 grouping interface-state-source-attributes-igmp-mld { 1551 description 1552 "Per interface state attributes for both IGMP and MLD 1553 groups."; 1555 leaf expire { 1556 type uint32; 1557 units seconds; 1558 description 1559 "The time left before multicast group timeout."; 1560 } 1561 leaf up-time { 1562 type uint32; 1563 units seconds; 1564 description 1565 "The time after the device created multicast group record."; 1566 } 1567 } // interface-state-source-attributes-igmp-mld 1569 /* 1570 * Configuration data nodes 1571 */ 1572 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1573 { 1574 description 1575 "IGMP augmentation to routing control plane protocol configuration."; 1577 container igmp { 1578 description 1579 "IGMP configuration data."; 1581 container global { 1582 description 1583 "Global attributes."; 1584 uses global-config-attributes; 1585 } 1587 container interfaces { 1588 description 1589 "Containing a list of interfaces."; 1591 uses interfaces-config-attributes { 1592 if-feature global-interface-config; 1593 } 1595 list interface { 1596 key "interface-name"; 1597 description 1598 "List of IGMP interfaces."; 1599 leaf interface-name { 1600 type if:interface-ref; 1601 must "/if:interfaces/if:interface[if:name = current()]/" 1602 + "ip:ipv4" { 1603 description 1604 "The interface must have IPv4 enabled."; 1605 } 1606 description 1607 "Reference to an entry in the global interface 1608 list."; 1609 } 1610 uses interface-config-attributes-igmp { 1611 if-feature per-interface-config; 1613 } 1614 } // interface 1615 } // interfaces 1616 } // igmp 1617 }//augment 1619 augment "/rt:routing/rt:control-plane-protocols/rt:control-plane-protocol" 1620 { 1621 description 1622 "MLD augmentation to routing control plane protocol configuration."; 1624 container mld { 1625 description 1626 "MLD configuration data."; 1628 container global { 1629 description 1630 "Global attributes."; 1631 uses global-config-attributes; 1632 } 1634 container interfaces { 1635 description 1636 "Containing a list of interfaces."; 1638 uses interfaces-config-attributes { 1639 if-feature global-interface-config; 1640 } 1642 list interface { 1643 key "interface-name"; 1644 description 1645 "List of MLD interfaces."; 1646 leaf interface-name { 1647 type if:interface-ref; 1648 must "/if:interfaces/if:interface[if:name = current()]/" 1649 + "ip:ipv6" { 1650 description 1651 "The interface must have IPv6 enabled."; 1652 } 1653 description 1654 "Reference to an entry in the global interface 1655 list."; 1656 } 1657 uses interface-config-attributes-mld { 1658 if-feature per-interface-config; 1659 } 1660 } // interface 1661 } // interfaces 1663 } // mld 1664 } // augment 1666 /* 1667 * Operational state data nodes 1668 */ 1669 augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol" 1670 { 1671 description 1672 "IGMP augmentation to routing control plane protocol state."; 1674 container igmp { 1675 description 1676 "IGMP configuration data."; 1678 container global { 1679 description 1680 "Global attributes."; 1681 uses global-config-attributes; 1682 uses global-state-attributes; 1683 } 1685 container interfaces { 1686 description 1687 "Containing a list of interfaces."; 1689 uses interfaces-config-attributes { 1690 if-feature global-interface-config; 1691 } 1693 list interface { 1694 key "interface-name"; 1695 description 1696 "List of IGMP interfaces."; 1697 leaf interface-name { 1698 type if:interface-ref; 1699 must "/if:interfaces/if:interface[if:name = current()]/" 1700 + "ip:ipv4" { 1701 description 1702 "The interface must have IPv4 enabled."; 1703 } 1704 description 1705 "Reference to an entry in the global interface 1706 list."; 1707 } 1708 uses interface-config-attributes-igmp { 1709 if-feature per-interface-config; 1710 } 1711 uses interface-state-attributes-igmp; 1713 } // interface 1714 } // interfaces 1715 } // igmp 1716 }//augment 1718 augment "/rt:routing-state/rt:control-plane-protocols/rt:control-plane-protocol" 1719 { 1720 description 1721 "MLD augmentation to routing control plane protocol state."; 1723 container mld { 1724 description 1725 "MLD configuration data."; 1727 container global { 1728 description 1729 "Global attributes."; 1730 uses global-config-attributes; 1731 uses global-state-attributes; 1732 } 1734 container interfaces { 1735 description 1736 "Containing a list of interfaces."; 1738 uses interfaces-config-attributes { 1739 if-feature global-interface-config; 1740 } 1742 list interface { 1743 key "interface-name"; 1744 description 1745 "List of MLD interfaces."; 1746 leaf interface-name { 1747 type if:interface-ref; 1748 must "/if:interfaces/if:interface[if:name = current()]/" 1749 + "ip:ipv6" { 1750 description 1751 "The interface must have IPv6 enabled."; 1752 } 1753 description 1754 "Reference to an entry in the global interface 1755 list."; 1756 } 1757 uses interface-config-attributes-mld { 1758 if-feature per-interface-config; 1759 } 1760 uses interface-state-attributes-mld; 1761 } // interface 1763 } // interfaces 1764 } // mld 1765 } // augment 1767 /* 1768 * RPCs 1769 */ 1770 rpc clear-igmp-groups { 1771 if-feature rpc-clear-groups; 1772 description 1773 "Clears the specified IGMP cache tables."; 1775 input { 1776 leaf interface { 1777 type leafref { 1778 path "/rt:routing/rt:control-plane-protocols" 1779 + "/rt:control-plane-protocol/" 1780 + "igmp/interfaces/interface/" 1781 + "interface-name"; 1782 } 1783 description 1784 "Name of the IGMP interface. 1785 If it is not specified, groups from all interfaces are 1786 cleared."; 1787 } 1788 leaf group { 1789 type inet:ipv4-address; 1790 description 1791 "Multicast group IPv4 address. 1792 If it is not specified, all IGMP group tables are 1793 cleared."; 1794 } 1795 leaf source { 1796 type inet:ipv4-address; 1797 description 1798 "Multicast source IPv4 address. 1799 If it is not specified, all IGMP source-group tables are 1800 cleared."; 1801 } 1802 } 1803 } // rpc clear-igmp-groups 1805 rpc clear-mld-groups { 1806 if-feature rpc-clear-groups; 1807 description 1808 "Clears the specified MLD cache tables."; 1810 input { 1811 leaf interface { 1812 type leafref { 1813 path "/rt:routing/rt:control-plane-protocols" 1814 + "/rt:control-plane-protocol/" 1815 + "mld/interfaces/interface/" 1816 + "interface-name"; 1817 } 1818 description 1819 "Name of the MLD interface. 1820 If it is not specified, groups from all interfaces are 1821 cleared."; 1822 } 1823 leaf group { 1824 type inet:ipv6-address; 1825 description 1826 "Multicast group IPv6 address. 1827 If it is not specified, all MLD group tables are 1828 cleared."; 1829 } 1830 leaf source { 1831 type inet:ipv6-address; 1832 description 1833 "Multicast source IPv6 address. 1834 If it is not specified, all MLD source-group tables are 1835 cleared."; 1836 } 1837 } 1838 } // rpc clear-mld-groups 1840 /* 1841 * Notifications 1842 */ 1843 } 1844 1846 5. Security Considerations 1848 The data model defined does not introduce any security implications. 1849 This draft does not change any underlying security issues inherent 1850 in [RFC8022]. 1852 6. IANA Considerations 1854 RFC Ed.: In this section, replace all occurrences of 'XXXX' with the 1855 actual RFC number (and remove this note). 1857 This document registers the following namespace URIs in the IETF XML 1858 registry [RFC3688]: 1860 -------------------------------------------------------------------- 1862 URI: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1864 Registrant Contact: The IESG. 1866 XML: N/A, the requested URI is an XML namespace. 1868 -------------------------------------------------------------------- 1870 This document registers the following YANG modules in the YANG Module 1871 Names registry [RFC7950]: 1873 -------------------------------------------------------------------- 1875 name: ietf-igmp-mld 1877 namespace: urn:ietf:params:xml:ns:yang:ietf-igmp-mld 1879 prefix: igmp-mld 1881 reference: RFC XXXX 1883 -------------------------------------------------------------------- 1885 7. References 1887 7.1. Normative References 1889 [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate 1890 Requirement Levels", BCP 14, RFC 2119, March 1997. 1892 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1893 the Network Configuration Protocol (NETCONF)", RFC 6020, 1894 October 2010 1896 [RFC6241] Enns, R., Ed., Bjorklund, M., Ed., Schoenwaelder, J., Ed., 1897 and A. Bierman, Ed., "Network Configuration Protocol 1898 (NETCONF)", RFC 6241, June 2011 1900 [RFC7950] Bjorklund, M., Ed., "The YANG 1.1 Data Modeling Language", 1901 RFC 7950, August 2016 1903 [RFC8022] Lhotka, L. and A. Lindem, "A YANG Data Model for Routing 1904 Management", RFC 8022, November 2016 1906 7.2. Informative References 1908 [RFC1112] Deering, S., "Host extensions for IP multicasting", STD 5, 1909 RFC 1112, August 1989. 1911 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1912 2", RFC 2236, November 1997. 1914 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1915 Listener Discovery (MLD) for IPv6", RFC 2710, October 1916 1999. 1918 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1919 Thyagarajan, "Internet Group Management Protocol, Version 1920 3", RFC 3376, October 2002. 1922 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1923 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1925 [RFC4541] M. Christensen, K. Kimball and F. Solensky, 1926 "Considerations for Internet Group Management Protocol 1927 (IGMP) and Multicast Listener Discovery (MLD) Snooping 1928 Switches", RFC 4541, May 2006. 1930 [RFC4605] B. Fenner, H. He, B. Haberman, and H. Sandick, "Internet 1931 Group Management Protocol (IGMP) / Multicast Listener 1932 Discovery (MLD)-Based Multicast Forwarding ("IGMP/MLD 1933 Proxying")", RFC 4605, August 2006. 1935 [RFC6087] Bierman, A., "Guidelines for Authors and Reviewers of YANG 1936 Data Model Documents", RFC 6087, January 2011 1938 [I-D.ietf-netmod-rfc6087bis] Bierman, A., "Guidelines for Authors 1939 and Reviewers of YANG Data Model Documents", draft-ietf- 1940 netmod-rfc6087bis-12(work in progress), March 2017. 1942 8. Acknowledgments 1944 The authors would like to thank Steve Baillargeon, Hu Fangwei, 1945 Robert Kebler, Tanmoy Kundu, Liu Yisong, and Stig Venaas for their 1946 valuable contributions. 1948 Authors' Addresses 1950 Xufeng Liu 1951 Jabil 1952 8281 Greensboro Drive, Suite 200 1953 McLean VA 22102 1954 USA 1956 EMail: Xufeng_Liu@jabil.com 1958 Feng Guo 1959 Huawei 1960 Huawei Bld., No.156 Beiqing Rd. 1961 Beijing 100095 1962 China 1964 Email: guofeng@huawei.com 1966 Mahesh Sivakumar 1967 Cisco Systems, Inc. 1968 510 McCarthy Boulevard 1969 Milpitas, California 95035 1970 USA 1972 Email: masivaku@cisco.com 1974 Pete McAllister 1975 Metaswitch Networks 1976 100 Church Street 1977 Enfield EN2 6BQ 1978 UK 1980 EMail: pete.mcallister@metaswitch.com 1982 Anish Peter 1983 Individual 1985 EMail: anish.ietf@gmail.com