huawei-igmp-mld

The module defines the configuration and operational state for the Internet Group Management Protocol (IGMP) and Multicast Liste...

  • Version: 2021-02-24

    huawei-igmp-mld@2021-02-24


    
      module huawei-igmp-mld {
    
        yang-version 1;
    
        namespace
          "urn:huawei:yang:huawei-igmp-mld";
    
        prefix igmp-mld;
    
        import huawei-acl {
          prefix acl;
        }
        import huawei-ethernet {
          prefix ethernet;
        }
        import huawei-ifm {
          prefix ifm;
        }
        import huawei-network-instance {
          prefix ni;
        }
        import huawei-l3-multicast {
          prefix l3mc;
        }
        import huawei-multicast {
          prefix mc;
        }
        import huawei-pub-type {
          prefix pub-type;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import huawei-extension {
          prefix ext;
        }
    
        organization
          "Huawei Technologies Co., Ltd.";
    
        contact
          "Huawei Industrial Base
    Bantian, Longgang
    Shenzhen 518129
    People's Republic of China
    Website: http://www.huawei.com
    Email: support@huawei.com";
    
        description
          "The module defines the configuration and operational state for
    the Internet Group Management Protocol (IGMP) and Multicast
    Listener Discovery (MLD) protocols.";
    
        revision "2021-02-24" {
          description
            "Add mld access-limit node.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-06-21" {
          description
            "Modify must restrictions for static-group configurations and on-demand-enable node. Modify the value of some enumeration type.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-03-04" {
          description
            "Add units for some nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-01-08" {
          description
            "Modify description; Add ssm-mapping-policy node; Add must for some nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-03-30" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "igmp";
    
        typedef querier-local-or-not {
          type enumeration {
            enum "reserved" {
              value 0;
              description "Reserved.";
            }
            enum "no-querier" {
              value 1;
              description "Not a querier.";
            }
            enum "this-router" {
              value 2;
              description "A local querier.";
            }
            enum "other-router" {
              value 3;
              description
                "Any querier instead of a local querier.";
            }
          }
          description
            "Whether a query is a local query.";
        }
    
        typedef timer-state-type {
          type enumeration {
            enum "off" {
              value 0;
              description "The off state.";
            }
            enum "on" {
              value 1;
              description "The on state.";
            }
            enum "reserved" {
              value 255;
              description "Reserved.";
            }
          }
          description "The status of a timer.";
        }
    
        typedef remote-backup-state-type {
          type enumeration {
            enum "remote-backup-disabled" {
              value 0;
              description
                "Remote Backup is disabled.";
            }
            enum "remote-backup-master" {
              value 1;
              description "Master state.";
            }
            enum "remote-backup-slave" {
              value 2;
              description "Backup state.";
            }
          }
          description "Remote backup state.";
        }
    
        typedef filter-mode-type {
          type enumeration {
            enum "include" {
              value 1;
              description "The Include mode.";
            }
            enum "exclude" {
              value 2;
              description "The Exclude mode.";
            }
            enum "reserved" {
              value 1610612735;
              description "Reserved.";
            }
          }
          description "Source filter mode.";
        }
    
        typedef if-state {
          type enumeration {
            enum "down" {
              value 1;
              description
                "The interface is Down.";
            }
            enum "up" {
              value 2;
              description "The interface is Up.";
            }
          }
          description
            "The status of an interface enabled with IGMP or MLD.";
        }
    
        grouping ipsec-config {
          description
            "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
          choice ipsec {
            description
              "Specify a security association (SA) to implement IP Security (IPsec) authentication.";
            case for-all {
              description
                "Specify an SA using to verify all messages types sent and received.";
              leaf sa-name {
                type string {
                  length "1..15";
                }
                description "SA name.";
              }
            }  // case for-all
    
            case for-query {
              description
                "Specify an SA using to verify query messages sent and received.";
              leaf query-sa-name {
                type string {
                  length "1..15";
                }
                description "SA name.";
              }
            }  // case for-query
          }  // choice ipsec
        }  // grouping ipsec-config
    
        grouping interface-status {
          description
            "Display IGMP/MLD status information on interfaces.";
          container status {
            config false;
            description
              "Operational state of IGMP/MLD on interfaces.";
            leaf address {
              type inet:ip-address-no-zone;
              description
                "Specify the IP address of an interface.";
            }
    
            leaf state {
              type if-state;
              description
                "Specify the status of an interface enabled with a protocol.";
            }
    
            leaf negotiate-query-interval {
              type uint32 {
                ext:value-meaning {
                  ext:item "1627389951" {
                    ext:meaning "-";
                  }
                }
              }
              units "s";
              description
                "Interval negotiated by non-queriers for sending query messages. The negotiated value is supported by IGMPv3 only.";
            }
    
            leaf other-querier-timeout {
              type uint32 {
                ext:value-meaning {
                  ext:item "1627389951" {
                    ext:meaning "-";
                  }
                }
              }
              units "s";
              description
                "Specify the timeout period of other queriers. The value is 0 on the interface that acts as the querier.";
            }
    
            leaf maximum-response-time {
              type uint32;
              units "s";
              description
                "Specify the maximum response time carried in a query message.";
            }
    
            leaf last-member-query-time {
              type uint32;
              units "s";
              description
                "Specify the timeout period for sending the last-member query message.";
            }
    
            leaf startup-query-interval {
              type uint32 {
                ext:value-meaning {
                  ext:item "1627389951" {
                    ext:meaning "-";
                  }
                }
              }
              units "s";
              description
                "Specify the interval at which an interface functioning as the querier sends query messages when it is started.";
            }
    
            leaf startup-query-count {
              type uint32 {
                ext:value-meaning {
                  ext:item "1627389951" {
                    ext:meaning "-";
                  }
                }
              }
              description
                "Specify the number of times that an interface functioning as the querier sends query messages when it is started.";
            }
    
            leaf querier-address {
              type inet:ip-address-no-zone;
              description
                "Specify the address of a querier.";
            }
    
            leaf is-local-querier {
              type querier-local-or-not;
              description
                "Whether a query is a local query.";
            }
    
            leaf joins {
              type uint32;
              description
                "Specify the number of groups that an interface has joined. When the interface joins a new group, the value increases by one; when the interface leaves a group, the value remains unchanged.";
            }
    
            leaf leaves {
              type uint32;
              description
                "Specify the number of groups that the interface leaves. Each time when the interface leaves a group, the value increases by one.";
            }
    
            leaf negotiated-robustness {
              type uint32 {
                ext:value-meaning {
                  ext:item "1627389951" {
                    ext:meaning "-";
                  }
                }
              }
              description
                "Specify the robustness variable negotiated by non-queriers. The value is supported by IGMPv3 only.";
            }
    
            leaf startup-query-timer-state {
              type timer-state-type;
              description
                "Specify the status of the timer for the interface functioning as the querier after being started. off: The interface immediately sends a query message after being started. on: The interface does not send a query message after being started.";
            }
    
            leaf other-querier-present-timer-state {
              type timer-state-type;
              description
                "Specify the status of the timer identifying whether another querier is present. Off: The interface considers itself as a querier and that no other queriers exist.";
            }
    
            leaf total-group-reported {
              type uint32;
              description
                "Specify the number of groups that the interface dynamically joins. When an interface dynamically joins a new multicast group, the value increases by one.";
            }
    
            leaf remote-backup-state {
              type remote-backup-state-type;
              description "Remote backup state.";
            }
          }  // container status
        }  // grouping interface-status
    
        grouping display-static-group {
          description
            "Display static multicast group information.";
          container display-static-groups {
            config false;
            description
              "List of static multicast group information.";
            list display-static-group {
              key "interface group-address";
              description
                "Operational state of static multicast group.";
              leaf interface {
                type leafref {
                  path
                    "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                }
                description
                  "Specify the name of an interface.";
              }
    
              leaf group-address {
                type inet:ip-address-no-zone;
                description
                  "Specify a multicast group address. In the case of an IPv4, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
              }
    
              leaf source-address {
                type inet:ip-address-no-zone;
                description
                  "Specify the address of a multicast source.";
              }
    
              leaf is-configured-boundary {
                type boolean;
                description
                  "Whether the multicast forwarding boundary is configured.";
              }
            }  // list display-static-group
          }  // container display-static-groups
        }  // grouping display-static-group
    
        grouping display-group {
          description
            "Display multicast group information.";
          container groups {
            config false;
            description
              "List of dynamic multicast group.";
            list group {
              key "interface group-address";
              description
                "Multicast group state.";
              leaf interface {
                type leafref {
                  path
                    "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                }
                description
                  "Specify the name of an interface.";
              }
    
              leaf group-address {
                type inet:ip-address-no-zone;
                description
                  "Specify a multicast group address. In the case of an IPv4 address, the value is in dotted decimal notation and ranges from 224.0.1.0 to 239.255.255.255; in the case of an IPv6 address, the value in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx (x ranges from 0 to F and A can be 0, or in the range of 3 to F).";
              }
    
              leaf last-report-address {
                type inet:ip-address-no-zone {
                }
                description
                  "Specify the host that sends the last report message.";
              }
    
              leaf up-time {
                type pub-type:time-tick;
                description
                  "Specify the time when a multicast group is discovered, in seconds.";
              }
    
              leaf expire-time {
                type pub-type:time-tick {
                }
                description
                  "Specify the scheduled time to remove a group from the group table. The value is expressed in seconds.";
              }
    
              leaf last-member-query-counter {
                type uint32;
                description
                  "Specify the number of times that the last member query message is transmitted.";
              }
    
              leaf last-member-query-timer {
                type pub-type:time-tick {
                }
                description
                  "Specify the timeout period for sending last member query messages.";
              }
    
              leaf source-filter-mode {
                type filter-mode-type;
                description
                  "Specify the group mode, exclude or include.";
              }
    
              leaf v1-host-timer {
                type pub-type:time-tick {
                }
                description
                  "Specify the timeout period of an v1 host.";
              }
    
              leaf v2-host-timer {
                type pub-type:time-tick {
                }
                description
                  "Specify the timeout period of an v2 host.";
              }
    
              leaf is-ssm-mapping {
                type boolean;
                description
                  "Identifies an SSM mapping-enabled group.";
              }
    
              container sources {
                description
                  "List of dynamic multicast source.";
                list source {
                  key "source-address";
                  description
                    "Dynamic multicast source state.";
                  leaf source-address {
                    type inet:ip-address-no-zone;
                    description
                      "Specify the address of a multicast source.";
                  }
    
                  leaf up-time {
                    type pub-type:time-tick;
                    description
                      "Specify the time when a multicast source is discovered.";
                  }
    
                  leaf expire-time {
                    type pub-type:time-tick {
                    }
                    description
                      "Specify the time left to delete records from the source table.";
                  }
    
                  leaf last-member-query-counter {
                    type uint32;
                    description
                      "Specify the number of times that the last member query message is transmitted.";
                  }
    
                  leaf last-member-query-timer {
                    type pub-type:time-tick {
                    }
                    description
                      "Specify the timeout period for sending last member query messages.";
                  }
                }  // list source
              }  // container sources
            }  // list group
          }  // container groups
        }  // grouping display-group
    
        augment /mc:multicast {
          description
            "Adds igmp/mld configuration to the multicast module.";
          container igmp {
            description
              "Configure global IGMP configurations.";
            container disable-dhcp-stb-packet-copys {
              description
                "List of remote backup profile that disable the master device uses to replicate IGMP messages from DHCP STBs for the backup device.";
              list disable-dhcp-stb-packet-copy {
                key "rbp-name";
                description
                  "Configure IGMP message backup profile for IPoE users.";
                leaf rbp-name {
                  type string {
                    length "1..128";
                    pattern '[0-9a-z_.\-]+';
                  }
                  description
                    "Remote backup profile name.";
                }
              }  // list disable-dhcp-stb-packet-copy
            }  // container disable-dhcp-stb-packet-copys
          }  // container igmp
        }
    
        augment /ni:network-instance/ni:instances/ni:instance {
          description
            "Adds igmp/mld configuration to the l3vpn module.";
          container igmp {
            when "../l3mc:multicast/l3mc:ipv4";
            description
              "Configure IGMP configurations.";
            container global {
              presence "Create IGMP.";
              description
                "Enable/disable IGMP in an instance.";
              leaf query-interval {
                type uint32 {
                  range "1..18000";
                }
                units "s";
                default "60";
                description
                  "Specify the interval at which the device sends general query messages.";
              }
    
              leaf query-response-interval {
                type uint32 {
                  range "1..125";
                }
                units "s";
                default "10";
                description
                  "Specify the maximum response time for a query message.";
              }
    
              leaf robustness {
                type uint32 {
                  range "2..5";
                }
                default "2";
                description
                  "Specify the number of times for retransmitting a message to avoid the packet loss.";
              }
    
              leaf last-member-query-interval {
                type uint32 {
                  range "1..25";
                }
                units "s";
                default "1";
                description
                  "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs IGMPv2 or IGMPv3.";
              }
    
              leaf require-router-alert {
                type boolean;
                default "false";
                description
                  "Enable/disable the router to process the messages whose IP headers contain Router-Alert options globally.";
              }
    
              leaf send-router-alert {
                type boolean;
                default "true";
                description
                  "Enable/disable the router to send the messages with Router-Alert options in the IP headers globally.";
              }
    
              leaf other-querier-present-time {
                type uint32 {
                  range "60..300";
                }
                units "s";
                description
                  "Set the global Keepalive period for other queriers.";
              }
    
              uses ipsec-config;
    
              leaf ssm-mapping-dns-domain {
                type string {
                  length "1..63";
                }
                default "in-addr.arpa";
                description
                  "Specify the name extension of DNS.";
              }
    
              leaf ssm-mapping-query-dns {
                type boolean;
                default "false";
                description
                  "Enable/disable that whether SSM-mapping is based on DNS.";
              }
    
              leaf ssm-mapping-query-dns-policy {
                when
                  "../ssm-mapping-query-dns='true'";
                type leafref {
                  path "/acl:acl/acl:groups/acl:group/acl:identity";
                }
                must
                  "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                description
                  "Configure and filter the acl name of DNS ssm-mapping.";
              }
    
              container ssm-mappings {
                description
                  "List of SSM-mapping rules.";
                list ssm-mapping {
                  key "group-address mask-length source-address";
                  description
                    "Configure SSM-mapping rules.";
                  leaf group-address {
                    type inet:ipv4-address-no-zone {
                      pattern
                        '(22[4-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                    }
                    description
                      "Specify the address of a multicast group. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                  }
    
                  leaf mask-length {
                    type uint32 {
                      range "5..32";
                    }
                    description
                      "Specify the mask length of a multicast group address.";
                  }
    
                  leaf source-address {
                    type inet:ipv4-address-no-zone {
                      pattern
                        '(12[0-6]|1[0-1]\d|[1-9]\d|[1-9])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|(12[8-9]|1[3-9]\d|2[0-1]\d|22[0-3])(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                    }
                    description
                      "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                  }
                }  // list ssm-mapping
              }  // container ssm-mappings
            }  // container global
    
            container interfaces {
              description
                "List of MGMD configurations on interfaces.";
              list interface {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                key "name";
                description
                  "Configure MGMD on an interface.";
                leaf name {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the type and number of an interface.";
                }
    
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable protocols on an interface.";
                }
    
                leaf ip-source-policy-enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable 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.";
                }
    
                leaf ip-source-policy-name {
                  when
                    "../ip-source-policy-enable='true'";
                  type leafref {
                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                  }
                  must
                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                  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.";
                }
    
                leaf query-interval {
                  type uint32 {
                    range "1..18000";
                  }
                  units "s";
                  default "60";
                  description
                    "Specify the interval at which the device sends general query messages.";
                }
    
                leaf query-response-interval {
                  type uint32 {
                    range "1..125";
                  }
                  units "s";
                  default "10";
                  description
                    "Specify the maximum time for the response to a query message. This time is used to control the deadline of a host's group membership feedback.";
                }
    
                leaf robustness {
                  type uint32 {
                    range "2..5";
                  }
                  default "2";
                  description
                    "Specify the number of times for retransmitting messages to avoid packet loss.";
                }
    
                leaf version {
                  ext:operation-exclude "update" {
                    when "../on-demand-enable='true'";
                    description "The version configuration cannot be changed when On-Demand is running on the interface.";
                  }
                  type uint32 {
                    range "1..3";
                  }
                  default "2";
                  description
                    "Specify the version of IGMP running on an interface.";
                }
    
                leaf last-member-query-interval {
                  type uint32 {
                    range "1..25";
                  }
                  units "s";
                  default "1";
                  description
                    "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs IGMPv2 or IGMPv3.";
                }
    
                leaf require-router-alert {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable an interface to process messages whose IP headers contain Router-Alert options.";
                }
    
                leaf send-router-alert {
                  type boolean;
                  default "true";
                  description
                    "Enable/disable an interface to send the messages with Router-Alert options in the IP headers.";
                }
    
                leaf other-querier-present-time {
                  type uint32 {
                    range "60..300";
                  }
                  units "s";
                  description
                    "Set the Keepalive period for other queriers on an interface.";
                }
    
                leaf immediately-leave {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable 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.";
                }
    
                leaf immediately-leave-policy {
                  when
                    "../immediately-leave='true'";
                  type leafref {
                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                  }
                  must
                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                  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 case-sensitive string.";
                }
    
                leaf on-demand-enable {
                  type boolean;
                  must
                    "../on-demand-enable='false' or ../version!='1'";
                  must
                    "../on-demand-enable='false' or /ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/../name]/ifm:type!='Virtual-Template'";
                  default "false";
                  description
                    "Enable/disable records about the groups that the interface joins never to age. By default, the group records age periodically. 1. This command is applicable to IGMPv2, IGMPv3 only. 2. This command can be used on the querier only.";
                }
    
                leaf entry-limit {
                  type uint32 {
                    range "1..16384";
                  }
                  description
                    "Specify the maximum number of entries that the current interface can create.";
                }
    
                leaf entry-limit-acl-name {
                  when "../entry-limit>0";
                  type leafref {
                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                  }
                  must
                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                  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) entries; the advanced ACL number ranges from 3000 to 3999. The advanced ACL filters (S, G) entries of the interface only. The name is a case-sensitive string.";
                }
    
                leaf ssm-mapping-enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable SSM mapping on an interface.";
                }
    
                leaf ssm-mapping-policy {
                  when
                    "../ssm-mapping-enable='true'";
                  type string {
                    length "1..31";
                  }
                  description
                    "Configure a policy for SSM Mapping on an interface.";
                }
    
                leaf group-acl-name {
                  type leafref {
                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                  }
                  must
                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'";
                  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 case-sensitive string.";
                }
    
                leaf group-acl-version {
                  when "../group-acl-name";
                  type uint32 {
                    range "1..3";
                  }
                  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.";
                }
    
                leaf query-acl-name {
                  type leafref {
                    path "/acl:acl/acl:groups/acl:group/acl:identity";
                  }
                  must
                    "/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'";
                  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.";
                }
    
                uses ipsec-config;
    
                uses interface-status;
              }  // list interface
            }  // container interfaces
    
            container static-groups {
              description
                "List of static multicast groups configurations.";
              list static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask is-source-dns-ssm-mapping";
                description
                  "Configure a static multicast group.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  must
                    "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:main-interface/ethernet:l2-attribute)";
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv4-address-no-zone {
                    pattern
                      '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                }
    
                leaf is-source-address {
                  type boolean;
                  must
                    "../is-source-address='false' or (../is-source-dns-ssm-mapping='false' and ../source-address!='0.0.0.0')";
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv4-address-no-zone;
                  must
                    "../source-address='0.0.0.0' or ../is-source-address='true'";
                  description
                    "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                }
    
                leaf is-inc-step-group-mask {
                  type boolean;
                  must
                    "../is-inc-step-group-mask='false' or (../is-source-dns-ssm-mapping='false' and ../inc-step-group-mask!='0.0.0.0')";
                  description
                    "Enable/disable a device to specify the step mask in batch configuration mode.";
                }
    
                leaf inc-step-group-mask {
                  type inet:ipv4-address-no-zone;
                  must
                    "../inc-step-group-mask='0.0.0.0' or ../is-inc-step-group-mask='true'";
                  description
                    "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                }
    
                leaf is-source-dns-ssm-mapping {
                  type boolean;
                  must
                    "../is-source-dns-ssm-mapping='false' or (../is-source-address='false' and ../is-inc-step-group-mask='false')";
                  description
                    "Enable/disable an DNS based SSM mapping.";
                }
    
                leaf group-number {
                  when
                    "../is-inc-step-group-mask='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses in batch configuration mode.";
                }
              }  // list static-group
            }  // container static-groups
    
            container dot1q-static-groups {
              description
                "List of static multicast groups in dot1q-termination interface.";
              list dot1q-static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                must
                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination";
                must "begin-vid<=end-vid";
                key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask begin-vid end-vid";
                description
                  "Configure a static multicast group in a dot1q-termination interface.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv4-address-no-zone {
                    pattern
                      '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                }
    
                leaf is-source-address {
                  type boolean;
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv4-address-no-zone;
                  must
                    "../source-address='0.0.0.0' or ../is-source-address='true'";
                  must
                    "../source-address!='0.0.0.0' or ../is-source-address='false'";
                  description
                    "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                }
    
                leaf is-inc-step-group-mask {
                  type boolean;
                  description
                    "Enable/disable a device to specify the step mask in batch configuration mode.";
                }
    
                leaf inc-step-group-mask {
                  type inet:ipv4-address-no-zone;
                  must
                    "(../is-inc-step-group-mask='true' and ../inc-step-group-mask!='0.0.0.0') or (../is-inc-step-group-mask='false' and ../inc-step-group-mask='0.0.0.0')";
                  description
                    "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                }
    
                leaf begin-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the start DOT1Q tag.";
                }
    
                leaf end-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the end DOT1Q tag.";
                }
    
                leaf group-number {
                  when
                    "../is-inc-step-group-mask='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses configured in a batch.";
                }
              }  // list dot1q-static-group
            }  // container dot1q-static-groups
    
            container qinq-static-groups {
              description
                "List of static multicast groups configuration on qinq-termination interface.";
              list qinq-static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                must
                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                must "ce-begin-vid<=ce-end-vid";
                key "interface group-address is-source-address source-address is-inc-step-group-mask inc-step-group-mask pe-vid ce-begin-vid ce-end-vid";
                description
                  "Configure a static multicast group on a qinq-termination interface.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv4-address-no-zone {
                    pattern
                      '(22[5-9]|23\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}|224(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){2}|224\.0(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|[1-9]))(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv4 address, the value ranges from 224.0.1.0 to 239.255.255.255, in dotted decimal notation.";
                }
    
                leaf is-source-address {
                  type boolean;
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv4-address-no-zone;
                  must
                    "../source-address='0.0.0.0' or ../is-source-address='true'";
                  must
                    "../source-address!='0.0.0.0' or ../is-source-address='false'";
                  description
                    "Specify the address of a multicast source. In the case of an IPv4 address, the value is in dotted decimal notation.";
                }
    
                leaf is-inc-step-group-mask {
                  type boolean;
                  description
                    "Enable/disable a device to specify the step mask in batch configuration mode.";
                }
    
                leaf inc-step-group-mask {
                  type inet:ipv4-address-no-zone;
                  must
                    "(../is-inc-step-group-mask='true' and ../inc-step-group-mask!='0.0.0.0')  or (../is-inc-step-group-mask='false' and ../inc-step-group-mask='0.0.0.0')";
                  description
                    "Specify the step mask of a group address in batch configuration mode. It refers to the step between two neighboring multicast group addresses. The value is expressed in wildcard-mask mode and in dotted decimal notation, ranging from 0.0.0.1 to 15.255.255.255.";
                }
    
                leaf pe-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "QINQ PE ID in an outer VLAN tag.";
                }
    
                leaf ce-begin-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the start QINQ CE ID.";
                }
    
                leaf ce-end-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the end QINQ CE ID.";
                }
    
                leaf group-number {
                  when
                    "../is-inc-step-group-mask='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses configured in a batch.";
                }
              }  // list qinq-static-group
            }  // container qinq-static-groups
    
            uses display-static-group;
    
            uses display-group;
          }  // container igmp
    
          container mld {
            when "../l3mc:multicast/l3mc:ipv6";
            description
              "Configure MLD configurations.";
            container global {
              presence "Create MLD.";
              description
                "Enable/disable MLD in an instance.";
              leaf query-interval {
                type uint32 {
                  range "1..18000";
                }
                units "s";
                default "125";
                description
                  "Specify the interval at which the device sends general query messages.";
              }
    
              leaf query-response-interval {
                type uint32 {
                  range "1..125";
                }
                units "s";
                default "10";
                description
                  "Specify the maximum response time for a query message.";
              }
    
              leaf robustness {
                type uint32 {
                  range "2..5";
                }
                default "2";
                description
                  "Specify the number of times for retransmitting a message to avoid the packet loss.";
              }
    
              leaf last-member-query-interval {
                type uint32 {
                  range "1..25";
                }
                units "s";
                default "1";
                description
                  "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs MLD.";
              }
    
              leaf require-router-alert {
                type boolean;
                default "false";
                description
                  "Enable/disable the router to process the messages whose IP headers contain Router-Alert options globally.";
              }
    
              leaf send-router-alert {
                type boolean;
                default "true";
                description
                  "Enable/disable the router to send the messages with Router-Alert options in the IP headers globally.";
              }
    
              leaf other-querier-present-time {
                type uint32 {
                  range "60..300";
                }
                units "s";
                description
                  "Set the global Keepalive period for other queriers.";
              }
    
              uses ipsec-config;
    
              container ssm-mappings {
                description
                  "List of SSM-mapping rules configurations.";
                list ssm-mapping {
                  key "group-address mask-length source-address";
                  description
                    "Configure a SSM-mapping rule.";
                  leaf group-address {
                    type inet:ipv6-address-no-zone {
                      pattern
                        '([Ff]{2}[0-9a-fA-F]{2})[0-9a-fA-F:\.]*';
                    }
                    description
                      "Specify the address of a multicast group. In the case of an IPv6 address, the value ranges from FF00:: to FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, in the hexadecimal format.";
                  }
    
                  leaf mask-length {
                    type uint32 {
                      range "16 | 32 | 64 | 128";
                    }
                    description
                      "Specify the mask length of a multicast group address.";
                  }
    
                  leaf source-address {
                    type inet:ipv6-address-no-zone {
                      pattern
                        '(([1-9A-Ea-e][0-9A-Fa-f]{3}:)|([Ff][0-9A-Da-d][0-9A-Fa-f]{2}:)|([Ff][Ee][0-7C-Fc-f][0-9A-Fa-f]:)|((0)?[1-9A-Fa-f][0-9A-Fa-f]{2}:)|((00)?[1-9A-Fa-f][0-9A-Fa-f]:)|((000)?[1-9A-Fa-f]:)).+';
                    }
                    description
                      "Specify the address of a multicast source. In the case of an IPv6 address, the value ranges from FF00:: to FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF, in hexadecimal notation.";
                  }
                }  // list ssm-mapping
              }  // container ssm-mappings
            }  // container global
    
            container interfaces {
              description
                "List of MGMD configurations on all interfaces.";
              list interface {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/name]/ifm:vrf-name";
                key "name";
                description
                  "Configure MGMD on an interface.";
                leaf name {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the type and number of an interface.";
                }
    
                leaf enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable protocols on an interface.";
                }
    
                leaf ip-source-policy-enable {
                  type boolean;
                  must
                    "../ip-source-policy-enable='false' or ../ip-source-policy-name";
                  default "false";
                  description
                    "Enable/disable a policy for filtering MLD Report messages based on host addresses.";
                }
    
                leaf ip-source-policy-name {
                  when
                    "../ip-source-policy-enable='true'";
                  type leafref {
                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                  }
                  must
                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                  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.";
                }
    
                leaf query-interval {
                  type uint32 {
                    range "1..18000";
                  }
                  units "s";
                  default "125";
                  description
                    "Specify the interval at which the device sends general query messages.";
                }
    
                leaf query-response-interval {
                  type uint32 {
                    range "1..125";
                  }
                  units "s";
                  default "10";
                  description
                    "Specify the maximum time for the response to a query message. This time is used to control the deadline of a host's group membership feedback.";
                }
    
                leaf robustness {
                  type uint32 {
                    range "2..5";
                  }
                  default "2";
                  description
                    "Specify the number of times for retransmitting messages to avoid packet loss.";
                }
    
                leaf version {
                  ext:operation-exclude "update" {
                    when "../on-demand-enable='true'";
                    description "The version configuration cannot be changed when On-Demand is running on the interface.";
                  }
                  type uint32 {
                    range "1..2";
                  }
                  default "2";
                  description
                    "Specify the version of MLD running on an interface.";
                }
    
                leaf last-member-query-interval {
                  type uint32 {
                    range "1..25";
                  }
                  units "s";
                  default "1";
                  description
                    "Specify the interval at which the querier sends last-member query messages. This parameter makes sense only when the current querier runs MLD.";
                }
    
                leaf require-router-alert {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable an interface to process messages whose IP headers contain Router-Alert options.";
                }
    
                leaf send-router-alert {
                  type boolean;
                  default "true";
                  description
                    "Enable/disable an interface to send the messages with Router-Alert options in the IP headers.";
                }
    
                leaf other-querier-present-time {
                  type uint32 {
                    range "60..300";
                  }
                  units "s";
                  description
                    "Set the Keepalive period for other queriers on an interface. The value ranges from 60 to 300, in second.";
                }
    
                leaf immediately-leave {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable 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.";
                }
    
                leaf immediately-leave-policy {
                  when
                    "../immediately-leave='true'";
                  type leafref {
                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                  }
                  must
                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                  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 case-sensitive string.";
                }
    
                leaf on-demand-enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable records about the groups that the interface joins never to age. By default, the group records age periodically. 1. This command is applicable to MLD only. 2. This command can be used on the querier only.";
                }
    
                leaf entry-limit {
                  type uint32 {
                    range "1..16384";
                  }
                  description
                    "Specify the maximum number of entries that the current interface can create.";
                }
    
                leaf entry-limit-acl-name {
                  when "../entry-limit>0";
                  type leafref {
                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                  }
                  must
                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                  description
                    "Specify the range of multicast groups, the number of MLD 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) entries; the advanced ACL number ranges from 3000 to 3999. The advanced ACL filters (S, G) entries of the interface only. The name is a case-sensitive string.";
                }
    
                leaf ssm-mapping-enable {
                  type boolean;
                  default "false";
                  description
                    "Enable/disable SSM mapping on an interface.";
                }
    
                leaf group-acl-name {
                  type leafref {
                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                  }
                  must
                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic' or /acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                  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 case-sensitive string.";
                }
    
                leaf group-acl-version {
                  when "../group-acl-name";
                  type uint32 {
                    range "1..2";
                  }
                  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.";
                }
    
                leaf query-acl-name {
                  type leafref {
                    path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                  }
                  must
                    "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                  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.";
                }
    
                uses ipsec-config;
    
                uses interface-status;
              }  // list interface
            }  // container interfaces
    
            container static-groups {
              description
                "List of static multicast groups configurations on interfaces.";
              list static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                key "interface group-address is-source-address source-address is-mask-length mask-length";
                description
                  "Configure a static multicast group.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  must
                    "not(/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ethernet:ethernet/ethernet:main-interface/ethernet:l2-attribute)";
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv6-address-no-zone {
                    pattern
                      '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                }
    
                leaf is-source-address {
                  type boolean;
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv6-address-no-zone;
                  must
                    "../source-address='::' or ../is-source-address='true'";
                  must
                    "../source-address!='::' or ../is-source-address='false'";
                  description
                    "Specify the address of a multicast source.";
                }
    
                leaf is-mask-length {
                  type boolean;
                  description
                    "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                }
    
                leaf mask-length {
                  type uint32 {
                    range "0..128";
                  }
                  must
                    "../mask-length=0 or ../is-mask-length='true'";
                  description
                    "Specify the mask length of a multicast group address. In the case of an IPv6 address, the mask length is 16/32/64/128.";
                }
    
                leaf total-number {
                  when
                    "../is-mask-length='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses in batch configuration mode.";
                }
              }  // list static-group
            }  // container static-groups
    
            container dot1q-static-groups {
              description
                "List of static multicast groups on dot1q-termination interfaces.";
              list dot1q-static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                must
                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:dot1q-termination";
                must "begin-vid<=end-vid";
                key "interface group-address is-source-address source-address is-mask-length mask-length begin-vid end-vid";
                description
                  "Configure a static multicast group on a dot1q-termination interface.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv6-address-no-zone {
                    pattern
                      '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                }
    
                leaf is-source-address {
                  type boolean;
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv6-address-no-zone;
                  must
                    "../source-address='::' or ../is-source-address='true'";
                  must
                    "../source-address!='::' or ../is-source-address='false'";
                  description
                    "Specify the address of a multicast source.";
                }
    
                leaf is-mask-length {
                  type boolean;
                  description
                    "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                }
    
                leaf mask-length {
                  type uint32 {
                    range "0..128";
                  }
                  must
                    "(../is-mask-length='true' and ../mask-length>=9) or (../is-mask-length='false' and ../mask-length=0)";
                  description
                    "Specify the step mask length of a multicast group address. An IPv6 address uses a mask with a length of 16, 32, 64, or 128 bits.";
                }
    
                leaf begin-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the start DOT1Q tag.";
                }
    
                leaf end-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the end DOT1Q tag.";
                }
    
                leaf group-number {
                  when
                    "../is-mask-length='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses configured in a batch.";
                }
              }  // list dot1q-static-group
            }  // container dot1q-static-groups
    
            container qinq-static-groups {
              description
                "List of static multicast groups configuration on qinq-termination interfaces.";
              list qinq-static-group {
                must
                  "../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ifm:vrf-name";
                must
                  "/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()/interface]/ethernet:ethernet/ethernet:l3-sub-interface/ethernet:qinq-termination";
                must "ce-begin-vid<=ce-end-vid";
                key "interface group-address is-source-address source-address is-mask-length mask-length pe-vid ce-begin-vid ce-end-vid";
                description
                  "Configure a static multicast group.";
                leaf interface {
                  type leafref {
                    path
                      "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                  }
                  description
                    "Specify the name of an interface.";
                }
    
                leaf group-address {
                  type inet:ipv6-address-no-zone {
                    pattern
                      '[Ff]{2}[0-9A-Fa-f][03-9a-fA-F].+';
                  }
                  description
                    "Specify the address of a multicast group. In batch configuration mode, this parameter specifies the start multicast group address. In the case of an IPv6 address, the value is in hexadecimal notation and in the format of FFxA:xxxx:xxxx::xxxx, among which x ranges from 0 to F and A can be 0, or in the range of 3 to F.";
                }
    
                leaf is-source-address {
                  type boolean;
                  description
                    "Enable/disable a device to configure an address for the multicast source.";
                }
    
                leaf source-address {
                  type inet:ipv6-address-no-zone;
                  must
                    "../source-address='::' or ../is-source-address='true'";
                  must
                    "../source-address!='::' or ../is-source-address='false'";
                  description
                    "Specify the address of a multicast source.";
                }
    
                leaf is-mask-length {
                  type boolean;
                  description
                    "Enable/disable a device to specify the length for the step mask of a multicast group address in batch configuration mode.";
                }
    
                leaf mask-length {
                  type uint32 {
                    range "0..128";
                  }
                  must
                    "(../is-mask-length='true' and ../mask-length>=9) or (../is-mask-length='false' and ../mask-length=0)";
                  description
                    "Specify the step mask length of a multicast group address. An IPv6 address uses a mask with a length of 16, 32, 64, or 128 bits.";
                }
    
                leaf pe-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "QINQ PE ID in an outer VLAN tag.";
                }
    
                leaf ce-begin-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the start QINQ CE ID.";
                }
    
                leaf ce-end-vid {
                  type uint32 {
                    range "1..4094";
                  }
                  description
                    "Specify the end QINQ CE ID.";
                }
    
                leaf group-number {
                  when
                    "../is-mask-length='true'";
                  type uint32 {
                    range "2..512";
                  }
                  mandatory true;
                  description
                    "Specify the number of multicast group addresses configured in a batch.";
                }
              }  // list qinq-static-group
            }  // container qinq-static-groups
    
            uses display-static-group;
    
            uses display-group;
          }  // container mld
        }
      }  // module huawei-igmp-mld
    

© 2023 YumaWorks, Inc. All rights reserved.