Network Working Group                                             Y. Liu
Internet-Draft                                                    F. Guo
Intended status: Standards Track                                  Huawei
Expires: April 25, 2015                                 October 22, 2014


 Yang Model for Internet Group Management Protocol (IGMP) and Multicast
                        Listener Discovery (MLD)
                     draft-liu-pim-igmp-mld-yang-00

Abstract

   This document defines a YANG data model that can be used to configure
   and manage IGMP and MLD.

Requirements Language

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in RFC 2119 [RFC2119].

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at http://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on April 25, 2015.

Copyright Notice

   Copyright (c) 2014 IETF Trust and the persons identified as the
   document authors.  All rights reserved.

   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents
   (http://trustee.ietf.org/license-info) in effect on the date of
   publication of this document.  Please review these documents
   carefully, as they describe your rights and restrictions with respect



Liu & Guo                Expires April 25, 2015                 [Page 1]


Internet-Draft               GMP YANG model                 October 2014


   to this document.  Code Components extracted from this document must
   include Simplified BSD License text as described in Section 4.e of
   the Trust Legal Provisions and are provided without warranty as
   described in the Simplified BSD License.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Terminology . . . . . . . . . . . . . . . . . . . . . . . . .   2
   3.  Design of Data Model  . . . . . . . . . . . . . . . . . . . .   3
     3.1.  Overview  . . . . . . . . . . . . . . . . . . . . . . . .   3
     3.2.  GMP Per-instance Configuration  . . . . . . . . . . . . .   3
       3.2.1.  Per-instance Parameters . . . . . . . . . . . . . . .   4
       3.2.2.  Per-SSM-Mapping Configuration of GMP Instance . . . .   4
       3.2.3.  Per-interface Configuration of GMP Instance . . . . .   4
   4.  GMP Yang Module . . . . . . . . . . . . . . . . . . . . . . .   6
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  18
   6.  Security Considerations . . . . . . . . . . . . . . . . . . .  18
   7.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  18
   8.  References  . . . . . . . . . . . . . . . . . . . . . . . . .  18
     8.1.  Normative References  . . . . . . . . . . . . . . . . . .  18
     8.2.  Informative References  . . . . . . . . . . . . . . . . .  19
   Authors' Addresses  . . . . . . . . . . . . . . . . . . . . . . .  19

1.  Introduction

   YANG[RFC6020] is a data definition language that was introduced to
   define the contents of a conceptual data store that allows networked
   devices to be managed using NETCONF[RFC6241].  YANG is proving
   relevant beyond its initial confines, as bindings to other
   interfaces(e.g.  REST) and encoding other than XML (e.g.  JSON) are
   being defined.  Furthermore, YANG data models can be used as the
   basis of implementation for other interface, such as CLI and
   Programmatic APIs.

   This document defines a YANG data model that can be used to configure
   and manage IGMP and MLD.  It includes IGMPv1[RFC1112],
   IGMPv2[RFC2236], IGMPv3[RFC3376] and MLDv1[RFC2710], MLDv2[RFC3810].
   In addition, features described in IGMP and MLD standards other than
   mentioned above RFC are also supported.  For convenience, IGMP and
   MLD are wholly called GMP below.

2.  Terminology

   o  IGMP: Internet Group Management Protocol

   o  MLD: Multicast Listener Discovery




Liu & Guo                Expires April 25, 2015                 [Page 2]


Internet-Draft               GMP YANG model                 October 2014


   o  GMP: Group Management Protocol

   o  SSM: Source-Specific Multicast

3.  Design of Data Model

3.1.  Overview

   The GMP Yang module has only one main container ::

   o  gmpInstances : that contains per-instance writable configuration
      objects.

   The figure below describes the overall structure of the GMP Yang
   module :

      module: gmp
      +--rw gmp
         +--rw gmp-Instances
            +--rw gmp-Instance * [vrfName]
               |  ...
               +--rw gmp-SSM-Mappings
                  ...
               |  ...
               +--rw gmp-Interfaces
                  +--rw gmp-Interface * [ifName]
                     |  ...
                     +--rw gmp-Static-Groups
                        ...

         Figure 1 The overview of GMP YANG data model

3.2.  GMP Per-instance Configuration

   GMP per-instance configuration container includes parameters of the
   public GMP instance or the GMP instance binding a specific VRF.  GMP
   per-instance configuration container is divided into:

   o  Per-instance parameters

   o  Per-SSM-Mapping configuration of the GMP instance

   o  Per-interface configuration of the GMP instance








Liu & Guo                Expires April 25, 2015                 [Page 3]


Internet-Draft               GMP YANG model                 October 2014


3.2.1.  Per-instance Parameters

   The per-instance parameter includes the name of the VRF bound by the
   GMP instance, and timer parameters such as query interval etc.

         +--rw gmp-Instances
            +--rw gmp-Instance* [vrfName]
               +--rw vrfName                    string
               +--rw addrFamily                 enumeration
               +--rw queryInterval?             uint32
               +--rw queryRspInterval?          uint32
               +--rw robustness?                uint32
               +--rw lastMemberQueryInterval?   uint32
               +--rw reqRouterAlert?            boolean
               +--rw sendRouterAlert?           boolean
               +--rw othQuerierPstTime?         uint32
               +--ro gmpEntryLimit?             uint32
               +--rw ipsecName?                 string
               +--rw ipsecType?                 enumeration

         Figure 2 The YANG data model of GMP instance

3.2.2.  Per-SSM-Mapping Configuration of GMP Instance

   Per-SSM-Mapping configuration of the GMP instance includes the SSM
   Mapping rules.IGMPv1/v2 and MLDv1 reports can use these rules to map
   SG state for PIM SSM[RFC4607].IGMPv3 and MLDv2 can default use PIM
   SSM , which is described in [RFC4604].

              +--rw gmp-SSM-Mappings
               |  +--rw gmp-SSM-Mapping
               |     +--rw IPV4-ssmmapingGrp     inet:ipv4-address
               |     +--rw IPV6-ssmmapingGrp     inet:ipv6-address
               |     +--rw isSSMapMask           boolean
               |     +--rw IPV4-ssmmapingMask?   inet:ipv4-address
               |     +--rw IPV6-ssmmapingMask?   uint32
               |     +--rw isMaskLen             boolean
               |     +--rw maskLen?              uint32
               |     +--rw IPV4-srcAddr          inet:ipv4-address
               |     +--rw IPV6-srcAddr          inet:ipv6-address

         Figure 3 The YANG data model of GMP SSM-Mapping

3.2.3.  Per-interface Configuration of GMP Instance

   Per-interface configuration of the GMP instance includes the
   interface name, timer parameters, policies, static groups etc.GMP
   per-instance configuration container is divided into two containers:



Liu & Guo                Expires April 25, 2015                 [Page 4]


Internet-Draft               GMP YANG model                 October 2014


   o  Per-interface parameters

   o  Per-static-group configuration of the GMP interface

3.2.3.1.  Per-interface Parameters

   The per-interface parameter includes the name of the interface, and
   the VRF name bound by the interface, and time parameters, policies
   etc.

              +--rw gmp-Interfaces
                  +--rw gmp-Interface* [ifName]
                     +--rw vrfName                    string
                     +--rw ifName                     ifName
                     +--rw addrFamily                 enumeration
                     +--rw gmpEnable                  boolean
                     +--rw ipSourcePly?               boolean
                     +--rw ipSrcAclName?              string
                     +--rw ipSrcAclIpv6?              string
                     +--rw queryInterval?             uint32
                     +--rw queryRspInterval?          uint32
                     +--rw robustness?                uint32
                     +--rw version?                   uint32
                     +--rw lastMemberQueryInterval?   uint32
                     +--rw requireRouterAlert?        boolean
                     +--rw sendRouterAlert?           boolean
                     +--rw othQuerierPresentTime?     uint32
                     +--rw immediatelyLeave?          boolean
                     +--rw immLeaveAclName?           string
                     +--rw immLeaveAclIpv6?           string
                     +--rw gmpEntryLimit?             uint32
                     +--rw exceptAclName?             string
                     +--rw exceptAclIpv6?             string
                     +--rw ssmapEnable?               boolean
                     +--rw groupAclName?              string
                     +--rw groupAclIpv6?              string
                     +--rw groupAclGMPVer?            uint32
                     +--rw queryAclName?              string
                     +--rw queryAclIpv6?              string
                     +--rw ipsecName?                 string
                     +--rw ipsecType?                 enumeration

          Figure 4 The YANG data model of GMP interface








Liu & Guo                Expires April 25, 2015                 [Page 5]


Internet-Draft               GMP YANG model                 October 2014


3.2.3.2.  Per-static-group Configuration of GMP interface

   Per-static-group configuration of the GMP interface includes the
   static group address, and as a option also includes source address,
   every static group step, and group numbers on the interface.

                    +--rw gmp-Static-Groups
                       +--rw gmp-Static-Group
                          +--rw vrfName                string
                          +--rw addrFamily             enumeration
                          +--rw ifName                 ifName
                          +--rw IPV4-staticGrp         inet:ipv4-address
                          +--rw IPV6-staticGrp         inet:ipv6-address
                          +--rw isSourceAddr           boolean
                          +--rw IPV4-sourceAddr?       inet:ipv4-address
                          +--rw IPV6-sourceAddr?       inet:ipv6-address
                          +--rw isStepGrpMask          boolean
                          +--rw IPV4-incStepGrpMask?   inet:ipv4-address
                          +--rw IPV6-incStepGrpMask?   inet:ipv6-address
                          +--rw isMaskLen              boolean
                          +--rw maskLen?               uint32
                          +--rw totalNum?              uint32

               Figure 5 The YANG data model of GMP static group

4.  GMP Yang Module

module gmp {
    namespace "urn:huawei:params:xml:ns:yang:gmp";
    // replace with IANA namespace when assigned - urn:ietf:params:xml:ns:yang:1
    prefix "gmp";
  import ietf-inet-types {
    prefix inet;
  }
    organization
      "Huawei Technologies Co., Ltd.";
    contact
      "liuyisong@huawei.com
       guofeng@huawei.com ";
    description
      "This YANG module defines the generic configuration
     data for GMP, i.e. IGMP and MLD, which is common across all of the vendor
     implementations of the protocol. It is intended that the module
     will be extended by vendors to define vendor-specific
     GMP configuration parameters.";
  revision 2014-10-21 {
    description
      "Initial revision.";



Liu & Guo                Expires April 25, 2015                 [Page 6]


Internet-Draft               GMP YANG model                 October 2014


  }

  typedef ifName {
        description "ifName is like ethernet1/1/1/1";
        type string {
            length "1..63";
        }
    }


    container gmp {

        container gmp-Instances {

            list gmp-Instance {

                key "vrfName";
                max-elements "unbounded";
                min-elements "0";
                description "Specifies a list of gmp instances.";

                leaf vrfName {
                    description "Name of an gmp instance.If the name string is empty the instance means a public instance whose name is _public_.";
                    config "true";
                    //default "_public_";
                    type string {
                        length "0..32";
                    }
                }
                leaf addrFamily {
                    description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                    config "true";
                    mandatory "true";
                    type enumeration {
                        enum ipv4unicast {
                            value "0";
                            description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                        }
                        enum ipv6unicast {
                            value "1";
                            description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                        }
                    }
                }
                leaf queryInterval {
                    description "Specify the interval at which the router sends general query messages. The value is an integer ranging from 1 to 18000, in seconds. The default value for IPv4 is 60, and 125 for IPv6.";
                    config "true";
                    default "60";



Liu & Guo                Expires April 25, 2015                 [Page 7]


Internet-Draft               GMP YANG model                 October 2014


                    type uint32 {
                        range "1..18000";
                    }
                }
                leaf queryRspInterval {
                    description "Specify the maximum response time for a query message. The value is an integer ranging from 1 to 25, in seconds. The default value is 10.";
                    config "true";
                    default "10";
                    type uint32 {
                        range "1..25";
                    }
                }
                leaf robustness {
                    description "Specify the number of times for retransmitting a message to avoid the packet loss. The value is an integer ranging from 2 to 5. The default value is 2.";
                    config "true";
                    default "2";
                    type uint32 {
                        range "2..5";
                    }
                }
                leaf lastMemberQueryInterval {
                    description "Specify the interval at which the querier sends last-member query messages. The value is an integer ranging from 1 to 5, in seconds. The default value is 1. This parameter makes sense only when the current querier runs IGMPv2, IGMPv3 or MLD.";
                    config "true";
                    default "1";
                    type uint32 {
                        range "1..5";
                    }
                }
                leaf reqRouterAlert {
                    description "Configure the router to process only the messages whose IP headers contain Router-Alert options globally. By default, the router does not check whether the received IGMP messages contain Router-Alert options.";
                    config "true";
                    type boolean {
                    }
                }
                leaf sendRouterAlert {
                    description "Configure the router to send the messages with Router-Alert options in the IP headers globally. By default, the IP headers contain Router-Alert options. ";
                    config "true";
                    type boolean {
                    }
                }
                leaf othQuerierPstTime {
                    description "Set the global Keepalive period for other queriers. ";
                    config "true";
                    type uint32 {
                        range "60..300";
                    }
                }
                leaf gmpEntryLimit {



Liu & Guo                Expires April 25, 2015                 [Page 8]


Internet-Draft               GMP YANG model                 October 2014


                    description "Set the maximum number of entries that can be created for the current instance. The value is an integer ranging from 1 to 49152. The default value is 49152.";
                    config "false";
                    type uint32 {
                        range "1..49152";
                    }
                }
                leaf ipsecName {
                    description "SA name. The value is a string of 1 to 15 characters.";
                    config "true";
                    type string {
                        length "1..15";
                        pattern "^[^ ]+$";
                    }
                }
                leaf ipsecType {
                    description "IPsec type used as a query option.";
                    config "true";
                    type enumeration {
                        enum forAll {
                            value "0";
                            description "IPsec type used as a query option.";
                        }
                        enum forQuery {
                            value "1";
                            description "IPsec type used as a query option.";
                        }
                    }
                }

                container gmp-SSM-Mappings {

                    container gmp-SSM-Mapping {

                        leaf IPV4-ssmmapingGrp {
                            description "Specify the address of a multicast group.";
                            config "true";
                            mandatory "true";
                            type inet:ipv4-address;
                        }
                        leaf IPV6-ssmmapingGrp {
                            description "Specify the address of a multicast group.";
                            config "true";
                            mandatory "true";
                            type inet:ipv6-address;
                        }
                        leaf isSSMapMask {
                            description "Whether a mask is configured for a multicast group address.";
                            config "true";



Liu & Guo                Expires April 25, 2015                 [Page 9]


Internet-Draft               GMP YANG model                 October 2014


                            mandatory "true";
                            type boolean {
                            }
                        }
                        leaf IPV4-ssmmapingMask {
                            description "Specify the mask of a multicast group address.";
                            config "true";
                            type inet:ipv4-address;
                        }
                        leaf IPV6-ssmmapingMask {
                            description "Specify the mask of a multicast group address.";
                            config "true";
                            type uint32 {
                                range "0..128";
                            }
                        }

                        leaf isMaskLen {
                            description "Whether the length is set for the mask of a multicast group address.";
                            config "true";
                            mandatory "true";
                            type boolean {
                            }
                        }
                        leaf maskLen {
                            description "Specify the mask length of a multicast group address. In the case of an IPv4 address, the mask length ranges from 4 to 32. In the case of an IPv6 address, the mask length is 16/32/64/128.";
                            config "true";
                            type uint32 {
                                range "0..128";
                            }
                        }
                        leaf IPV4-srcAddr {
                            description "Specify the address of a multicast source.";
                            config "true";
                            mandatory "true";
                            type inet:ipv4-address;
                        }
                        leaf IPV6-srcAddr {
                            description "Specify the address of a multicast source.";
                            config "true";
                            mandatory "true";
                            type inet:ipv6-address;
                        }
                    }
                }

                container gmp-Interfaces {




Liu & Guo                Expires April 25, 2015                [Page 10]


Internet-Draft               GMP YANG model                 October 2014


                    list gmp-Interface {

                        key "ifName";
                        max-elements "unbounded";
                        min-elements "0";
                        description "Specifies an gmp interface.";

                        leaf vrfName {
                            description "Name of an gmp instance. If the name string is empty the instance means a public instance whose name is _public_.";
                            config "true";
                            mandatory "true";
                            //default "_public_";
                            type string {
                                length "0..32";
                            }
                        }
                        leaf ifName {
                            description "Interface name.";
                            config "true";
                            type ifName;
                        }
                        leaf addrFamily {
                            description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                            config "true";
                            mandatory "true";
                            type enumeration {
                                enum ipv4unicast {
                                    value "0";
                                    description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                                }
                                enum ipv6unicast {
                                    value "1";
                                    description "Specify an address family, which determines whether an address is an IPv4 or IPv6 address.";
                                }
                            }
                        }
                        leaf gmpEnable {
                            description "Enable protocols on an interface.";
                            config "true";
                            mandatory "true";
                            type boolean {
                            }
                        }
                        leaf ipSourcePly {
                            description "Configure a policy for filtering IGMP Report messages based on host addresses. By default, no policy is configured for filtering IGMP Report messages based on host addresses.";
                            config "true";
                            type boolean {
                            }



Liu & Guo                Expires April 25, 2015                [Page 11]


Internet-Draft               GMP YANG model                 October 2014


                        }
                        leaf ipSrcAclName {
                            description "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string with a maximum of 32 characters. By default, the ACL is not configured.";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf ipSrcAclIpv6 {
                            description "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string with a maximum of 32 characters. By default, the ACL is not configured.";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf queryInterval {
                            description "Specify the interval at which the router sends general query messages. The value is an integer ranging from 1 to 18000, in seconds. The default value for IPv4 is 60, and 125 for IPv6.";
                            config "true";
                            default "60";
                            type uint32 {
                                range "1..18000";
                            }
                        }
                        leaf queryRspInterval {
                            description "Specify the maximum response time for a query message. The value is an integer ranging from 1 to 25, in seconds. The default value is 10. This time is used to control the deadline of mainframe feed back the relation-ship of group members.";
                            config "true";
                            default "10";
                            type uint32 {
                                range "1..25";
                            }
                        }
                        leaf robustness {
                            description "Specify the number of times for retransmitting messages to avoid packet loss. The value is an integer ranging from 2 to 5. The default value is 2.";
                            config "true";
                            default "2";
                            type uint32 {
                                range "2..5";
                            }
                        }
                        leaf version {
                            description "Specify the version of IGMP or MLD running on an interface. By default, IGMPv2 or MLDv2 is used.";
                            config "true";
                            default "2";
                            type uint32 {
                                range "1..3";
                            }



Liu & Guo                Expires April 25, 2015                [Page 12]


Internet-Draft               GMP YANG model                 October 2014


                        }
                        leaf lastMemberQueryInterval {
                            description "Specify the interval at which the querier sends last-member query messages. The value is an integer ranging from 1 to 5, in seconds. The default value is 1. This parameter makes sense only when the current querier runs IGMPv2, IGMPv3 or MLD.";
                            config "true";
                            default "1";
                            type uint32 {
                                range "1..5";
                            }
                        }
                        leaf requireRouterAlert {
                            description "Configure an interface to process only messages whose IP headers contain Router-Alert options. By default, the interface does not check whether the received messages contain Router-Alert options.";
                            config "true";
                            type boolean {
                            }
                        }
                        leaf sendRouterAlert {
                            description "Configure an interface to send the messages with Router-Alert options in the IP headers. By default, the IP header contain Router-Alert options.";
                            config "true";
                            default "true";
                            type boolean {
                            }
                        }
                        leaf othQuerierPresentTime {
                            description "Set the Keepalive period for other queriers on an interface. The value ranges from 60 to 300, in second. By default, no Keepalive period is set for other queriers.";
                            config "true";
                            type uint32 {
                                range "60..300";
                            }
                        }
                        leaf immediatelyLeave {
                            description "Configure an interface that receives a Leave message of a certain group to immediately delete the corresponding group records, without sending a last-member query message.";
                            config "true";
                            type boolean {
                            }
                        }
                        leaf immLeaveAclName {
                            description "Configure an ACL that defines a multicast group range. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a string with a maximum of 32 case-sensitive characters. By default, the ACL is not con";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf immLeaveAclIpv6 {
                            description "Configure an ACL that defines a multicast group range. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a string with a maximum of 32 case-sensitive characters. By default, the ACL is not con";
                            config "true";
                            type string {
                                length "1..32";



Liu & Guo                Expires April 25, 2015                [Page 13]


Internet-Draft               GMP YANG model                 October 2014


                                pattern "^[^ ]+$";
                            }
                        }
                        leaf gmpEntryLimit {
                            description "Specify the maximum number of entries that the current interface can create. It is an integer ranging from 1 to 16384. The default value is 16384.";
                            config "true";
                            type uint32 {
                                range "1..16384";
                            }
                        }
                        leaf exceptAclName {
                            description "Specify the range of multicast groups, the number of IGMP entries corresponding to which needs not be limited. The basic ACL number ranges from 2000 to 2999. The basic ACL filters group addresses only, without distinguishing (*, G) entries and (S, G) entr";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf exceptAclIpv6 {
                            description "Specify the range of multicast groups, the number of IGMP entries corresponding to which needs not be limited. The basic ACL number ranges from 2000 to 2999. The basic ACL filters group addresses only, without distinguishing (*, G) entries and (S, G) entr";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf ssmapEnable {
                            description "Enable SSM mapping on an interface.";
                            config "true";
                            type boolean {
                            }
                        }
                        leaf groupAclName {
                            description "Set a filter for multicast groups on an interface to control the range of multicast groups that hosts can join. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a string with a maximum of 32 ";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf groupAclIpv6 {
                            description "Set a filter for multicast groups on an interface to control the range of multicast groups that hosts can join. The basic ACL number ranges from 2000 to 2999, and the advanced ACL number ranges from 3000 to 3999. The name is a string with a maximum of 32 ";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }



Liu & Guo                Expires April 25, 2015                [Page 14]


Internet-Draft               GMP YANG model                 October 2014


                        leaf groupAclGMPVer {
                            description "Forbids hosts that use a specified version to join the multicast group. The version can be specified in this command only after a multicast filtering policy is configured.";
                            config "true";
                            type uint32 {
                                range "1..3";
                            }
                        }
                        leaf queryAclName {
                            description "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string with a maximum of 32 characters. By default, the ACL is not configured.";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf queryAclIpv6 {
                            description "Configure an ACL that defines a host addresses range. The value is an integer ranging from 2000 to 2999, or a case-sensitive string with a maximum of 32 characters. By default, the ACL is not configured.";
                            config "true";
                            type string {
                                length "1..32";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf ipsecName {
                            description "SA name. The value is a string of 1 to 15 characters.";
                            config "true";
                            type string {
                                length "1..15";
                                pattern "^[^ ]+$";
                            }
                        }
                        leaf ipsecType {
                            description "IPsec type used as a query option.";
                            config "true";
                            type enumeration {
                                enum forAll {
                                    value "0";
                                    description "IPsec type used as a query option.";
                                }
                                enum forQuery {
                                    value "1";
                                    description "IPsec type used as a query option.";
                                }
                            }
                        }

                        container gmp-Static-Groups {




Liu & Guo                Expires April 25, 2015                [Page 15]


Internet-Draft               GMP YANG model                 October 2014


                            container gmp-Static-Group {

                                leaf vrfName {
                                    description "Name of an GMP instance. If the name string is empty the instance means a public instance whose name is _public_.";
                                    config "true";
                                    mandatory "true";
                                    //default "_public_";
                                    type string {
                                        length "0..32";
                                    }
                                }
                                leaf addrFamily {
                                    description "Specify an address family, which determines whether an IPv4 or IPv6 address is used.";
                                    config "true";
                                    mandatory "true";
                                    type enumeration {
                                        enum ipv4unicast {
                                            value "0";
                                            description "Specify an address family, which determines whether an IPv4 or IPv6 address is used.";
                                        }
                                        enum ipv6unicast {
                                            value "1";
                                            description "Specify an address family, which determines whether an IPv4 or IPv6 address is used.";
                                        }
                                    }
                                }
                                leaf ifName {
                                    description "Interface name.";
                                    config "true";
                                    mandatory "true";
                                    type ifName;
                                }
                                leaf IPV4-staticGrp {
                                    description "Specifies the address of a static group.";
                                    config "true";
                                    mandatory "true";
                                    type inet:ipv4-address;
                                }
                                leaf IPV6-staticGrp {
                                    description "Specifies the address of a static group.";
                                    config "true";
                                    mandatory "true";
                                    type inet:ipv6-address;
                                }
                                leaf isSourceAddr {
                                    description "Whether an address is configured for the multicast source.";
                                    config "true";
                                    mandatory "true";



Liu & Guo                Expires April 25, 2015                [Page 16]


Internet-Draft               GMP YANG model                 October 2014


                                            type boolean {
                                            }
                                }
                                leaf IPV4-sourceAddr {
                                    description "Specifies the IPv4 address of a remote neighbor.";
                                    config "true";
                                    type inet:ipv4-address;
                                }
                                leaf IPV6-sourceAddr {
                                    description "Specifies the IPv6 address of a remote neighbor.";
                                    config "true";
                                    type inet:ipv6-address;
                                }
                                leaf isStepGrpMask {
                                    description "Determine whether to specify the step mask in batch configuration mode.";
                                    config "true";
                                    mandatory "true";
                                    type boolean {
                                    }
                                }
                                leaf IPV4-incStepGrpMask {
                                    description "Specify the step mask of a group address in batch configuration mode.";
                                    config "true";
                                    type inet:ipv4-address;
                                }
                                leaf IPV6-incStepGrpMask {
                                    description "Specify the step mask of a group address in batch configuration mode.";
                                    config "true";
                                    type inet:ipv6-address;
                                }
                                leaf isMaskLen {
                                    description "Determine whether to set the length for the step mask of a multicast group address in batch configuration mode. ";
                                    config "true";
                                    mandatory "true";
                                    type boolean {
                                    }
                                }
                                leaf maskLen {
                                    description "Specify the mask length of a multicast group address. In the case of an IPv4 address, the mask length ranges from 4 to 32. In the case of an IPv6 address, the mask length is 16/32/64/128.";
                                    config "true";
                                    type uint32 {
                                        range "0..128";
                                    }
                                }
                                leaf totalNum {
                                    description "Specify the number of multicast group addresses in batch configuration mode. It is an integer ranging from 2 to 512.";
                                    config "true";
                                    default "2";



Liu & Guo                Expires April 25, 2015                [Page 17]


Internet-Draft               GMP YANG model                 October 2014


                                    type uint32 {
                                        range "2..512";
                                    }
                                }
                            }
                        }
                    }

                }

            }

        }

    }
}

5.  IANA Considerations

   This draft includes no request to IANA.

6.  Security Considerations

   The data model defined does not create any security implications.
   This draft does not change any underlying security issues inherent in
   [I-D.ietf-netmod-routing-cfg].

7.  Acknowledgements

   TBD

8.  References

8.1.  Normative References

   [I-D.ietf-netmod-routing-cfg]
              Lhotka, L., "A YANG Data Model for Routing Management",
              draft-ietf-netmod-routing-cfg-15 (work in progress), May
              2014.

   [RFC1112]  Deering, S., "Host extensions for IP multicasting", STD 5,
              RFC 1112, August 1989.

   [RFC2236]  Fenner, W., "Internet Group Management Protocol, Version
              2", RFC 2236, November 1997.






Liu & Guo                Expires April 25, 2015                [Page 18]


Internet-Draft               GMP YANG model                 October 2014


   [RFC2710]  Deering, S., Fenner, W., and B. Haberman, "Multicast
              Listener Discovery (MLD) for IPv6", RFC 2710, October
              1999.

   [RFC3376]  Cain, B., Deering, S., Kouvelas, I., Fenner, B., and A.
              Thyagarajan, "Internet Group Management Protocol, Version
              3", RFC 3376, October 2002.

   [RFC3810]  Vida, R. and L. Costa, "Multicast Listener Discovery
              Version 2 (MLDv2) for IPv6", RFC 3810, June 2004.

   [RFC4604]  Holbrook, H., Cain, B., and B. Haberman, "Using Internet
              Group Management Protocol Version 3 (IGMPv3) and Multicast
              Listener Discovery Protocol Version 2 (MLDv2) for Source-
              Specific Multicast", RFC 4604, August 2006.

   [RFC4607]  Holbrook, H. and B. Cain, "Source-Specific Multicast for
              IP", RFC 4607, August 2006.

   [RFC6020]  Bjorklund, M., "YANG - A Data Modeling Language for the
              Network Configuration Protocol (NETCONF)", RFC 6020,
              October 2010.

   [RFC6241]  Enns, R., Bjorklund, M., Schoenwaelder, J., and A.
              Bierman, "Network Configuration Protocol (NETCONF)", RFC
              6241, June 2011.

8.2.  Informative References

   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119, March 1997.

Authors' Addresses

   Yisong Liu
   Huawei
   Huawei Bld., No.156 Beiqing Rd.
   Beijing  100095
   China

   Email: liuyisong@huawei.com










Liu & Guo                Expires April 25, 2015                [Page 19]


Internet-Draft               GMP YANG model                 October 2014


   Feng Guo
   Huawei
   Huawei Bld., No.156 Beiqing Rd.
   Beijing  100095
   China

   Email: guofeng@huawei.com












































Liu & Guo                Expires April 25, 2015                [Page 20]