idnits 2.17.1 draft-zhao-pim-igmp-mld-snooping-yang-00.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 25 instances of too long lines in the document, the longest one being 13 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 186 has weird spacing: '...-prefix ine...' == Line 241 has weird spacing: '...-prefix ine...' == Line 316 has weird spacing: '...-prefix ine...' == Line 328 has weird spacing: '...address ine...' == Line 393 has weird spacing: '...-prefix ine...' == (1 more instance...) == The document doesn't use any RFC 2119 keywords, yet has text resembling RFC 2119 boilerplate text. -- The document date (February 6, 2017) is 2636 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) == Missing Reference: 'RFC2119' is mentioned on line 83, but not defined == Unused Reference: 'RFC6021' is defined on line 1186, but no explicit reference was found in the text == Unused Reference: 'RFC2236' is defined on line 1194, but no explicit reference was found in the text == Unused Reference: 'RFC2710' is defined on line 1197, but no explicit reference was found in the text == Unused Reference: 'RFC3376' is defined on line 1200, but no explicit reference was found in the text == Unused Reference: 'RFC3810' is defined on line 1204, but no explicit reference was found in the text == Unused Reference: 'RFC4604' is defined on line 1207, but no explicit reference was found in the text == Unused Reference: 'RFC4607' is defined on line 1212, but no explicit reference was found in the text ** Obsolete normative reference: RFC 6021 (Obsoleted by RFC 6991) ** Downref: Normative reference to an Informational RFC: RFC 4541 Summary: 3 errors (**), 0 flaws (~~), 16 warnings (==), 1 comment (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 1 Internet Engineering Task Force H. Zhao 2 Internet Draft Ericsson 3 Intended status: Standards Track February 6, 2017 4 Expires: August 2017 6 A Yang Data Model for IGMP and MLD Snooping 7 draft-zhao-pim-igmp-mld-snooping-yang-00.txt 9 Abstract 11 This document defines a YANG data model that can be used to 12 configure and manage Internet Group Management Protocol (IGMP) and 13 Multicast Listener Discovery (MLD) Snooping devices. 15 Status of this Memo 17 This Internet-Draft is submitted in full conformance with the 18 provisions of BCP 78 and BCP 79. 20 Internet-Drafts are working documents of the Internet Engineering 21 Task Force (IETF), its areas, and its working groups. Note that 22 other groups may also distribute working documents as Internet- 23 Drafts. 25 Internet-Drafts are draft documents valid for a maximum of six months 26 and may be updated, replaced, or obsoleted by other documents at any 27 time. It is inappropriate to use Internet-Drafts as reference 28 material or to cite them other than as "work in progress." 30 The list of current Internet-Drafts can be accessed at 31 http://www.ietf.org/ietf/1id-abstracts.txt 33 The list of Internet-Draft Shadow Directories can be accessed at 34 http://www.ietf.org/shadow.html 36 This Internet-Draft will expire on August 6, 2017. 38 Copyright Notice 40 Copyright (c) 2017 IETF Trust and the persons identified as the 41 document authors. All rights reserved. 43 This document is subject to BCP 78 and the IETF Trust's Legal 44 Provisions Relating to IETF Documents 45 (http://trustee.ietf.org/license-info) in effect on the date of 46 publication of this document. Please review these documents 47 carefully, as they describe your rights and restrictions with respect 48 to this document. Code Components extracted from this document must 49 include Simplified BSD License text as described in Section 4.e of 50 the Trust Legal Provisions and are provided without warranty as 51 described in the Simplified BSD License. 53 Table of Contents 55 1. Introduction...................................................2 56 1.1. Terminology...............................................2 57 1.2. Tree Diagrams.............................................3 58 2. Design of Data Model...........................................3 59 2.1. Overview..................................................3 60 2.2. IGMP and MLD Snooping Configuration.......................3 61 2.3. IGMP and MLD Snooping Operational State...................6 62 2.4. IGMP and MLD Snooping RPC................................10 63 3. IGMP and MLD Snooping YANG Module.............................10 64 4. Security Considerations.......................................26 65 5. IANA Considerations...........................................26 66 6. Normative References..........................................26 68 1. Introduction 70 This document defines a YANG [RFC6020] data model for the management 71 of Internet Group Management Protocol (IGMP) and Multicast Listener 72 Discovery (MLD) Snooping devices. 74 This data model includes configuration data and state data (status 75 information and counters for the collection of statistics). 77 1.1. Terminology 79 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", 80 "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and 81 "OPTIONAL" in this document are to be interpreted as described in BCP 82 14 [RFC2119]. 84 The terminology for describing YANG data models is found in[RFC6020]. 86 1.2. Tree Diagrams 88 A simplified graphical representation of the data model is used in 89 this document. The meaning of the symbols in these diagrams is as 90 follows: 92 o Brackets "[" and "]" enclose list keys. 94 o Abbreviations before data node names: "rw" means configuration 95 (read-write), and "ro" means state data (read-only). 97 o Symbols after data node names: "?" means an optional node, "!" 98 means a presence container, and "*" denotes a list and leaf-list. 100 o Parentheses enclose choice and case nodes, and case nodes are also 101 marked with a colon (":"). 103 o Ellipsis ("...") stands for contents of subtrees that are not 104 shown. 106 2. Design of Data Model 108 The model covers Considerations for Internet Group Management 109 Protocol (IGMP) and Multicast Listener Discovery (MLD) Snooping 110 Switches [RFC4541]. 112 The goal of this document is to define a data model that provides a 113 common user interface to IGMP and MLD Snooping. There is very 114 information that is designated as "mandatory", providing freedom for 115 vendors to adapt this data model to their respective product 116 implementations. 118 2.1. Overview 120 The IGMP and MLD Snooping YANG module defined in this document has 121 all the common building blocks for the IGMP and MLD Snooping 122 protocol. The YANG module includes IGMP and MLD Snooping 123 configuration data, Operational state data, and the rpc method for 124 clearing the specified IGMP and MLD Snooping statistics. 126 2.2. IGMP and MLD Snooping Configuration 128 The IGMP and MLD Snooping modules define the configuration in a two- 129 level hierarchy as listed below: 131 Global level: IGMP MLD Snooping configuration attributes for the 132 entire routing instance 134 VLAN-level: IGMP MLD configuration attributes specific to the given 135 VLAN. 137 module: ietf-igmp-mld-snooping 139 +--rw configuration 141 | +--rw igmp-snooping 143 | | +--rw global 145 | | | +--rw enable? boolean {global-admin-enable}? 147 | | +--rw vlans 149 | | +--rw vlan* [vlan-id] 151 | | +--rw vlan-id uint16 153 | | +--rw enable? boolean {admin-enable}? 155 | | +--rw forwarding-mode? enumeration 157 | | +--rw explicit-tracking? string 159 | | +--rw send-query? boolean 161 | | +--rw mrouter-learning? boolean 163 | | +--rw mrouter-aging-time? uint16 165 | | +--rw fast-leave? empty {fast-leave}? 167 | | +--rw last-member-query-interval? uint16 169 | | +--rw query-interval? uint16 171 | | +--rw max-response-time? uint16 173 | | +--rw require-router-alert? boolean {require-router-alert}? 175 | | +--rw robustness-variable? uint8 176 | | +--rw source-policy? string {source-policy}? 178 | | +--rw verify-source-subnet? empty {verify-source-subnet}? 180 | | +--rw version? uint8 182 | | +--rw ssm-map* [source-addr group-addr-prefix] {ssm-map}? 184 | | | +--rw source-addr ssm-map-ipv4-addr-type 186 | | | +--rw group-addr-prefix inet:ipv4-prefix 188 | | +--rw static-mrouter-interface* if:interface-ref 190 | | +--rw static-l2-multicast-group* [group] 192 | | +--rw group inet:ipv4-address 194 | | +--rw interface? if:interface-ref 196 | +--rw mld-snooping 198 | +--rw global 200 | | +--rw enable? boolean {global-admin-enable}? 202 | +--rw vlans 204 | +--rw vlan* [vlan-id] 206 | +--rw vlan-id uint16 208 | +--rw enable? boolean {admin-enable}? 210 | +--rw forwarding-mode? enumeration 212 | +--rw explicit-tracking? string 214 | +--rw send-query? boolean 216 | +--rw mrouter-learning? boolean 218 | +--rw mrouter-aging-time? uint16 220 | +--rw fast-leave? empty {fast-leave}? 222 | +--rw last-member-query-interval? uint16 223 | +--rw query-interval? uint16 225 | +--rw max-response-time? uint16 227 | +--rw require-router-alert? boolean {require-router-alert}? 229 | +--rw robustness-variable? uint8 231 | +--rw source-policy? string {source-policy}? 233 | +--rw verify-source-subnet? empty {verify-source-subnet}? 235 | +--rw version? uint8 237 | +--rw ssm-map* [source-addr group-addr-prefix] {ssm-map}? 239 | | +--rw source-addr ssm-map-ipv6-addr-type 241 | | +--rw group-addr-prefix inet:ipv6-prefix 243 | +--rw static-mrouter-interface* if:interface-ref 245 | +--rw static-l2-multicast-group* [group] 247 | +--rw group inet:ipv4-address 249 | +--rw interface? if:interface-ref 251 2.3. IGMP and MLD Snooping Operational State 253 The IGMP and MLD Snooping module contains operational state 254 information also in a two-level hierarchy as mentioned earlier. 256 Global level: IGMP MLD Snooping operational state attributes for the 257 entire routing instance 259 VLAN-level: IGMP MLD Snooping operational state attributes specific 260 to the given VLAN. 262 module: ietf-igmp-mld-snooping 264 +--rw configuration 266 ... 268 +--ro state 269 +--ro igmp-snooping 271 | +--ro global 273 | | +--ro enable? boolean {global-admin-enable}? 275 | | +--ro entries-count? uint32 277 | +--ro vlans 279 | +--ro vlan* [vlan-id] 281 | +--ro vlan-id uint16 283 | +--ro enable? boolean {admin-enable}? 285 | +--ro forwarding-mode? enumeration 287 | +--ro explicit-tracking? string 289 | +--ro send-query? boolean 291 | +--ro mrouter-learning? boolean 293 | +--ro mrouter-aging-time? uint16 295 | +--ro fast-leave? empty {fast-leave}? 297 | +--ro last-member-query-interval? uint16 299 | +--ro query-interval? uint16 301 | +--ro max-response-time? uint16 303 | +--ro require-router-alert? boolean {require-router-alert}? 305 | +--ro robustness-variable? uint8 307 | +--ro source-policy? string {source-policy}? 309 | +--ro verify-source-subnet? empty {verify-source-subnet}? 311 | +--ro version? uint8 313 | +--ro ssm-map* [source-addr group-addr-prefix] {ssm-map}? 315 | | +--ro source-addr ssm-map-ipv4-addr-type 316 | | +--ro group-addr-prefix inet:ipv4-prefix 318 | +--ro mrouter* if:interface-ref 320 | +--ro port-info* if:interface-ref 322 | +--ro mac-address* yang:phys-address 324 | +--ro querier? inet:ipv4-address 326 | +--ro group* [address] 328 | +--ro address inet:ipv4-address 330 | +--ro source* [address] 332 | +--ro address inet:ipv4-address 334 | +--ro reporter? inet:ipv4-address 336 | +--ro filter-mode? enumeration 338 | +--ro interface? if:interface-ref 340 | +--ro up-time? uint32 342 | +--ro last-join? uint32 344 | +--ro last-leave? uint32 346 +--ro mld-snooping 348 +--ro global 350 | +--ro enable? boolean {global-admin-enable}? 352 | +--ro entries-count? uint32 354 +--ro vlans 356 +--ro vlan* [vlan-id] 358 +--ro vlan-id uint16 360 +--ro enable? boolean {admin-enable}? 362 +--ro forwarding-mode? enumeration 363 +--ro explicit-tracking? string 365 +--ro send-query? boolean 367 +--ro mrouter-learning? boolean 369 +--ro mrouter-aging-time? uint16 371 +--ro fast-leave? empty {fast-leave}? 373 +--ro last-member-query-interval? uint16 375 +--ro query-interval? uint16 377 +--ro max-response-time? uint16 379 +--ro require-router-alert? boolean {require-router-alert}? 381 +--ro robustness-variable? uint8 383 +--ro source-policy? string {source-policy}? 385 +--ro verify-source-subnet? empty {verify-source-subnet}? 387 +--ro version? uint8 389 +--ro ssm-map* [source-addr group-addr-prefix] {ssm-map}? 391 | +--ro source-addr ssm-map-ipv6-addr-type 393 | +--ro group-addr-prefix inet:ipv6-prefix 395 +--ro mrouter* if:interface-ref 397 +--ro port-info* if:interface-ref 399 +--ro mac-address* yang:phys-address 401 +--ro querier? inet:ipv6-address 403 +--ro group* [address] 405 +--ro address inet:ipv6-address 407 +--ro source* [address] 409 +--ro address inet:ipv6-address 410 +--ro reporter? inet:ipv6-address 412 +--ro filter-mode? enumeration 414 +--ro interface? if:interface-ref 416 +--ro up-time? uint32 418 +--ro last-join? uint32 420 +--ro last-leave? uint32 422 2.4. IGMP and MLD Snooping RPC 424 IGMP and MLD Snooping RPC clears the specified IGMP and MLD Snooping 425 statistics. 427 rpcs: 429 +---x clear-igmp-mld-snooping-statistics {rpc-clear-statistics}? 431 +---w input 433 +---w vlan-id? uint16 435 3. IGMP and MLD Snooping YANG Module 437 file "ietf-igmp-mld-snooping@2017-02-05.yang" 438 module ietf-igmp-mld-snooping { 439 namespace "urn:ietf:params:xml:ns:yang:ietf-igmp-mld-snooping"; 440 // replace with IANA namespace when assigned 441 prefix igmp-mld-snooping; 443 import ietf-inet-types { 444 prefix "inet"; 445 } 447 import ietf-yang-types { 448 prefix "yang"; 449 } 451 import ietf-interfaces { 452 prefix "if"; 454 } 456 organization 457 "IETF PIM Working Group"; 459 contact 460 "WG Web: 461 WG List: 463 WG Chair: Stig Venaas 464 466 WG Chair: Mike McBride 467 469 Editors: Hongji Zhao 470 "; 472 description 473 "The module defines a collection of YANG definitions common 474 for 475 IGMP and MLD Snooping."; 477 revision 2017-02-05 { 478 description 479 "Initial revision."; 480 reference 481 "RFC XXXX: A YANG Data Model for IGMP and MLD Snooping"; 482 } 484 /* 485 * Features 486 */ 487 feature global-admin-enable { 488 description 489 "Support global configuration to enable or disable IGMP and 490 MLD Snooping."; 491 } 493 feature admin-enable { 494 description 495 "Support configuration to enable or disable protocol under 496 VLAN instance."; 497 } 499 feature fast-leave { 500 description 501 "Support configuration of fast-leave."; 502 } 504 feature join-group { 505 description 506 "Support configuration of join-group."; 507 } 509 feature require-router-alert { 510 description 511 "Support configuration of require-router-alert."; 512 } 514 feature source-policy { 515 description 516 "Support configuration of source policy."; 517 } 519 feature ssm-map { 520 description 521 "Support configuration of ssm-map."; 522 } 524 feature static-l2-multicast-group { 525 description 526 "Support configuration of L2 multicast static-group."; 527 } 529 feature verify-source-subnet { 530 description 531 "Support configuration of verify-source-subnet."; 532 } 534 feature per-vlan-config { 535 description 536 "Support configuration of each VLAN."; 537 } 539 feature rpc-clear-statistics { 540 description 541 "Support to clear statistics by RPC for IGMP and MLD 542 Snooping."; 543 } 545 /* 546 * Typedefs 547 */ 548 typedef ssm-map-ipv4-addr-type { 549 type union { 550 type enumeration { 551 enum 'policy' { 552 description 553 "Source address in SSM map policy."; 554 } 555 } 556 type inet:ipv4-address; 557 } 558 description 559 "Source IPV4 address type for SSM map."; 560 } // ssm-map-ipv4-addr-type 562 typedef ssm-map-ipv6-addr-type { 563 type union { 564 type enumeration { 565 enum 'policy' { 566 description 567 "Source address in SSM map policy."; 568 } 569 } 570 type inet:ipv6-address; 571 } 572 description 573 "Source IPV6 address type for SSM map."; 574 } // ssm-map-ipv6-addr-type 576 /* 577 * Identities 578 */ 580 /* 581 * Groupings 582 */ 583 grouping global-config-attributes { 584 description "Global configuration of IGMP and MLD Snooping."; 586 leaf enable { 587 if-feature global-admin-enable; 588 type boolean; 590 description 592 "Set the value to true to enable IGMP or MLD Snooping in the 593 global view"; 594 } 596 } // global-config-attributes 598 grouping global-state-attributes { 599 description "Global attributes of IGMP and MLD Snooping 600 state"; 601 leaf entries-count { 602 type uint32; 603 description 604 "The number of L2 multicast entries in IGMP and MLD 605 Snooping."; 606 } 608 } // global-state-attributes 610 grouping vlan-config-attributes-igmp-snooping { 611 description "IGMP snooping configuration of each VLAN."; 613 uses vlan-config-attributes-igmp-mld-snooping; 615 list ssm-map { 617 if-feature ssm-map; 618 key "source-addr group-addr-prefix"; 619 description "SSM mapping list for igmp snooping"; 621 leaf source-addr { 622 type ssm-map-ipv4-addr-type; 623 description 624 "Source IP address."; 625 } 626 leaf group-addr-prefix { 627 type inet:ipv4-prefix; 628 description 629 "Multicast group IP address for ssm-map in the format 630 of x.x.x.x/x "; 631 } 632 } 634 } // vlan-config-attributes-igmp-snooping 635 grouping vlan-config-attributes-igmp-mld-snooping { 636 description 637 "IGMP and MLD Snooping configuration of each VLAN."; 639 leaf enable { 640 if-feature admin-enable; 641 type boolean; 642 description 643 "Set the value to true to enable IGMP and MLD Snooping in 644 the VLAN instance."; 645 } 647 leaf forwarding-mode { 648 type enumeration { 649 enum "mac" { 650 description 651 ""; 652 } 653 enum "ip" { 654 description 655 ""; 656 } 657 } 658 description "The default forwarding mode for IGMP and MLD 659 Snooping is ip."; 660 } 662 leaf explicit-tracking { 663 when "../version = 3"; 664 type string; 665 description "Tracks IGMPv3 membership reports from 666 individual hosts for each port of each VLAN. "; 667 } 669 leaf send-query { 670 type boolean; 671 default true; 672 description "Enable quick response for topo changes"; 673 } 675 leaf mrouter-learning { 676 type boolean; 677 default true; 678 description 679 "Enable router port learning function"; 680 } 681 leaf mrouter-aging-time { 682 type uint16 ; 683 default 180; 684 description "Aging time for mrouter port"; 685 } 687 leaf fast-leave { 688 if-feature fast-leave; 689 type empty; 690 description 691 "When fast leave is enabled, the IGMP software assumes 692 that no more than one host is present on each VLAN port."; 693 } 694 leaf last-member-query-interval { 695 type uint16 { 696 range "1..65535"; 697 } 698 description 699 " Modify the value to adjust the leave latency of the 700 network."; 701 } 703 leaf query-interval { 704 type uint16; 705 units seconds; 706 default 125; 707 description 708 "Interval between general queries sent by the querier."; 709 } 710 leaf max-response-time { 711 type uint16; 712 units seconds; 713 description 714 "Maximum time for the host to respond the query packet."; 716 } 717 leaf require-router-alert { 718 if-feature require-router-alert; 719 type boolean; 720 description 721 "When the value is true, router alert exists in the IP 722 head of IGMP or MLD packet."; 723 } 724 leaf robustness-variable { 725 type uint8 { 726 range "2..7"; 728 } 729 default 2; 730 description 731 "Adjust the value for the expected packet loss on the 732 network."; 734 } 735 leaf source-policy { 736 if-feature source-policy; 737 type string; 738 description 739 "Name of the access policy used to filter sources."; 740 } 741 leaf verify-source-subnet { 742 if-feature verify-source-subnet; 743 type empty; 744 description 745 "If the value is present, the interface accepts packets 746 with matching source IP subnet only."; 747 } 748 leaf version { 749 type uint8 { 750 range "1..3"; 751 } 752 description "IGMP and MLD Snooping version."; 753 } 754 } // vlan-config-attributes-igmp-mld-snooping 756 grouping vlan-config-attributes-mld-snooping { 757 description "MLD snooping configuration of each VLAN."; 759 uses vlan-config-attributes-igmp-mld-snooping; 761 list ssm-map { 762 if-feature ssm-map; 763 key "source-addr group-addr-prefix"; 764 description "SSM mapping list for MLD snooping"; 765 leaf source-addr { 766 type ssm-map-ipv6-addr-type; 767 description 768 "Source IP address."; 769 } 770 leaf group-addr-prefix { 771 type inet:ipv6-prefix; 772 description 773 "Multicast group IP address for ssm-map"; 775 } 776 } 778 } // vlan-config-attributes-mld-snooping 780 grouping vlan-state-attributes-igmp-snooping { 781 description 782 "State attributes for IGMP snooping of each VLAN."; 784 uses vlan-state-attributes-igmp-mld-snooping; 786 leaf querier { 787 type inet:ipv4-address; 788 description "Configures a snooping querier when PIM is 789 disabled because multicast traffic does not need to be routed. The IP 790 address is used as the source address in messages."; 791 } 793 list group { 794 key "address"; 795 description "IGMP snooping information"; 797 leaf address { 798 type inet:ipv4-address; 799 description 800 "Multicast group IP address"; 801 } 803 list source { 804 key "address"; 805 description "Source IP address for multicast stream"; 806 leaf address { 807 type inet:ipv4-address; 808 description "Source IP address for multicast stream"; 809 } 811 leaf reporter { 812 type inet:ipv4-address; 813 description "The reporter IP address behind the port"; 814 } 816 uses vlan-state-group-attributes-igmp-mld-snooping; 818 } // list source 819 } // list group 821 } // vlan-state-attributes-igmp-snooping 823 grouping vlan-state-attributes-igmp-mld-snooping { 824 description 825 "State attributes for both IGMP and MLD Snooping of each 826 VLAN."; 828 leaf-list mrouter { 829 type if:interface-ref; 830 description "The interfaces that connect to the multicast 831 router"; 832 } 834 leaf-list port-info { 835 type if:interface-ref; 836 description "The port-info shows the interfaces that attach 837 the hosts, which join in the multicast group"; 838 } 840 leaf-list mac-address { 841 type yang:phys-address; 842 description "Destination mac address for L2 multicast 843 forwarding."; 844 } 846 } // vlan-config-attributes-igmp-mld-snooping 848 grouping vlan-state-attributes-mld-snooping { 849 description 850 "State attributes for MLD snooping of each VLAN."; 852 uses vlan-state-attributes-igmp-mld-snooping; 854 leaf querier { 855 type inet:ipv6-address; 856 description 857 "Configures a snooping querier when PIM is disabled because 858 multicast traffic does not need to be routed."; 859 } 861 list group { 862 key "address"; 863 description "MLD snooping statistics information"; 865 leaf address { 866 type inet:ipv6-address; 867 description 868 "Multicast group IP address"; 869 } 871 list source { 872 key "address"; 873 description "Source IP address for multicast stream"; 875 leaf address { 876 type inet:ipv6-address; 877 description "Source IP address for multicast stream"; 878 } 880 leaf reporter { 881 type inet:ipv6-address; 882 description "The reporter IP address behind the port"; 883 } 885 uses vlan-state-group-attributes-igmp-mld-snooping; 887 } // list source 888 } // list group 889 } // vlan-state-attributes-mld-snooping 891 grouping vlan-state-group-attributes-igmp-mld-snooping { 892 description 893 "State attributes for both IGMP and MLD Snooping of each 894 VLAN."; 896 leaf filter-mode { 897 type enumeration { 898 enum "include" { 899 description 900 ""; 901 } 902 enum "exclude" { 903 description 904 ""; 905 } 906 } 907 description "Allow (include) or block (exclude) filtering 908 "; 909 } 911 leaf interface { 912 type if:interface-ref; 913 description 914 "The outgoing interface for L2 multicast stream."; 916 } 918 leaf up-time { 919 type uint32; 920 units seconds; 921 description "The up time for the interface."; 922 } 924 leaf last-join { 925 type uint32; 926 units seconds; 927 description "The last-join information collected since a 928 clear command was entered last time."; 929 } 931 leaf last-leave { 932 type uint32; 933 units seconds; 934 description "The last-leave information collected since a 935 clear command was entered last time."; 936 } 938 } // vlan-state-group-attributes-igmp-mld-snooping 940 grouping vlan-config-static-l2-multicast-group { 941 description 942 "Configures a L2 static connection to a multicast 943 receiver."; 945 list static-l2-multicast-group { 947 key group; 948 description "Multicast group IP address"; 950 leaf group { 951 type inet:ipv4-address; 952 description 953 "Multicast group IP address"; 954 } 955 leaf interface { 956 type if:interface-ref; 957 description 958 "Interface for static multicast group"; 959 } 960 } 962 } //vlan-config-static-l2-multicast-group 964 /* 965 * Configuration data nodes 966 */ 967 container configuration 968 { 969 description 970 "IGMP and MLD Snooping configuration data."; 972 container igmp-snooping { 973 description 974 "IGMP Snooping configuration data."; 976 container global { 977 description 978 "Global attributes."; 979 uses global-config-attributes; 980 } 982 container vlans { 983 description 984 "List of VLANs that enable IGMP Snooping."; 986 list vlan { 987 key "vlan-id"; 988 description 989 "IGMP Snooping config-attributes for each VLAN."; 990 leaf vlan-id { 991 type uint16 { 992 range "1 .. 4094"; 993 } 994 description 995 "VLAN ID, the range of which is 1 to 4094."; 996 } 997 uses vlan-config-attributes-igmp-snooping { 998 if-feature per-vlan-config; 999 } 1001 leaf-list static-mrouter-interface { 1002 type if:interface-ref; 1003 description "Configures a static connection to a 1004 multicast router. The interface to the router must be in the selected 1005 VLAN. The interface is specified by type and number."; 1006 } 1007 uses vlan-config-static-l2-multicast-group { 1008 if-feature static-l2-multicast-group; 1009 } 1011 } // vlan 1012 } // vlans 1013 } // igmp-snooping 1015 container mld-snooping { 1016 description 1017 "MLD Snooping configuration data."; 1019 container global { 1020 description 1021 "Global attributes."; 1022 uses global-config-attributes; 1023 } 1025 container vlans { 1026 description 1027 "List of VLANs that enable IGMP Snooping."; 1029 list vlan { 1030 key "vlan-id"; 1031 description 1032 "IGMP Snooping configuration attributes for each 1033 VLAN."; 1035 leaf vlan-id { 1036 type uint16 { 1037 range "1 .. 4094"; 1038 } 1039 description 1040 "VLAN ID, the range of which is 1 to 4094"; 1041 } 1043 uses vlan-config-attributes-mld-snooping { 1044 if-feature per-vlan-config; 1045 } 1047 leaf-list static-mrouter-interface { 1048 type if:interface-ref; 1049 description "Configures a static connection to a 1050 multicast router. The interface to the router must be in the selected 1051 VLAN. The interface is specified by type and number."; 1052 } 1054 uses vlan-config-static-l2-multicast-group { 1055 if-feature static-l2-multicast-group; 1056 } 1058 } // vlan 1059 } // vlans 1060 } // mld-snooping 1061 } // 1063 /* 1064 * Operational state data nodes 1065 */ 1066 container state 1067 { 1068 config false; 1070 description 1071 "IGMP and MLD Snooping state data."; 1073 container igmp-snooping { 1074 description 1075 "IGMP Snooping operational state data."; 1077 container global { 1078 description 1079 "Global attributes."; 1080 uses global-config-attributes; 1081 uses global-state-attributes; 1082 } 1084 container vlans{ 1085 description 1086 " List of VLANs that enable IGMP Snooping."; 1088 list vlan { 1089 key "vlan-id"; 1090 description 1091 "IGMP Snooping state-attributes for each VLAN."; 1092 leaf vlan-id { 1093 type uint16 { 1094 range "1 .. 4094"; 1095 } 1096 description 1097 "VLAN ID, the range of which is 1 to 4094 "; 1099 } 1100 uses vlan-config-attributes-igmp-snooping { 1101 if-feature per-vlan-config; 1102 } 1103 uses vlan-state-attributes-igmp-snooping; 1104 } // vlan 1105 } // vlans 1106 } // igmp-snooping 1108 container mld-snooping { 1109 description 1110 "MLD Snooping state data."; 1112 container global { 1113 description 1114 "Global attributes."; 1115 uses global-config-attributes; 1116 uses global-state-attributes; 1117 } 1119 container vlans { 1120 description 1121 "List of VLANs that enable MLD Snooping."; 1123 list vlan { 1124 key "vlan-id"; 1125 description 1126 "MLD Snooping state-attributes for each VLAN."; 1128 leaf vlan-id { 1129 type uint16 { 1130 range "1 .. 4094"; 1131 } 1132 description 1133 "VLAN ID, the range of which is 1 to 4094 "; 1134 } 1135 uses vlan-config-attributes-mld-snooping { 1136 if-feature per-vlan-config; 1137 } 1138 uses vlan-state-attributes-mld-snooping; 1139 } // vlan 1140 } // vlans 1141 } // mld-snooping 1142 } // 1144 /* 1145 * RPCs 1146 */ 1147 //clear ip igmp snooping statistics interface vlan-id 1149 rpc clear-igmp-mld-snooping-statistics { 1150 if-feature rpc-clear-statistics; 1151 description 1152 "Clears the specified IGMP and MLD Snooping statistics."; 1154 input { 1155 leaf vlan-id { 1156 type uint16 { 1157 range "1 .. 4094"; 1158 } 1159 description 1160 "VLAN ID, the range of which is 1 to 4094 "; 1161 } 1163 } 1164 } // rpc clear-igmp-mld-snooping-statistics 1166 /* 1167 * Notifications 1168 */ 1169 } 1170 1172 4. Security Considerations 1174 The data model defined does not create any security implications. 1176 5. IANA Considerations 1178 This draft does not request any IANA action. 1180 6. Normative References 1182 [RFC6020] Bjorklund, M., Ed., "YANG - A Data Modeling Language for 1183 the Network Configuration Protocol (NETCONF)", RFC 6020, 1184 October 2010. 1186 [RFC6021] Schoenwaelder, J., Ed., "Common YANG Data Types", RFC 6021, 1187 October 2010. 1189 [RFC4541] M. Christensen, K. Kimball, F. Solensky, "Considerations 1190 for Internet Group Management Protocol (IGMP) and Multicast 1191 Listener Discovery (MLD) Snooping Switches", RFC 4541, May 1192 2006. 1194 [RFC2236] Fenner, W., "Internet Group Management Protocol, Version 1195 2", RFC 2236, November 1997. 1197 [RFC2710] Deering, S., Fenner, W., and B. Haberman, "Multicast 1198 Listener Discovery (MLD) for IPv6", RFC 2710, October 1999. 1200 [RFC3376] Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A. 1201 Thyagarajan, "Internet Group Management Protocol, Version 1202 3", RFC 3376, October 2002. 1204 [RFC3810] Vida, R. and L. Costa, "Multicast Listener Discovery 1205 Version 2 (MLDv2) for IPv6", RFC 3810, June 2004. 1207 [RFC4604] Holbrook, H., Cain, B., and B. Haberman, "Using 1208 InternetGroup Management Protocol Version 3 (IGMPv3) and 1209 Multicast Listener Discovery Protocol Version 2 (MLDv2) for 1210 Source-Specific Multicast", RFC 4604, August 2006. 1212 [RFC4607] Holbrook, H. and B. Cain, "Source-Specific Multicast for 1213 IP", RFC 4607, August 2006. 1215 [draft-ietf-pim-igmp-mld-yang-01] X. Liu, F. Guo, M. Sivakumar, P. 1216 McAllister, A. Peter, "A YANG data model for Internet Group 1217 Management Protocol (IGMP) and Multicast Listener Discovery 1218 (MLD)", draft-ietf-pim-igmp-mld-yang-01, October 28, 2016. 1220 Authors' Addresses 1222 Hongji Zhao 1223 Ericsson (China) Communications Company Ltd. 1224 Ericsson Tower, No. 5 Lize East Street, 1225 Chaoyang District Beijing 100102, P.R. China 1227 Email: hongji.zhao@ericsson.com