huawei-pim

Protocol Independent Multicast.

  • Version: 2021-07-29

    huawei-pim@2021-07-29


    
      module huawei-pim {
    
        yang-version 1;
    
        namespace "urn:huawei:yang:huawei-pim";
    
        prefix pim;
    
        import huawei-ifm {
          prefix ifm;
        }
        import huawei-network-instance {
          prefix ni;
        }
        import huawei-pub-type {
          prefix pub-type;
        }
        import ietf-inet-types {
          prefix inet;
        }
        import huawei-extension {
          prefix ext;
        }
        import huawei-acl {
          prefix acl;
        }
        import huawei-multicast {
          prefix mc;
        }
        import huawei-l3-multicast {
          prefix l3mc;
        }
    
        include huawei-pim-type;
    
        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
          "Protocol Independent Multicast.";
    
        revision "2021-07-29" {
          description
            "Add invalid-messages container.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-03-16" {
          description
            "Modify description. Delete bsr-policy-name and bsr-policy-name6. Add one key for claim-routing. Modify the type and the must conditions of some nodes that reference ACL. Modify the when conditions for ipsec-type and some nodes that reference ACL. Add a must condition for backup-rpf-switch-holdtime. Add dynamic default for bfd-min-rx and bfd-min-tx.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-02-11" {
          description "Modify units.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-02-07" {
          description
            "Modify c-bsr nodes. Modify message-statistics nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2020-01-19" {
          description "Modify units.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-12-12" {
          description "Modify protocol nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-12-05" {
          description "Modify rp nodes.";
          reference
            "Huawei private.";
    
        }
    
        revision "2019-05-06" {
          description "Initial revision.";
          reference
            "Huawei private.";
    
        }
    
        ext:task-name "pim";
    
        augment /ni:network-instance/ni:instances/ni:instance {
          description
            "Adds PIM configuration to the L3VPN module.";
          container pim {
            description
              "Configure PIM (Protocol Independent Multicast) in the instance.";
            container rp {
              description
                "Configure PIM RP configurations.";
              container c-bsr-vpns {
                description
                  "List of BSR configurations.";
                list c-bsr-vpn {
                  key "type";
                  description "Configure BSR.";
                  leaf type {
                    type addr-family-type;
                    must
                      "../../../../pim:protocol/pim:instances/pim:instance[pim:type=current()]";
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf if-name {
                    when "../type='ipv4unicast'";
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    description
                      "Interface name of a C-BSR. PIM-SM must be enabled on the interface to make the C-BSR take effect.";
                  }
    
                  leaf if-addr {
                    when "../type='ipv6unicast'";
                    type inet:ipv6-address-no-zone;
                    description
                      "Global IPv6 unicast address of the C-BSR.";
                  }
    
                  leaf hold-time {
                    type uint32 {
                      range "1..214748364";
                    }
                    units "s";
                    default "130";
                    description
                      "Timeout period (called holdtime) during which C-BSRs wait to receive bootstrap messages from the BSR. To prevent frequent BSR elections, set the same holdtime for all C-BSRs in the same domain. If an interval (called BS_interval) at which bootstrap messages are sent has been set for C-BSRs, ensure that the specified holdtime is larger than the BS_interval.";
                  }
    
                  leaf interval {
                    type uint32 {
                      range "1..107374177";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval (called BS_interval) at which a BSR continuously sends bootstrap messages. To prevent frequent BSR elections, set the same BS_interval for all C-BSRs in the same domain. If a timeout period (called holdtime) during which C-BSRs wait to receive bootstrap messages from the BSR has been set for C-BSRs, ensure that the specified BS_interval is smaller than the holdtime.";
                  }
    
                  leaf hash-len {
                    ext:dynamic-default {
                      ext:default-value "30" {
                        when "../type='ipv4unicast'";
                        description "In IPv4, the default value is 30.";
                      }
                      ext:default-value "126" {
                        when "../type='ipv6unicast'";
                        description "In IPv6, the default value is 126.";
                      }
                    }
                    type uint32 {
                      range "0..128";
                    }
                    description
                      "Global hash mask length for a C-BSR.
                     In IPv4, the value is an integer ranging from 0 to 32, and the default value is 30. In IPv6, the value is an integer ranging from 0 to 128, and the default value is 126.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    default "0";
                    description
                      "Globally specify a priority for all C-BSRs on the router. The greater the value, the higher the priority.";
                  }
    
                  leaf policy-name {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Policy for limiting the range of valid BSR addresses so that a router discards the messages received from the BSRs not in the specified address range.";
                  }
    
                  leaf policy-name6 {
                    when "../type='ipv6unicast'";
                    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
                      "Policy for limiting the range of valid BSR addresses so that a router discards the messages received from the BSRs not in the specified address range.";
                  }
    
                  leaf admin-scope {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable a device to divide one PIM-SM domain into multiple BSR administrative domains to implement RP-Set advertisement. By default, there is only one BSR in the entire PIM-SM domain.";
                  }
    
                  leaf global-enable {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable C-BSR in the global domain. By default, no C-BSR is configured in the global domain.";
                  }
    
                  leaf global-hash-len {
                    when
                      "../global-enable='true'";
                    type uint32 {
                      range "0..32";
                    }
                    default "30";
                    description
                      "Hash mask length for the C-BSR in the global domain.";
                  }
    
                  leaf global-priority {
                    when
                      "../global-enable='true'";
                    type uint32 {
                      range "0..255";
                    }
                    default "0";
                    description
                      "Priority for the C-BSR in the global domain. The greater the value, the higher the priority.";
                  }
    
                  leaf c-rp-hold-time {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "150";
                    description
                      "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                  }
    
                  leaf c-rp-priority {
                    ext:dynamic-default {
                      ext:default-value "0" {
                        when "../type='ipv4unicast'";
                        description "In IPv4, the default value is 0.";
                      }
                      ext:default-value "192" {
                        when "../type='ipv6unicast'";
                        description "In IPv6, the default value is 192.";
                      }
                    }
                    type uint32 {
                      range "0..255";
                    }
                    description
                      "Global priority for C-RPs. The greater the value, the lower the priority. In IPv4, the value is an integer ranging from 0 to 255, and the default value is 0. In IPv6, the value is an integer ranging from 0 to 255, and the default value is 192.";
                  }
    
                  leaf c-rp-ad-interval {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which a C-RP periodically sends Advertisement messages.";
                  }
    
                  leaf c-rp-policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "Policy for limiting the range of valid C-RP addresses and the range of multicast groups that each C-RP serves. The BSR configured with a C-RP filter policy discards messages received from the C-RPs whose addresses are not in the specified address range, thus preventing C-RP spoofing.";
                  }
    
                  leaf c-rp-policy6 {
                    when "../type='ipv6unicast'";
                    type leafref {
                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                    }
                    must
                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                    description
                      "Policy for limiting the range of valid C-RP addresses and the range of multicast groups that each C-RP serves. The BSR configured with a C-RP filter policy discards messages received from the C-RPs whose addresses are not in the specified address range, thus preventing C-RP spoofing.";
                  }
    
                  leaf is-fragable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the C-BSR message fragmentation function.";
                  }
                }  // list c-bsr-vpn
              }  // container c-bsr-vpns
    
              container ipv4-c-bsr-groups {
                when
                  "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                description
                  "List of C-BSR group ranges.";
                list ipv4-c-bsr-group {
                  key "group-addr group-mask";
                  max-elements 64;
                  description
                    "Configure range of C-BSR groups. PIM-SM must be enabled on the interface to make the C-BSR take effect.";
                  leaf group-addr {
                    type inet:ipv4-address-no-zone {
                      pattern
                        '(239)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}';
                    }
                    description
                      "Multicast group address. The value ranges from 239.0.0.0 to 239.255.255.255.";
                  }
    
                  leaf group-mask {
                    type inet:ipv4-address-no-zone;
                    description
                      "Mask of a group address. The value is in dotted decimal notation.";
                  }
    
                  leaf hash-length {
                    type uint32 {
                      range "0..32";
                    }
                    default "30";
                    description
                      "Hash length of a C-BSR.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    default "0";
                    description
                      "Priority of a C-BSR in the BSR administrative domain that serves a specific multicast group. The greater the value, the higher the priority.";
                  }
                }  // list ipv4-c-bsr-group
              }  // container ipv4-c-bsr-groups
    
              container ipv4-c-rp-ifs {
                when
                  "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                description
                  "List of C-RP IPv4 configurations.";
                list ipv4-c-rp-if {
                  key "if-name";
                  description
                    "Configure C-RP IPv4 configuration. PIM-SM must be enabled on the interface to make the C-RP take effect.";
                  leaf if-name {
                    type leafref {
                      path
                        "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    description
                      "Name of a C-RP interface.";
                  }
    
                  leaf group-policy {
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Policy for limiting the range of valid group addresses. With this policy, a router discards messages received from the addresses not in the specified range.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    default "0";
                    description
                      "Priority of a C-RP. The greater the value, the lower the priority.";
                  }
    
                  leaf hold-time {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "150";
                    description
                      "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                  }
    
                  leaf ad-interval {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which a C-RP sends Advertisement messages.";
                  }
                }  // list ipv4-c-rp-if
              }  // container ipv4-c-rp-ifs
    
              container ipv6-c-rps {
                when
                  "../../pim:protocol/pim:instances/pim:instance[type='ipv6unicast']";
                description
                  "List of C-RP IPv6 configurations.";
                list ipv6-c-rp {
                  key "address";
                  description
                    "Configure C-RP IPv6 configurations.";
                  leaf address {
                    type inet:ipv6-address-no-zone;
                    description
                      "Address of a C-RP. The value is a valid IPv6 unicast address, such as fc00::100.";
                  }
    
                  leaf holdtime {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "150";
                    description
                      "Timeout period during which a BSR waits to receive Advertisement messages from a C-RP.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    default "192";
                    description
                      "Priority of a C-RP. The greater the value, the lower the priority.";
                  }
    
                  leaf ad-interval {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which a C-RP continuously sends Advertisement messages.";
                  }
    
                  leaf group-policy {
                    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
                      "Policy for limiting the range of valid group addresses. With this policy, a router discards the messages received from the addresses not in the specified range.";
                  }
                }  // list ipv6-c-rp
              }  // container ipv6-c-rps
    
              container auto-rps {
                when
                  "../../pim:protocol/pim:instances/pim:instance[type='ipv4unicast']";
                presence
                  "Auto-RP configuration.";
                description
                  "Enable/disable Auto-RP.";
              }  // container auto-rps
    
              container static-rps {
                description
                  "List of static RPs.";
                list static-rp {
                  must
                    "(count(../static-rp[type='ipv4unicast'])-count(../static-rp[type='ipv4unicast']/policy)<2) and (count(../static-rp[type='ipv6unicast'])-count(../static-rp[type='ipv6unicast']/policy)<2)";
                  key "type address";
                  unique "type policy";
                  unique "type policy-ipv6";
                  description
                    "Configure static RP.";
                  leaf type {
                    type addr-family-type;
                    must
                      "../../../../pim:protocol/pim:instances/pim:instance[pim:type=current()]";
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf address {
                    type inet:ip-address-no-zone;
                    description
                      "Address of a static RP. This address must be a valid unicast IP address.
                    In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
                    In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                  }
    
                  leaf policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Static RP policy.";
                  }
    
                  leaf policy-ipv6 {
                    when "../type='ipv6unicast'";
                    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
                      "Static RP policy.";
                  }
    
                  leaf preference {
                    type rp-prefer-type;
                    default "not-prefer";
                    description
                      "Whether the static RP is preferred. The value can be:
                    0: the static RP is not preferred.
                    1: the static RP is preferred.
                    The default value is 0.";
                  }
                }  // list static-rp
              }  // container static-rps
    
              container elected-bsrs {
                config false;
                description
                  "List of elected BSR states.";
                list elected-bsr {
                  key "type address";
                  description
                    "Operational state of elected BSRs.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf address {
                    type inet:ip-address-no-zone;
                    description
                      "Address of an elected BSR.";
                  }
    
                  leaf scope {
                    type bsr-scope;
                    description
                      "Whether the BSR is a BSR in an administrative domain.";
                  }
    
                  leaf group-addr {
                    type inet:ip-address-no-zone {
                    }
                    description
                      "Multicast group address. In IPv4 address, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                  }
    
                  leaf group-mask-length {
                    type uint32 {
                      ext:value-meaning {
                        ext:item "0" {
                          ext:meaning "--";
                        }
                      }
                      range "0..32";
                    }
                    description
                      "Mask length of a group address. The value is an integer ranging from 8 to 32.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    description
                      "Priority for a C-BSR to participate in BSR election. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                  }
    
                  leaf hash-lenth {
                    type uint32 {
                      range "0..128";
                    }
                    description
                      "Hash length used by an elected BSR to perform RP calculation. The value is an integer ranging from 0 to 32.";
                  }
    
                  leaf fsm-state {
                    type bsr-state;
                    description
                      "Status of an elected BSR.";
                  }
    
                  leaf up-time {
                    type pub-type:time-tick;
                    description
                      "Time since the C-BSR was elected as the BSR.";
                  }
    
                  leaf expire-time {
                    type pub-type:time-tick;
                    description
                      "Period after which the elected BSR on the LAN sends the next bootstrap message.";
                  }
    
                  leaf candidate-count {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of candidate RPs.";
                  }
                }  // list elected-bsr
              }  // container elected-bsrs
    
              container c-bsrs {
                config false;
                description
                  "List of C-BSR states.";
                list c-bsr {
                  key "type address";
                  description
                    "Operational state of candidate bootstrap router.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf address {
                    type inet:ip-address-no-zone;
                    description
                      "Address of a C-BSR.";
                  }
    
                  leaf scope {
                    type bsr-scope;
                    description
                      "Whether the BSR is a BSR in an administrative domain.";
                  }
    
                  leaf group-addr {
                    type inet:ip-address-no-zone {
                    }
                    description
                      "Multicast group address. In IPv4, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                  }
    
                  leaf group-mask-length {
                    type uint32 {
                      ext:value-meaning {
                        ext:item "0" {
                          ext:meaning "--";
                        }
                      }
                      range "0..32";
                    }
                    description
                      "Mask length of a group address. The value is an integer ranging from 8 to 32.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    description
                      "Priority of a C-BSR. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                  }
    
                  leaf hash-lenth {
                    type uint32 {
                      range "0..32";
                    }
                    description
                      "Mask length in RP hash calculation. The value is an integer ranging from 0 to 32.";
                  }
    
                  leaf fsm-state {
                    type bsr-state;
                    description
                      "Status of a C-BSR.";
                  }
    
                  leaf valid-flag {
                    type c-bsr-valid-type;
                    description
                      "Whether the current C-BSR is valid (0: valid; 1: invalid).";
                  }
                }  // list c-bsr
              }  // container c-bsrs
    
              container elected-bsr-rps {
                config false;
                description
                  "List of RP information about elected BSRs.";
                list elected-bsr-rp {
                  key "type rp-addr";
                  description
                    "Elected BSR RP state.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf rp-addr {
                    type inet:ip-address-no-zone;
                    description "RP address.";
                  }
    
                  leaf is-local-addr {
                    type boolean;
                    description
                      "Whether the RP address is a local address.";
                  }
    
                  leaf group-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Multicast group address. In IPv4, the value ranges from 239.0.0.0 to 239.255.255.255. In IPv6, the value is in hexadecimal notation and in the format of FFxx:xxxx:xxxx::xxxx.";
                  }
    
                  leaf group-mask-length {
                    type uint32 {
                      range "0..32";
                    }
                    description
                      "Mask length. In IPv4, the value ranges from 4 to 32. In IPv6, the value ranges from 8 to 128.";
                  }
    
                  leaf priority {
                    type uint32 {
                      range "0..255";
                    }
                    description
                      "Priority of an RP. The greater the value, the higher the priority. The value is an integer ranging from 0 to 255. The default value is 0.";
                  }
    
                  leaf up-time {
                    type pub-type:time-tick;
                    units "s";
                    description
                      "Time since the C-RP was elected as the RP.";
                  }
    
                  leaf expiry-time {
                    type pub-type:time-tick;
                    units "s";
                    description
                      "Time after which an RP will expire, in seconds.";
                  }
    
                  leaf bidir-enable {
                    type boolean;
                    description
                      "Whether BIDIR-PIM is enabled on the RP.";
                  }
                }  // list elected-bsr-rp
              }  // container elected-bsr-rps
            }  // container rp
    
            container protocol {
              description "Configure PIM.";
              container instances {
                description
                  "List of PIM configurations in the instance.";
                list instance {
                  key "type";
                  description
                    "Configure PIM instance.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf assert-holdtime {
                    type uint32 {
                      range "7..65535";
                    }
                    units "s";
                    default "180";
                    description
                      "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                  }
    
                  leaf jp-holdtime {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "210";
                    description
                      "Holdtime for a Join/Prune message sent by a PIM interface. Commonly, the holdtime is 3.5 times longer than the interval for all the interfaces to send Join/Prune messages.";
                  }
    
                  leaf probe-interval {
                    type uint32 {
                      range "1..1799";
                    }
                    units "s";
                    must
                      "(../probe-interval<../reg-suppress-interval*0.5)";
                    default "5";
                    description
                      "Interval at which Probe messages are sent to an RP.";
                  }
    
                  leaf jp-timer-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which Join/Prune messages are sent. It must be shorter than the holdtime of Join/Prune messages.";
                  }
    
                  leaf dr-priority {
                    type uint32 {
                      range "0..4294967295";
                    }
                    default "1";
                    description
                      "DR election priority for a router. The greater the value, the higher the priority. The value is an integer ranging from 0 to 4294967295. The default value is 1.";
                  }
    
                  leaf hello-holdtime {
                    type uint16 {
                      range "1..65535";
                    }
                    units "s";
                    default "105";
                    description
                      "Timeout period during which a PIM interface waits to receive Hello messages from its neighbors. It must be longer than the interval for PIM neighbors to send Hello messages.";
                  }
    
                  leaf hello-landelay {
                    type uint16 {
                      range "1..32767";
                    }
                    units "ms";
                    default "500";
                    description
                      "Delay for transmitting Prune messages on a shared network segment.";
                  }
    
                  leaf hello-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "30";
                    description
                      "Specifies the interval at which Hello messages are sent. It must be shorter than the timeout period of PIM neighbors.";
                  }
    
                  leaf hello-override {
                    type uint16 {
                      range "1..65535";
                    }
                    units "ms";
                    default "2500";
                    description
                      "Interval at which the prune action in a Hello message is overridden.";
                  }
    
                  leaf reg-checksum {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable a router to calculate the checksum based on all contents of a Register message. By default, the checksum is calculated based on the header of a Register message only.";
                  }
    
                  leaf reg-suppress-interval {
                    type uint32 {
                      range "11..3600";
                    }
                    units "s";
                    default "60";
                    description
                      "Timeout period during which a router remains in the registration suppression state.";
                  }
    
                  leaf embedded-rp {
                    when "../type='ipv6unicast'";
                    type boolean;
                    default "true";
                    description
                      "Enable/disable the PIM neighbor check function to check whether received Join/Prune and Assert messages are sent from a PIM neighbor. If not, these messages are discarded.
                    By default, the PIM neighbor check function is disabled.";
                  }
    
                  leaf nbr-check-when-recv {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the PIM neighbor check function to check whether received Join/Prune and Assert messages are sent from a PIM neighbor. If not, these messages are discarded.
                    By default, the PIM neighbor check function is disabled.";
                  }
    
                  leaf nbr-check-when-send {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the PIM neighbor check function to check whether Join/Prune and Assert messages are to be sent to an IPv4/v6 PIM neighbor. If not, these messages are not sent. By default, the PIM neighbor check function is disabled for Join/Prune and Assert messages to be sent.";
                  }
    
                  leaf reg-policy-name {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "Policy for filtering Register messages. The value is an integer ranging from 3000 to 3999, or a string.";
                  }
    
                  leaf reg-policy-name6 {
                    when "../type='ipv6unicast'";
                    type leafref {
                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                    }
                    must
                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                    description
                      "Policy for filtering Register messages.";
                  }
    
                  leaf ssm-policy-name {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Policy for limiting the range of valid SSM group addresses. The value is an integer ranging from 2000 to 2999, or a string.";
                  }
    
                  leaf ssm-policy-name6 {
                    when "../type='ipv6unicast'";
                    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
                      "Range of SSM group addresses.";
                  }
    
                  leaf src-policy-name {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                      "Policy for filtering multicast entries based on source addresses or based on both source and group addresses.";
                  }
    
                  leaf src-policy-name6 {
                    when "../type='ipv6unicast'";
                    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
                      "Policy for filtering multicast entries based on source addresses or based on both source and group addresses.";
                  }
    
                  leaf embedded-rp-policy-name {
                    when "../embedded-rp='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
                      "Policy for limiting the range of multicast groups to which an embedded-RP applies.";
                  }
    
                  leaf source-life-time {
                    type uint32 {
                      range "60..65535";
                    }
                    units "s";
                    default "210";
                    description
                      "Timeout period for (S, G) entries on a router.";
                  }
    
                  leaf spt-switch-check-interval {
                    type uint32 {
                      range "15..65535";
                    }
                    units "s";
                    default "15";
                    description
                      "Interval for checking the multicast message rate is configured. When the multicast message rate reaches the specified threshold, a switchover from the RPT to the SPT is performed. The value is an integer ranging from 15 to 65535, in seconds.";
                  }
    
                  leaf packaging-jp-disable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the Join/Prune message packaging function. The efficiency for sending PIM Join/Prune messages in a package is higher than that for separately sending a large number of PIM Join/Prune messages. By default, a device sends PIM Join/Prune messages in a package.";
                  }
    
                  leaf ipsec-name {
                    type string {
                      length "1..15";
                    }
                    description
                      "Description of an SA.";
                  }
    
                  leaf ipsec-type {
                    when "../ipsec-name";
                    type ipsec-type;
                    default "for-all";
                    description
                      "Hello options based on the IPsec type.";
                  }
    
                  leaf unicast-ipsec-name {
                    type string {
                      length "1..15";
                    }
                    description
                      "Description of an SA.";
                  }
    
                  leaf register-source-interface {
                    when "../type='ipv4unicast'";
                    type leafref {
                      path "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    description
                      "Source address of register packets.";
                  }
    
                  leaf register-source-addr {
                    when "../type='ipv6unicast'";
                    type inet:ipv6-address-no-zone;
                    description
                      "IPv6 global address of register packets.";
                  }
    
                  leaf state-refresh-interval {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    type uint32 {
                      range "1..255";
                    }
                    units "s";
                    default "60";
                    description
                      "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                  }
    
                  leaf state-refresh-rate-limit {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "30";
                    description
                      "The state-refresh-rate-limit command sets the minimum period to wait before receiving the next PIM State-Refresh message.";
                  }
    
                  leaf state-refresh-ttl {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    type uint32 {
                      range "1..255";
                    }
                    default "255";
                    description
                      "The state-refresh-ttl command sets the TTL value for sending PIM State-Refresh messages.";
                  }
    
                  leaf fast-reroute {
                    when "../type='ipv4unicast'";
                    type boolean;
                    must
                      "../pim:fast-reroute='false' or (../../../../../l3mc:multicast/l3mc:ipv4/l3mc:global/l3mc:load-splitting!='balance' and ../../../../../l3mc:multicast/l3mc:ipv4/l3mc:global/l3mc:load-splitting!='balance-ucmp')";
                    default "false";
                    description
                      "Enable/disable PIM fast reroute.";
                  }
    
                  leaf fast-reroute-policy {
                    when
                      "../fast-reroute='true'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                      "Policy for limiting the range of multicast entries for which PIM fast reroute is enabled.";
                  }
    
                  leaf hello-join-attr-enable {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable all PIM interfaces to send PIM Hello messages that carry the join attribute.";
                  }
    
                  leaf clone-inherit-enable {
                    when "../type='ipv4unicast'";
                    type boolean;
                    must
                      "../clone-inherit-enable='false' or ../fast-reroute='true'";
                    default "false";
                    description
                      "Enable/disable cloned PIM (S, G) entries to inherit the outbound interfaces of (*, G) entries.";
                  }
    
                  leaf clone-inherit-policy {
                    when
                      "../clone-inherit-enable='true'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                      "Enable cloned PIM (S, G) entries to inherit the outbound interface policies of (*, G) entries.";
                  }
    
                  leaf gen-id-chang-enable {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable hello nsr genid-change.";
                  }
    
                  leaf rpf-prune-holdtime {
                    when "../type='ipv4unicast'";
                    type uint16 {
                      range "1..300";
                    }
                    units "s";
                    description
                      "Set a delay in sending Prune messages to upstream devices.";
                  }
    
                  leaf rpf-prune-policy-ipv4 {
                    when "../rpf-prune-holdtime";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                      "Indicate a matching policy for multicast entries to be pruned.";
                  }
    
                  leaf backup-rpf-switch-holdtime {
                    when "../type='ipv4unicast'";
                    type uint16 {
                      range "1..300";
                    }
                    must
                      "../is-backup-rpf-switch-flow-based='false'";
                    description
                      "Allow new interfaces connected to backup upstream devices to generate forwarding entries only after the specified delay expires.";
                  }
    
                  leaf is-backup-rpf-switch-flow-based {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of allowing new interfaces connected to backup upstream devices to generate forwarding entries only after they receive multicast traffic from the backup upstream devices.";
                  }
    
                  leaf backup-rpf-switch-policy-ipv4 {
                    when
                      "../backup-rpf-switch-holdtime or ../is-backup-rpf-switch-flow-based='true'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                      "Indicate a matching policy for multicast entries.";
                  }
    
                  container spt-switchs {
                    when "../type='ipv4unicast'";
                    description
                      "List of SPT switchover configurations.";
                    container spt-switch-no-acl {
                      description
                        "Configure SPT switchover configuration.";
                      leaf spt-threshold-no-acl {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "4294967295" {
                              ext:meaning "infinity";
                            }
                          }
                          range
                            "1..4194304 | 4294967295";
                        }
                        units "kbit/s";
                        description
                          "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT. This threshold for all group that doesn't match any group policy.";
                      }
                    }  // container spt-switch-no-acl
    
                    list spt-switch {
                      key "group-policy";
                      ordered-by user;
                      description
                        "Configure SPT switchover configuration.";
                      leaf group-policy {
                        type acl:acl4-identity;
                        must
                          "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                        must
                          "/acl:acl/acl:groups/acl:group[acl:identity=current()] or not(../../spt-switch[group-policy=/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:identity])";
                        must
                          "/acl:acl/acl:groups/acl:group[acl:number=number(current())] or not(/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:number) or not(../../spt-switch[group-policy=string(/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:number)])";
                        description
                          "Name of a named ACL. If the parameter is not set, the threshold is applied to all multicast groups.";
                      }
    
                      leaf spt-threshold {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "4294967295" {
                              ext:meaning "infinity";
                            }
                          }
                          range
                            "1..4194304 | 4294967295";
                        }
                        units "kbit/s";
                        mandatory true;
                        description
                          "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT.";
                      }
                    }  // list spt-switch
                  }  // container spt-switchs
    
                  container ipv6-spt-switchs {
                    when "../type='ipv6unicast'";
                    description
                      "List of SPT6 switchover configurations.";
                    container spt-switch-no-acl {
                      description
                        "Configure SPT6 switchover configuration.";
                      leaf spt-threshold-no-acl {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "4294967295" {
                              ext:meaning "infinity";
                            }
                          }
                          range
                            "1..4194304 | 4294967295";
                        }
                        units "kbit/s";
                        description
                          "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT6. This threshold for all group that doesn't match any group policy.";
                      }
                    }  // container spt-switch-no-acl
    
                    list ipv6-spt-switch {
                      key "group-policy";
                      ordered-by user;
                      description
                        "Configure rate threshold of multicast packets that can trigger a receiver's DR to send a Join message to a multicast source to set up an SPT6. By default, the receiver's DR performs the switchover from the RPT to the SPT6 after receiving the first multicast data packet.";
                      leaf group-policy {
                        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
                          "Name of a named ACL. f the parameter is not set, the threshold is applied to all multicast groups.";
                      }
    
                      leaf spt-threshold {
                        type uint32 {
                          ext:value-meaning {
                            ext:item "4294967295" {
                              ext:meaning "infinity";
                            }
                          }
                          range
                            "1..4194304 | 4294967295";
                        }
                        units "kbit/s";
                        mandatory true;
                        description
                          "Multicast packet rate threshold that triggers the switchover from the RPT to the SPT6.";
                      }
                    }  // list ipv6-spt-switch
                  }  // container ipv6-spt-switchs
    
                  container anycast-rps {
                    description
                      "List of Anycast-RPs.";
                    list anycast-rp {
                      key "rp-addr";
                      max-elements 4;
                      description
                        "Configure Anycast-RP.";
                      leaf rp-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of an Anycast-RP. This address must be a valid unicast IP address.
                         In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
                         In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                      }
    
                      leaf local-addr {
                        type inet:ip-address-no-zone;
                        description
                          "The Anycast-RP address is a local Address. This address must be a valid unicast IP address.
                         In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
                         In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                      }
    
                      container rp-peers {
                        description
                          "List of Anycast-RP peers.";
                        list rp-peer {
                          key "peer-ip-addr";
                          max-elements 16;
                          description
                            "Configure Anycast-RP peer.";
                          leaf peer-ip-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of an Anycast-RP peer. This address must be a valid unicast IP address.
                             In IPv4, the value is in dotted decimal notation. This address cannot be an address on the network segment 127.0.0.0/8.
                             In IPv6, the value is in hexadecimal notation. This address must be a valid IPv6 unicast address.";
                          }
    
                          leaf forward-sa-msg {
                            when
                              "../../../../../type='ipv4unicast'";
                            type boolean;
                            default "false";
                            description
                              "Enable/disable the function of forwarding to Anycast-RP peers source information learned through SA messages.";
                          }
    
                          leaf forward-policy {
                            when
                              "../forward-sa-msg='true'";
                            type acl:acl4-identity;
                            must
                              "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic' or /acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/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
                              "Policy for filtering SA messages to be forwarded to Anycast-RP peers.";
                          }
                        }  // list rp-peer
                      }  // container rp-peers
                    }  // list anycast-rp
                  }  // container anycast-rps
    
                  container p2mp {
                    when "../type='ipv4unicast'";
                    description
                      "Configure P2MP configuration.";
                    leaf rpf-disable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable the RPF check for multicast entries. A policy can be configured to limit the range of multicast entries for which the RPF check is disabled. If a policy is not configured, the RPF check is disabled for all multicast entries. By default, the RPF check is enabled for all multicast entries.";
                    }
    
                    leaf rpf-disable-policy {
                      when
                        "../rpf-disable='true'";
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "Policy for limiting the range of multicast entries for which the RPF check is disabled.";
                    }
    
                    leaf source-proxy-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable multicast source proxy.";
                    }
    
                    leaf source-proxy-policy {
                      when
                        "../source-proxy-enable='true'";
                      type acl:acl4-identity;
                      must
                        "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                      description
                        "Policy for limiting the range of multicast entries for which multicast source proxy is enabled.";
                    }
                  }  // container p2mp
    
                  container vector {
                    when "../type='ipv4unicast'";
                    description
                      "Configure Vector configuration.";
                    leaf compatible-standard-enable {
                      type boolean;
                      default "false";
                      description
                        "Enable/disable a device to use the standard format to encapsulate Hello or Join/Prune messages carrying vector attributes. By default, a private format is used to encapsulate Hello or Join/Prune messages carrying vector attributes.";
                    }
                  }  // container vector
    
                  container p2mp-tunnels {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    description
                      "List of relation of P2MP Tunnel and VPN configurations.";
                    list p2mp-tunnel {
                      key "p2mp-root-ip tunnel-id";
                      description
                        "Configure relation of P2MP Tunnel and VPN configuration.";
                      leaf p2mp-root-ip {
                        type inet:ipv4-address-no-zone {
                          pattern
                            '([1-9]|[1-9]\d|1[0-1]\d|12[0-68-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
                          "P2MP Tunnel Root Ipaddress.";
                      }
    
                      leaf tunnel-id {
                        type uint16 {
                          range "1..65535";
                        }
                        description
                          "P2MP Tunnel ID.";
                      }
                    }  // list p2mp-tunnel
                  }  // container p2mp-tunnels
    
                  container clone-joins {
                    when "../type='ipv4unicast'";
                    description
                      "List of the join cloning configuration of multicast sources.";
                    list clone-join {
                      must
                        "../../fast-reroute='true'";
                      key "source-addr mask-len";
                      description
                        "Configure join cloning of multicast sources.";
                      leaf source-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast source address.";
                      }
    
                      leaf mask-len {
                        type uint32 {
                          range "1..32";
                        }
                        description
                          "Mask length.";
                      }
    
                      leaf primary-join-src-addr {
                        type inet:ip-address-no-zone;
                        mandatory true;
                        description
                          "Cloned multicast source address.";
                      }
    
                      leaf backup-join-src-addr {
                        type inet:ip-address-no-zone;
                        mandatory true;
                        description
                          "Backup for a cloned multicast source address.";
                      }
                    }  // list clone-join
                  }  // container clone-joins
    
                  container clone-sources {
                    when "../type='ipv4unicast'";
                    description
                      "List of the traffic cloning configuration of multicast sources.";
                    list clone-source {
                      key "source-addr mask-len";
                      description
                        "Configure traffic cloning of multicast sources.";
                      leaf source-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast source address.";
                      }
    
                      leaf mask-len {
                        type uint32 {
                          range "1..32";
                        }
                        description
                          "Mask length.";
                      }
    
                      leaf primary-src-addr {
                        type inet:ip-address-no-zone;
                        mandatory true;
                        description
                          "Cloned multicast source address.";
                      }
    
                      leaf backup-src-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Backup for a cloned multicast source address.";
                      }
                    }  // list clone-source
                  }  // container clone-sources
    
                  container destination-addr-paths {
                    when "../type='ipv4unicast'";
                    description
                      "List of paths configuration to destination addresses.";
                    list destination-addr-path {
                      key "destination-addr path-name mask-len";
                      max-elements 512;
                      description
                        "Configure paths to destination addresses.";
                      leaf destination-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast source address.";
                      }
    
                      leaf path-name {
                        type leafref {
                          path
                            "/mc:multicast/pim:rpf-vector-paths/pim:rpf-vector-path/pim:path-name";
                        }
                        description "Path name.";
                      }
    
                      leaf mask-len {
                        type uint32 {
                          range "0..32";
                        }
                        description
                          "Mask length.";
                      }
                    }  // list destination-addr-path
                  }  // container destination-addr-paths
                }  // list instance
              }  // container instances
    
              container interfaces {
                description
                  "List of interface configurations.";
                list interface {
                  key "type if-name";
                  description
                    "Configure PIM configuration on the interface.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf if-name {
                    type leafref {
                      path
                        "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    must
                      "../../../../../ni:name=/ifm:ifm/ifm:interfaces/ifm:interface[ifm:name=current()]/ifm:vrf-name";
                    description
                      "Interface name.";
                  }
    
                  leaf sm-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable PIM on an interface.";
                  }
    
                  leaf dr-priority {
                    type uint32 {
                      range "0..4294967295";
                    }
                    default "1";
                    description
                      "DR priority. The greater the value, the higher the priority.";
                  }
    
                  leaf hello-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "30";
                    description
                      "Interval at which Hello messages are sent. It must be shorter than the timeout period of PIM neighbors.";
                  }
    
                  leaf hello-holdtime {
                    type uint16 {
                      range "1..65535";
                    }
                    units "s";
                    default "105";
                    description
                      "Timeout period during which a router waits for Hello messages sent from its PIM neighbors. It must be longer than the interval for PIM neighbors to send Hello messages.";
                  }
    
                  leaf hello-override {
                    type uint16 {
                      range "1..65535";
                    }
                    units "ms";
                    default "2500";
                    description
                      "Interval at which the prune action in a Hello message is overridden.";
                  }
    
                  leaf hello-lan-delay {
                    type uint16 {
                      range "1..32767";
                    }
                    units "ms";
                    default "500";
                    description
                      "Period from the time when a router receives a Prune message from a downstream device to the time when the router performs the prune action.";
                  }
    
                  leaf jp-timer-interval {
                    type uint32 {
                      range "1..18000";
                    }
                    units "s";
                    default "60";
                    description
                      "Interval at which Join/Prune messages are sent. The interval must be shorter than the holdtime of Join/Prune messages.";
                  }
    
                  leaf jp-holdtime {
                    type uint32 {
                      range "1..65535";
                    }
                    units "s";
                    default "210";
                    description
                      "Holdtime for Join/Prune messages sent by a router. The holdtime must be longer than the interval at which Join/Prune messages are sent.";
                  }
    
                  leaf jp-policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "Policy for filtering Join/Prune messages.";
                  }
    
                  leaf jp-policy-ipv6 {
                    when "../type='ipv6unicast'";
                    type leafref {
                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                    }
                    must
                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                    description
                      "Policy for filtering Join/Prune messages.";
                  }
    
                  leaf jp-asm-policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "not(../jp-policy) or not(../jp-asm-policy)";
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Policy for filtering ASM Join/Prune messages.";
                  }
    
                  leaf jp-asm-policy-ipv6 {
                    when "../type='ipv6unicast'";
                    type leafref {
                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                    }
                    must
                      "not(../jp-policy-ipv6) or not(../jp-asm-policy-ipv6)";
                    must
                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='basic'";
                    description
                      "Policy for filtering ASM Join/Prune messages.";
                  }
    
                  leaf jp-ssm-policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "not(../jp-policy) or not(../jp-ssm-policy)";
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='advance')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='advance'))";
                    description
                      "Policy for filtering SSM Join/Prune messages.";
                  }
    
                  leaf jp-ssm-policy-ipv6 {
                    when "../type='ipv6unicast'";
                    type leafref {
                      path "/acl:acl/acl:group6s/acl:group6/acl:identity";
                    }
                    must
                      "not(../jp-policy-ipv6) or not(../jp-ssm-policy-ipv6)";
                    must
                      "/acl:acl/acl:group6s/acl:group6[acl:identity=current()]/acl:type='advance'";
                    description
                      "Policy for filtering SSM Join/Prune messages.";
                  }
    
                  leaf nbr-policy {
                    when "../type='ipv4unicast'";
                    type acl:acl4-identity;
                    must
                      "(/acl:acl/acl:groups/acl:group[acl:number=number(current())] and (/acl:acl/acl:groups/acl:group[acl:number=number(current())]/acl:type='basic')) or (/acl:acl/acl:groups/acl:group[acl:identity=current()] and (/acl:acl/acl:groups/acl:group[acl:identity=current()]/acl:type='basic'))";
                    description
                      "Policy for filtering PIM neighbors.";
                  }
    
                  leaf nbr-policy-ipv6 {
                    when "../type='ipv6unicast'";
                    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
                      "Policy for filtering PIM neighbors.";
                  }
    
                  leaf assert-holdtime {
                    type uint32 {
                      range "7..65535";
                    }
                    units "s";
                    default "180";
                    description
                      "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                  }
    
                  leaf require-gen-id {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable a PIM interface to deny Hello messages that do not carry generation IDs. By default, a PIM interface receives Hello messages that do not carry generation IDs.";
                  }
    
                  leaf bsr-boundary {
                    type bsr-boundary;
                    default "none";
                    description
                      "Boundary for a PIM domain. The value can be:
                    0: no boundary; 1: bidirectional domain boundary; 2: inbound unidirectional domain boundary.";
                  }
    
                  leaf bfd-enable {
                    type boolean;
                    must
                      "../bfd-enable='false' or (../sm-enable='true' and ../is-silent='false')";
                    default "false";
                    description
                      "Enable/disable PIM BFD on an interface. By default, PIM BFD is not enabled on an interface.";
                  }
    
                  leaf bfd-min-tx {
                    ext:dynamic-default;
                    type uint32 {
                      range "3..1000";
                    }
                    description
                      "Minimum interval at which BFD messages are sent.";
                  }
    
                  leaf bfd-min-rx {
                    ext:dynamic-default;
                    type uint32 {
                      range "3..1000";
                    }
                    description
                      "Minimum interval at which BFD messages are received.";
                  }
    
                  leaf bfd-multiplier {
                    type uint32 {
                      range "3..50";
                    }
                    default "3";
                    description
                      "Local detect multiplier for BFD messages. The value is an integer ranging from 3 to 50. The default value is 3.";
                  }
    
                  leaf is-silent {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the PIM silent function on an interface. By default, PIM silent is disabled on an interface.";
                  }
    
                  leaf dr-swt-delay-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable DR switchover delay on an interface. By default, this function is disabled on an interface.";
                  }
    
                  leaf dr-swt-delay-interval {
                    when
                      "../dr-swt-delay-enable='true'";
                    type uint32 {
                      range "10..3600";
                    }
                    units "s";
                    default "10";
                    description
                      "Delay for a DR switchover. The setting is ineffective if the DR switchover delay function is not enabled.";
                  }
    
                  leaf ipsec-name {
                    type string {
                      length "1..15";
                    }
                    description
                      "Description of an SA.";
                  }
    
                  leaf ipsec-type {
                    when "../ipsec-name";
                    type ipsec-type;
                    default "for-all";
                    description
                      "Hello options based on the IPsec type.";
                  }
    
                  leaf mode {
                    ext:operation-exclude "update" {
                      description "The node cannot be modified.";
                    }
                    type pim-mode;
                    must
                      "../mode='sparse' or (../../../../../ni:name='_public_' and ../is-silent='false' and ../dr-swt-delay-enable='false')";
                    must
                      "not(../../interface[mode!=current()])";
                    default "sparse";
                    description
                      "PIM enable mode.";
                  }
    
                  leaf state-refresh-capable {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    type boolean;
                    default "true";
                    description
                      "Enable/disable state-refresh.";
                  }
    
                  leaf graft-retry {
                    when
                      "../../../../../ni:name='_public_' and ../type='ipv4unicast'";
                    type uint32 {
                      range "1..65535";
                    }
                    default "3";
                    description
                      "The pim timer graft-retry command sets the interval for retransmitting Graft messages on an interface.";
                  }
    
                  leaf ignore-dr {
                    when "../type='ipv4unicast'";
                    type boolean;
                    must
                      "../ignore-dr='false' or (../is-silent='false' and ../dr-swt-delay-enable='false')";
                    default "false";
                    description
                      "Enable/disable the function of ignoring the DR state of PIM.";
                  }
    
                  leaf ignore-assert {
                    when "../type='ipv4unicast'";
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of ignoring the ASSERT state of PIM.";
                  }
    
                  leaf single-tag-fwd-enable {
                    type boolean;
                    default "false";
                    description
                      "Enable/disable the function of forwarding PIM Hello, Join/Prune, and Assert messages received on QinQ/dot1q termination sub-interfaces. This function can be enabled only on the sub-interfaces configured with single Q pair QinQ encapsulation or single VLAN dot1q encapsulation.";
                  }
    
                  container if-infos {
                    config false;
                    description
                      "Operational state of PIM interface.";
                    leaf pim-version {
                      type uint32 {
                        range "1..2";
                      }
                      description
                        "Version of the PIM running on an interface.";
                    }
    
                    leaf state {
                      type interface-state;
                      description
                        "Status of an interface: Up or Down.";
                    }
    
                    leaf nbr-count {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of PIM neighbors on an interface.";
                    }
    
                    leaf dr-priority {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description "DR priority.";
                    }
    
                    leaf dr-addr {
                      type inet:ip-address-no-zone;
                      description "DR address.";
                    }
    
                    leaf hello-interval {
                      type uint32 {
                        range "1..18000";
                      }
                      units "s";
                      description
                        "Interval at which Hello messages are sent.";
                    }
    
                    leaf hello-holdtime {
                      type uint16 {
                        range "1..65535";
                      }
                      units "s";
                      description
                        "Timeout period during which a router waits to receive Hello messages from its neighbors.";
                    }
    
                    leaf assert-holdtime {
                      type uint32 {
                        range "7..2147483647";
                      }
                      units "s";
                      description
                        "Timeout period during which PIM interfaces wait to receive Assert messages from the forwarder.";
                    }
    
                    leaf jp-interval {
                      type uint32 {
                        range "1..2147483647";
                      }
                      units "s";
                      description
                        "Interval at which Join/Prune messages are sent.";
                    }
    
                    leaf jp-holdtime {
                      type uint32 {
                        range "1..65535";
                      }
                      units "s";
                      description
                        "Holdtime for Join/Prune messages sent by a router.";
                    }
    
                    leaf negotiated-msg-delay {
                      type uint16 {
                        range "1..32767";
                      }
                      units "ms";
                      description
                        "Negotiated delay of the messages transmitted on an interface.";
                    }
    
                    leaf negotiated-override-interval {
                      type uint16 {
                        range "1..65535";
                      }
                      units "ms";
                      description
                        "Negotiated overriding interval on an interface.";
                    }
    
                    leaf gen-id {
                      type pub-type:hex-binary;
                      description
                        "Generation ID on an interface.";
                    }
    
                    leaf non-dr-nbr-count {
                      type uint32;
                      description
                        "Number of non-DR neighbors.";
                    }
    
                    leaf non-landelay-nbr-count {
                      type uint32;
                      description
                        "Number of neighbors that do not use LAN delay.";
                    }
    
                    leaf non-join-attribute-nbr-sount {
                      type uint32;
                      description
                        "Number of neighbors that do not use the Join attribute.";
                    }
    
                    leaf join-attribute {
                      type boolean;
                      description
                        "Negotiated Join attribute of the messages transmitted on an interface.";
                    }
    
                    leaf offer-interval {
                      type uint32 {
                        range "1..2147483647";
                      }
                      units "ms";
                      description
                        "Interval at which Offer messages are sent.";
                    }
    
                    leaf election-robust-count {
                      type uint32 {
                        range "1..2147483647";
                      }
                      description
                        "DF election robustness.";
                    }
    
                    leaf backoff-interval {
                      type uint32 {
                        range "1..2147483647";
                      }
                      units "s";
                      description
                        "Interval at which backoff messages are sent.";
                    }
    
                    leaf ipsec-name {
                      type string {
                        length "1..15";
                      }
                      description
                        "Description of an SA. The value is a string of 1 to 15 characters.";
                    }
    
                    leaf ipsec-type {
                      type ipsec-type;
                      description
                        "Hello options based on the IPsec type.";
                    }
    
                    leaf pim-mode {
                      type pim-mode;
                      description "PIM mode.";
                    }
    
                    leaf state-refresh-enable {
                      type boolean;
                      description
                        "State-refresh enable.";
                    }
    
                    leaf state-refresh-interval {
                      type uint32 {
                        range "1..255";
                      }
                      units "s";
                      description
                        "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                    }
    
                    leaf graft-retry {
                      type uint32 {
                        range "1..65535";
                      }
                      description
                        "The pim timer graft-retry command sets the interval for retransmitting Graft messages on an interface.";
                    }
    
                    leaf negotiated-state-refresh {
                      type boolean;
                      description
                        "Negotiation state-refresh capability.";
                    }
    
                    leaf ignore-dr-state {
                      type boolean;
                      description
                        "Ignores the DR state of PIM.";
                    }
    
                    leaf ignore-assert {
                      type boolean;
                      description
                        "Does not trigger the ASSERT state of PIM.";
                    }
    
                    leaf snooping-enable {
                      type boolean;
                      description
                        "Whether to enable Pim Snooping.";
                    }
                  }  // container if-infos
    
                  container nbrs {
                    config false;
                    description
                      "List of PIM neighbor information.";
                    list nbr {
                      key "nbr-addr";
                      description
                        "PIM neighbor state.";
                      leaf nbr-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of a PIM neighbor.";
                      }
    
                      leaf up-time {
                        type pub-type:time-tick;
                        description
                          "Time since the PIM neighbor relationship was established.";
                      }
    
                      leaf expire-time {
                        type pub-type:time-tick;
                        description
                          "Time when a PIM neighbor relationship expires.";
                      }
    
                      leaf dr-priority-existence {
                        type boolean;
                        description
                          "Whether a DR priority exists.";
                      }
    
                      leaf dr-priority {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "DR priority.";
                      }
    
                      leaf gen-id-existence {
                        type boolean;
                        description
                          "Whether a generation ID exists.";
                      }
    
                      leaf gen-id {
                        type pub-type:hex-binary;
                        description
                          "Random number of the PIM neighbor status.";
                      }
    
                      leaf holdtime {
                        type uint16 {
                          range "1..65535";
                        }
                        units "s";
                        description
                          "TTL of a PIM neighbor relationship. The value 65535 indicates that the PIM neighbor relationship never times out.";
                      }
    
                      leaf lan-delay-existence {
                        type boolean;
                        description
                          "Whether a LAN delay for transmitting Prune messages exists.";
                      }
    
                      leaf lan-delay {
                        type uint16 {
                          range "1..32767";
                        }
                        units "ms";
                        description
                          "LAN delay for transmitting Prune messages.";
                      }
    
                      leaf override-interval {
                        type uint32 {
                          range "1..65535";
                        }
                        units "ms";
                        description
                          "Interval for overriding the Prune action.";
                      }
    
                      leaf join-attribute {
                        type boolean;
                        description
                          "Whether the Join attribute function is enabled on a PIM neighbor.";
                      }
    
                      leaf bidir-enable {
                        type boolean;
                        description
                          "Whether BIDIR-PIM is enabled on the neighbor.";
                      }
    
                      leaf state-refresh-interval {
                        type uint32 {
                          range "1..255";
                        }
                        units "s";
                        description
                          "The state-refresh-interval command sets the interval for sending PIM State-Refresh messages.";
                      }
    
                      container second-addrs {
                        when
                          "../../../type='ipv6unicast'";
                        description
                          "List of secondary address information.";
                        list second-addr {
                          key "address";
                          description
                            "Secondary address state.";
                          leaf address {
                            type inet:ip-address-no-zone;
                            description
                              "Secondary address of a PIM neighbor.";
                          }
                        }  // list second-addr
                      }  // container second-addrs
                    }  // list nbr
                  }  // container nbrs
    
                  container bfd-sessions {
                    config false;
                    description
                      "List of PIM BFD session information.";
                    list bfd-session {
                      key "nbr-addr";
                      description
                        "Operational state of a PIM BFD session.";
                      leaf nbr-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of a neighbor.";
                      }
    
                      leaf actual-minimum-tx-interval {
                        type uint32 {
                          range "0..4294967295";
                        }
                        units "ms";
                        description
                          "Actual minimum interval at which BFD packets are sent.";
                      }
    
                      leaf actual-minimum-rx-interval {
                        type uint32 {
                          range "0..4294967295";
                        }
                        units "ms";
                        description
                          "Actual minimum interval at which BFD packets are received.";
                      }
    
                      leaf actual-multiplier {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Actual local detection multiplier.";
                      }
    
                      leaf local-port {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Local discriminator of a BFD session.";
                      }
    
                      leaf remote-port {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Remote discriminator of a BFD session.";
                      }
    
                      leaf bfd-status {
                        type bfd-status;
                        description
                          "Status of a PIM BFD session.";
                      }
                    }  // list bfd-session
                  }  // container bfd-sessions
    
                  container invalid-messages {
                    config false;
                    description
                      "Statistics of invalid PIM messages on interfaces.";
                    container invalid-assert-cnt {
                      description
                        "Statistics of invalid assert messages.";
                      leaf destination-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages with invalid destination addresses.";
                      }
    
                      leaf ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages with invalid IP source addresses.";
                      }
    
                      leaf multicast-source {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages with invalid multicast source addresses.";
                      }
    
                      leaf multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages with invalid multicast group addresses.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages with invalid lengths.";
                      }
                    }  // container invalid-assert-cnt
    
                    container invalid-bsr-cnt {
                      description
                        "Statistics of invalid BSR messages.";
                      leaf bad-payload {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid payloads.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid lengths.";
                      }
    
                      leaf invalid-scope-mask {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid scope masks.";
                      }
    
                      leaf invalid-multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid multicast group addresses.";
                      }
    
                      leaf recv-by-non-c-bsr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages received by non-C-BSRs.";
                      }
    
                      leaf invalid-bsr-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages invalid BSR addresses.";
                      }
    
                      leaf fault-hash-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid hash lengths.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages with invalid IP source addresses.";
                      }
                    }  // container invalid-bsr-cnt
    
                    container invalid-hello-cnt {
                      description
                        "Statistics of invalid Hello messages.";
                      leaf invalid-addr-list {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "List of invalid addresses for Hello messages.";
                      }
    
                      leaf invalid-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid lengths.";
                      }
    
                      leaf invalid-holdtime-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid holdtime lengths.";
                      }
    
                      leaf invalid-lan-prune-delay-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid LAN prune delay lengths.";
                      }
    
                      leaf invalid-dr-priority-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid DR priority lengths.";
                      }
    
                      leaf invalid-gen-id-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid generation ID lengths.";
                      }
    
                      leaf invalid-destination-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid destination addresses.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages with invalid IP source addresses.";
                      }
                    }  // container invalid-hello-cnt
    
                    container invalid-join-prune-cnt {
                      description
                        "Statistics of invalid Join/Prune messages.";
                      leaf invalid-multicast-source {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages with invalid multicast source addresses.";
                      }
    
                      leaf invalid-multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages with invalid multicast group addresses.";
                      }
    
                      leaf invalid-upstream-nbr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages with invalid Upstream neighbors.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages with invalid IP source addresses.";
                      }
    
                      leaf invalid-destination-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages with invalid destination addresses.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of messages with invalid lengths.";
                      }
                    }  // container invalid-join-prune-cnt
    
                    container invalid-graft-cnt {
                      when
                        "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                      description
                        "Statistics of invalid PIM Graft messages.";
                      leaf invalid-multicast-source {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages with invalid multicast source addresses.";
                      }
    
                      leaf invalid-multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages with invalid multicast group addresses.";
                      }
    
                      leaf invalid-up-nbr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages with invalid upstream neighbor information.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages with invalid IP source addresses.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages with invalid lengths.";
                      }
                    }  // container invalid-graft-cnt
    
                    container invalid-graft-ack-cnt {
                      when
                        "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                      description
                        "Statistics of invalid PIM GraftAck messages.";
                      leaf invalid-multicast-source {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages with invalid multicast source addresses.";
                      }
    
                      leaf invalid-multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages with invalid multicast group addresses.";
                      }
    
                      leaf invalid-up-nbr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages with invalid upstream neighbor information.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages with invalid IP source addresses.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages with invalid lengths.";
                      }
                    }  // container invalid-graft-ack-cnt
    
                    container invalid-state-refresh-cnt {
                      when
                        "../../../../../../ni:name='_public_' and ../../type='ipv4unicast'";
                      description
                        "Statistics of invalid PIM State-Refresh messages.";
                      leaf invalid-multicast-source {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of State-Refresh messages with invalid multicast source addresses.";
                      }
    
                      leaf invalid-multicast-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of State-Refresh messages with invalid multicast group addresses.";
                      }
    
                      leaf invalid-originator {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of State-Refresh messages with invalid Originator source addresses.";
                      }
    
                      leaf fault-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of State-Refresh messages with invalid lengths.";
                      }
                    }  // container invalid-state-refresh-cnt
    
                    container invalid-auto-rp-announce-cnt {
                      when
                        "../../type='ipv4unicast'";
                      description
                        "Statistics of invalid PIM Auto-RP Announcement messages.";
                      leaf invalid-destination-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages with invalid destination addresses.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages with invalid source IP addresses.";
                      }
    
                      leaf invalid-ttl {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages with invalid TTL Value.";
                      }
    
                      leaf invalid-source-port {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages with invalid source port.";
                      }
                    }  // container invalid-auto-rp-announce-cnt
    
                    container invalid-auto-rp-discovery-cnt {
                      when
                        "../../type='ipv4unicast'";
                      description
                        "Statistics of invalid PIM Auto-RP Discovery messages.";
                      leaf invalid-length {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid lengths.";
                      }
    
                      leaf invalid-rp {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid RP.";
                      }
    
                      leaf invalid-ip-source-addr {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid source IP addresses.";
                      }
    
                      leaf invalid-group {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid Group addresses.";
                      }
    
                      leaf invalid-ttl {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid TTL Value.";
                      }
    
                      leaf invalid-source-port {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages with invalid source port.";
                      }
                    }  // container invalid-auto-rp-discovery-cnt
                  }  // container invalid-messages
                }  // list interface
              }  // container interfaces
    
              container message-statistics {
                config false;
                description
                  "List of control messages Statistics for a VPN instance.";
                list message-statistic {
                  key "type";
                  description
                    "Statistics of control messages for a VPN instance.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf register-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register messages received.";
                  }
    
                  leaf register-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register messages sent.";
                  }
    
                  leaf invalid-register-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of invalid Register messages received.";
                  }
    
                  leaf filtered-register-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register messages filtered.";
                  }
    
                  leaf register-stop-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register-Stop messages received.";
                  }
    
                  leaf register-stop-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register-Stop messages sent.";
                  }
    
                  leaf invalid-register-stop-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of invalid Register-Stop messages received.";
                  }
    
                  leaf filtered-register-stop-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Register-Stop messages filtered.";
                  }
    
                  leaf probe-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of null Register messages received.";
                  }
    
                  leaf probe-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of the null Register messages sent.";
                  }
    
                  leaf invalid-probe-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of the invalid null Register messages.";
                  }
    
                  leaf filtered-probe-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of null Register messages filtered.";
                  }
    
                  leaf c-rp-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of C-RP messages received.";
                  }
    
                  leaf c-rp-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of C-RP messages sent.";
                  }
    
                  leaf invalid-c-rp-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of invalid C-RP messages.";
                  }
    
                  leaf filtered-c-rp-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of C-RP messages filtered.";
                  }
    
                  leaf anycast-rp-register-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP Register messages received.";
                  }
    
                  leaf anycast-rp-register-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP Register messages sent.";
                  }
    
                  leaf invalid-anycast-rp-register-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of invalid Anycast-RP Register messages received.";
                  }
    
                  leaf filtered-anycast-rp-register-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP Register messages filtered.";
                  }
    
                  leaf anycast-rp-probe-recv-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP null Register messages received.";
                  }
    
                  leaf anycast-rp-probe-send-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP null Register messages sent.";
                  }
    
                  leaf invalid-anycast-rp-probe-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of invalid Anycast-RP null Register messages received.";
                  }
    
                  leaf filtered-anycast-rp-probe-num {
                    type uint32 {
                      range "0..4294967295";
                    }
                    description
                      "Number of Anycast-RP null Register messages filtered.";
                  }
    
                  container if-message-statistics {
                    description
                      "List of control message statistics for an interface.";
                    list if-message-statistic {
                      key "if-name";
                      description
                        "Statistics of control messages for an instance.";
                      leaf if-name {
                        type leafref {
                          path
                            "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                        }
                        description
                          "Name of the interface to which the control message statistics belong.";
                      }
    
                      leaf assert-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages received on the current interface.";
                      }
    
                      leaf assert-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages sent on the current interface.";
                      }
    
                      leaf invalid-assert-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Assert messages.";
                      }
    
                      leaf filtered-assert-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Assert messages filtered on the current interface.";
                      }
    
                      leaf hello-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages received on the current interface.";
                      }
    
                      leaf hello-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages sent on the current interface.";
                      }
    
                      leaf invalid-hello-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Hello messages.";
                      }
    
                      leaf filtered-hello-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Hello messages filtered on the current interface.";
                      }
    
                      leaf jp-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages received on the current interface.";
                      }
    
                      leaf jp-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages sent on the current interface.";
                      }
    
                      leaf invalid-jp-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Join/Prune messages.";
                      }
    
                      leaf filtered-jp-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Join/Prune messages filtered on the current interface.";
                      }
    
                      leaf bsr-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages received on the current interface.";
                      }
    
                      leaf bsr-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages sent on the current interface.";
                      }
    
                      leaf invalid-bsr-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid BSR messages.";
                      }
    
                      leaf filtered-bsr-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of BSR messages filtered on the current interface.";
                      }
    
                      leaf offer-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Offer messages received on the current interface.";
                      }
    
                      leaf offer-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Offer messages sent on the current interface.";
                      }
    
                      leaf invalid-offer-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Offer messages.";
                      }
    
                      leaf filtered-offer-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Offer messages filtered on the current interface.";
                      }
    
                      leaf backoff-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Backoff messages received on the current interface.";
                      }
    
                      leaf backoff-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Backoff messages sent on the current interface.";
                      }
    
                      leaf invalid-backoff-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid backoff messages.";
                      }
    
                      leaf filtered-backoff-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Backoff messages filtered on the current interface.";
                      }
    
                      leaf win-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Win messages received on the current interface.";
                      }
    
                      leaf win-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Win messages sent on the current interface.";
                      }
    
                      leaf invalid-win-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Win messages.";
                      }
    
                      leaf filtered-win-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Win messages filtered on the current interface.";
                      }
    
                      leaf pass-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Pass messages received on the current interface.";
                      }
    
                      leaf pass-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Pass messages sent on the current interface.";
                      }
    
                      leaf invalid-pass-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Pass messages.";
                      }
    
                      leaf filtered-pass-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Pass messages filtered on the current interface.";
                      }
    
                      leaf graft-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages received on the current interface.";
                      }
    
                      leaf graft-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages sent on the current interface.";
                      }
    
                      leaf invalid-graft-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Graft messages.";
                      }
    
                      leaf filtered-graft-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages filtered on the current interface.";
                      }
    
                      leaf graft-ack-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Graft messages received on the current interface.";
                      }
    
                      leaf graft-ack-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages sent on the current interface.";
                      }
    
                      leaf invalid-graft-ack-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid GraftAck messages.";
                      }
    
                      leaf filtered-graft-ack-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages filtered on the current interface.";
                      }
    
                      leaf state-refresh-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages received on the current interface.";
                      }
    
                      leaf state-refresh-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of GraftAck messages sent on the current interface.";
                      }
    
                      leaf invalid-state-refresh-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid State-Refresh messages.";
                      }
    
                      leaf filtered-state-refresh-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of State-Refresh messages filtered on the current interface.";
                      }
    
                      leaf announce-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages received on the current interface.";
                      }
    
                      leaf announce-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages sent on the current interface.";
                      }
    
                      leaf invalid-announce-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Auto-RP Announcement messages.";
                      }
    
                      leaf filtered-announce-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Announcement messages filtered on the current interface.";
                      }
    
                      leaf discovery-recv-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages received on the current interface.";
                      }
    
                      leaf discovery-send-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages sent on the current interface.";
                      }
    
                      leaf invalid-discovery-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of invalid Auto-RP Discovery messages.";
                      }
    
                      leaf filtered-discovery-num {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "Number of Auto-RP Discovery messages filtered on the current interface.";
                      }
                    }  // list if-message-statistic
                  }  // container if-message-statistics
                }  // list message-statistic
              }  // container message-statistics
    
              container routings {
                config false;
                description
                  "List of PIM routing information.";
                list routing {
                  key "type src-addr grp-addr";
                  description
                    "PIM routing state.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf src-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Multicast source address.";
                  }
    
                  leaf grp-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Multicast group address.";
                  }
    
                  leaf protocol {
                    type sg-mode;
                    description
                      "PIM protocol type.";
                  }
    
                  leaf rp-mode-type {
                    type rp-type;
                    description "RP type.";
                  }
    
                  leaf rp-addr {
                    type inet:ip-address-no-zone;
                    description "RP address.";
                  }
    
                  leaf rp-is-local-addr {
                    type boolean;
                    description
                      "Whether the RP address is a local address.";
                  }
    
                  leaf dg-flag {
                    type string {
                      length "0..49";
                    }
                    description
                      "Flag of the PIM (S, G) entry.";
                  }
    
                  leaf sg-uptime {
                    type pub-type:time-tick;
                    description
                      "Time since the PIM (S, G) entry was generated.";
                  }
    
                  leaf inbound-interface {
                    type pub-type:if-name;
                    description
                      "Inbound interface of the (S, G) entry.";
                  }
    
                  leaf src-vrf-name {
                    type pub-type:vrf-name;
                    description
                      "RPF Source VPN Instance.";
                  }
    
                  leaf rpf-vector-rd {
                    type string {
                      length "3..21";
                    }
                    description
                      "RD of the RPF vector.";
                  }
    
                  leaf rpf-vector-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Address of the RPF vector.";
                  }
    
                  leaf elected-vector-rd {
                    type string {
                      length "3..21";
                    }
                    description
                      "RD of the elected vector.";
                  }
    
                  leaf elected-vector-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Address of elected Vector.";
                  }
    
                  leaf up-nbr-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Upstream neighbor address of the (S, G) entry.";
                  }
    
                  leaf rpf-addr {
                    type inet:ip-address-no-zone;
                    description
                      "RPF address of the (S, G) entry.";
                  }
    
                  leaf reference-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Reference address of the (S, G) entry.";
                  }
    
                  leaf rpf-mask-len {
                    type uint32 {
                      range "0..32";
                    }
                    description
                      "Mask length of an RPF route.";
                  }
    
                  leaf rpf-metric {
                    type uint32 {
                      range "0..65535";
                    }
                    description
                      "Metric of an RPF route.";
                  }
    
                  leaf rpf-metric-priority {
                    type uint32 {
                      range "0..65535";
                    }
                    description
                      "Metric priority of an RPF route.";
                  }
    
                  leaf backup-inbound-if {
                    type string {
                      length "0..48";
                    }
                    description
                      "Backup inbound interface of the (S, G) entry.";
                  }
    
                  leaf backup-nbr-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Backup upstream neighbor address of the (S, G) entry.";
                  }
    
                  leaf backup-rpf-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Backup RPF address of the (S, G) entry.";
                  }
    
                  leaf up-status {
                    type sg-up-state;
                    description
                      "Upstream Up status of the (S, G) entry.";
                  }
    
                  leaf upstream-expiration-time {
                    type pub-type:time-tick;
                    description
                      "Wait time before Join messages are sent to the upstream interface.";
                  }
    
                  leaf rpt-status {
                    type rpt-up-state;
                    description "RPT status.";
                  }
    
                  leaf rpt-timeout-period {
                    type pub-type:time-tick;
                    description
                      "RPT timeout period.";
                  }
    
                  leaf registration-status {
                    type dr-register-state;
                    description
                      "Registration status.";
                  }
    
                  leaf registration-stop-time {
                    type pub-type:time-tick;
                    description
                      "Time when the registration stops.";
                  }
    
                  leaf graft-retry-expiration-time {
                    type pub-type:time-tick;
                    description
                      "Graft retry expiration time of the (S, G) entry.";
                  }
    
                  leaf prune-limit-expiration-time {
                    type pub-type:time-tick;
                    description
                      "Prune limit expiration time of the (S, G) entry.";
                  }
    
                  leaf override-expiration-time {
                    type pub-type:time-tick;
                    description
                      "Override expiration time of the (S, G) entry.";
                  }
    
                  leaf backup-upstream-expiration-time {
                    type pub-type:time-tick;
                    description
                      "Wait time before Join messages are sent to the backup upstream interface.";
                  }
    
                  leaf user-id {
                    type uint32;
                    description "User ID.";
                  }
    
                  leaf original-src-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Original source information.";
                  }
    
                  container downstreams {
                    description
                      "List of downstream information.";
                    list downstream {
                      key "if-name";
                      description
                        "Downstream statistics.";
                      leaf if-name {
                        type string {
                          length "0..48";
                        }
                        description
                          "Name of the downstream interface.";
                      }
    
                      leaf protocol-type {
                        type string {
                          length "0..48";
                        }
                        description
                          "Type of PIM protocol configured on the downstream interface.";
                      }
    
                      leaf up-time {
                        type pub-type:time-tick;
                        description
                          "Time since the interface was added to the downstream interface list.";
                      }
    
                      leaf timeout-period {
                        type pub-type:time-tick {
                        }
                        description
                          "Timeout period of the downstream interface.";
                      }
    
                      leaf dr-status {
                        type boolean;
                        description "DR status.";
                      }
    
                      leaf downstream {
                        type sg-down-state;
                        description
                          "Downstream status.";
                      }
    
                      leaf downstream-ppt {
                        type pub-type:time-tick;
                        description
                          "Timeout period of the downstream PPT.";
                      }
    
                      leaf assert-state-machine {
                        type assert-state;
                        description
                          "Assert state machine.";
                      }
    
                      leaf assert-timeout-period {
                        type pub-type:time-tick;
                        description
                          "Assert timeout period.";
                      }
    
                      leaf assert-winner-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Address of an assert winner.";
                      }
    
                      leaf assert-winner-metric {
                        type uint32 {
                          range "0..65535";
                        }
                        description
                          "Metric of an assert winner.";
                      }
    
                      leaf assert-winner-metric-priority {
                        type uint32 {
                          range "0..65535";
                        }
                        description
                          "Metric priority of an assert winner.";
                      }
    
                      leaf local-receiver-exist {
                        type boolean;
                        description
                          "Whether local receivers exist.";
                      }
    
                      leaf rpt-status {
                        type sg-rpt-ds-state;
                        description
                          "RPT status.";
                      }
    
                      leaf rpt-state-machine-ppt {
                        type pub-type:time-tick;
                        description
                          "PPT time of the RPT state machine.";
                      }
    
                      leaf rpt-timeout-period {
                        type pub-type:time-tick;
                        description
                          "RPT timeout period.";
                      }
    
                      leaf vector-attribute-status {
                        type rt-attribute-state;
                        description
                          "Downstream vector attribute state.";
                      }
    
                      leaf elected-vector {
                        type inet:ip-address-no-zone;
                        description
                          "Downstream elected vector.";
                      }
    
                      leaf elected-vector-nbr {
                        type inet:ip-address-no-zone;
                        description
                          "Downstream elected vector neighbor address.";
                      }
    
                      leaf vector-num {
                        type uint32 {
                          range "0..65535";
                        }
                        description
                          "Number of vectors.";
                      }
    
                      leaf ignore-dr-status {
                        type boolean;
                        default "false";
                        description
                          "Ignores DR status.";
                      }
    
                      container vectors {
                        description
                          "List of vector state.";
                        list vector {
                          key "nbr-addr vector-addr";
                          description
                            "Vector state.";
                          leaf nbr-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Neighbor Address.";
                          }
    
                          leaf vector-addr {
                            type inet:ip-address-no-zone;
                            description
                              "Address of a neighbor's elected vector.";
                          }
    
                          leaf vector-rd {
                            type string {
                              length "3..21";
                            }
                            description
                              "Vector RDs of neighbors.";
                          }
    
                          leaf timeout-period {
                            type pub-type:time-tick;
                            description
                              "Timeout period of the vector.";
                          }
    
                          container vector-hop-addrs {
                            description
                              "List of hop addresses of vectors.";
                            list vector-hop-addr {
                              key "vector-addr";
                              description
                                "Statistics of hop address.";
                              leaf vector-addr {
                                type inet:ip-address-no-zone;
                                description
                                  "Each hop address of a vector.";
                              }
    
                              leaf sequence-num {
                                type uint32;
                                description
                                  "Sequence number.";
                              }
                            }  // list vector-hop-addr
                          }  // container vector-hop-addrs
                        }  // list vector
                      }  // container vectors
                    }  // list downstream
                  }  // container downstreams
    
                  container recv-vrfs {
                    description
                      "List of receiver VPN instance information.";
                    list recv-vrf {
                      key "vrf-name";
                      description
                        "Statistics of receiver VPN instance.";
                      leaf vrf-name {
                        type pub-type:vrf-name;
                        description
                          "Receiver VPN instance.";
                      }
                    }  // list recv-vrf
                  }  // container recv-vrfs
                }  // list routing
              }  // container routings
    
              container claim-routings {
                config false;
                description
                  "List of claim routing state.";
                list claim-routing {
                  key "type destination-addr if-name rpf-neighbour";
                  description
                    "Claim routing state.";
                  leaf type {
                    type addr-family-type;
                    description
                      "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                  }
    
                  leaf destination-addr {
                    type inet:ip-address-no-zone;
                    description
                      "Destination address.";
                  }
    
                  leaf if-name {
                    type leafref {
                      path
                        "/ifm:ifm/ifm:interfaces/ifm:interface/ifm:name";
                    }
                    description
                      "Name of an RPF interface.";
                  }
    
                  leaf rpf-neighbour {
                    type inet:ip-address-no-zone;
                    description "RPF neighbor.";
                  }
    
                  leaf referenced-route {
                    type inet:ip-address-no-zone;
                    description
                      "Referenced route.";
                  }
    
                  leaf referenced-route-mask {
                    type uint32;
                    description
                      "Mask of the referenced route.";
                  }
    
                  leaf referenced-route-type {
                    type rpf-route-type;
                    description
                      "Type of the referenced route.";
                  }
    
                  leaf global-administrator {
                    type inet:ip-address-no-zone;
                    description
                      "Global Administrator field.";
                  }
    
                  leaf local-administrator {
                    type uint32;
                    description
                      "Local Administrator field.";
                  }
    
                  leaf as-number {
                    type uint32;
                    description "AS number.";
                  }
    
                  leaf backup-rpf-nbr {
                    type inet:ip-address-no-zone;
                    description
                      "Back RPF neighbor.";
                  }
    
                  leaf backup-global-administrator {
                    type inet:ip-address-no-zone;
                    description
                      "Back Global Administrator field.";
                  }
    
                  leaf backup-local-administrator {
                    type uint32;
                    description
                      "Back Local Administrator field.";
                  }
    
                  leaf backup-as-number {
                    type uint32;
                    description
                      "Back as number.";
                  }
    
                  container claim-routing-entrys {
                    description
                      "List of claim routing entries.";
                    list claim-routing-entry {
                      key "src-addr grp-addr";
                      description
                        "Operational data of a claim routing entry.";
                      leaf src-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast source address.";
                      }
    
                      leaf grp-addr {
                        type inet:ip-address-no-zone;
                        description
                          "Multicast group address.";
                      }
                    }  // list claim-routing-entry
                  }  // container claim-routing-entrys
                }  // list claim-routing
              }  // container claim-routings
    
              container invalid-messages {
                config false;
                description
                  "Statistics of invalid PIM messages.";
                container general-cnts {
                  description
                    "List of statistics of invalid general PIM messages.";
                  list general-cnt {
                    key "type";
                    description
                      "Statistics of invalid general PIM messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-version {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Invalid version.";
                    }
    
                    leaf invalid-type {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Invalid type.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Invalid message length.";
                    }
    
                    leaf bad-checksum {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Invalid message checksum.";
                    }
                  }  // list general-cnt
                }  // container general-cnts
    
                container invalid-register-cnts {
                  description
                    "List of statistics of invalid PIM Register messages.";
                  list invalid-register-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Register messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register messages with invalid destination addresses.";
                    }
                  }  // list invalid-register-cnt
                }  // container invalid-register-cnts
    
                container invalid-register-stop-cnts {
                  description
                    "List of statistics of invalid PIM Register-Stop messages.";
                  list invalid-register-stop-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Register-Stop messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register-Stop messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register-Stop messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-destination-sddr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Register-Stop messages with invalid destination addresses.";
                    }
    
                    leaf source-addr-not-rp {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of PIM messages in which the source addresses are not the RP address.";
                    }
                  }  // list invalid-register-stop-cnt
                }  // container invalid-register-stop-cnts
    
                container invalid-c-rp-cnts {
                  description
                    "List of statistics of invalid PIM C-RP messages.";
                  list invalid-c-rp-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM C-RP messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of C-RP messages with invalid destination addresses.";
                    }
    
                    leaf invalid-group-address {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of C-RP messages with invalid group addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of C-RP messages with invalid lengths.";
                    }
    
                    leaf adv-fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of C-RP messages with invalid Adv field lengths.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of C-RP messages with invalid multicast group addresses.";
                    }
                  }  // list invalid-c-rp-cnt
                }  // container invalid-c-rp-cnts
    
                container invalid-assert-cnts {
                  description
                    "List of statistics of invalid PIM Assert messages.";
                  list invalid-assert-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Assert messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Assert messages with invalid destination addresses.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Assert messages with invalid IP source addresses.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Assert messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Assert messages with invalid multicast group addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Assert messages with invalid lengths.";
                    }
                  }  // list invalid-assert-cnt
                }  // container invalid-assert-cnts
    
                container invalid-bsr-cnts {
                  description
                    "List of statistics of invalid PIM BSR messages.";
                  list invalid-bsr-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM BSR messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf bad-payload {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid payloads.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid lengths.";
                    }
    
                    leaf invalid-scope-mask {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid scope masks.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid multicast group addresses.";
                    }
    
                    leaf recv-by-non-c-bsr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages received by non-C-BSRs.";
                    }
    
                    leaf invalid-bsr-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages invalid BSR addresses.";
                    }
    
                    leaf fault-hash-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid hash lengths.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of BSR messages with invalid IP source addresses.";
                    }
                  }  // list invalid-bsr-cnt
                }  // container invalid-bsr-cnts
    
                container invalid-hello-cnts {
                  description
                    "List of statistics of invalid PIM Hello messages.";
                  list invalid-hello-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Hello messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-addr-list {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "List of invalid addresses for Hello messages.";
                    }
    
                    leaf invalid-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid lengths.";
                    }
    
                    leaf invalid-holdtime-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid holdtime lengths.";
                    }
    
                    leaf invalid-lan-prune-delay-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid LAN prune delay lengths.";
                    }
    
                    leaf invalid-dr-priority-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid DR priority lengths.";
                    }
    
                    leaf invalid-gen-id-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid generation ID lengths.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid destination addresses.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Hello messages with invalid IP source addresses.";
                    }
                  }  // list invalid-hello-cnt
                }  // container invalid-hello-cnts
    
                container invalid-join-prune-cnts {
                  description
                    "List of statistics of invalid PIM Join/Prune messages.";
                  list invalid-join-prune-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Join/Prune messages.";
                    leaf type {
                      type addr-family-type;
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Join/Prune messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Join/Prune messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-upstream-nbr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Join/Prune messages with invalid Upstream neighbors.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Join/Prune messages with invalid IP source addresses.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Join/Prune messages with invalid destination addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of messages with invalid lengths.";
                    }
                  }  // list invalid-join-prune-cnt
                }  // container invalid-join-prune-cnts
    
                container invalid-graft-cnts {
                  when
                    "../../../../ni:name='_public_'";
                  description
                    "List of statistics of invalid PIM Graft messages.";
                  list invalid-graft-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Graft messages.";
                    leaf type {
                      type addr-family-type;
                      must
                        "../type='ipv4unicast'";
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Graft messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Graft messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-up-nbr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Graft messages with invalid upstream neighbor information.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Graft messages with invalid IP source addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Graft messages with invalid lengths.";
                    }
                  }  // list invalid-graft-cnt
                }  // container invalid-graft-cnts
    
                container invalid-graft-ack-cnts {
                  when
                    "../../../../ni:name='_public_'";
                  description
                    "List of statistics of invalid PIM GraftAck messages.";
                  list invalid-graft-ack-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM GraftAck messages.";
                    leaf type {
                      type addr-family-type;
                      must
                        "../type='ipv4unicast'";
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of GraftAck messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of GraftAck messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-up-nbr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of GraftAck messages with invalid upstream neighbor information.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of GraftAck messages with invalid IP source addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of GraftAck messages with invalid lengths.";
                    }
                  }  // list invalid-graft-ack-cnt
                }  // container invalid-graft-ack-cnts
    
                container invalid-state-refresh-cnts {
                  when
                    "../../../../ni:name='_public_'";
                  description
                    "List of statistics of invalid PIM State-Refresh messages.";
                  list invalid-state-refresh-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM State-Refresh messages.";
                    leaf type {
                      type addr-family-type;
                      must
                        "../type='ipv4unicast'";
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-multicast-source {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of State-Refresh messages with invalid multicast source addresses.";
                    }
    
                    leaf invalid-multicast-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of State-Refresh messages with invalid multicast group addresses.";
                    }
    
                    leaf invalid-originator {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of State-Refresh messages with invalid Originator source addresses.";
                    }
    
                    leaf fault-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of State-Refresh messages with invalid lengths.";
                    }
                  }  // list invalid-state-refresh-cnt
                }  // container invalid-state-refresh-cnts
    
                container invalid-auto-rp-announce-cnts {
                  description
                    "List of statistics of invalid PIM Auto-RP Announcement messages.";
                  list invalid-auto-rp-announce-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Auto-RP Announcement messages.";
                    leaf type {
                      type addr-family-type;
                      must
                        "../type='ipv4unicast'";
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-destination-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Announcement messages with invalid destination addresses.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Announcement messages with invalid source IP addresses.";
                    }
    
                    leaf invalid-ttl {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Announcement messages with invalid TTL Value.";
                    }
    
                    leaf invalid-source-port {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Announcement messages with invalid source port.";
                    }
                  }  // list invalid-auto-rp-announce-cnt
                }  // container invalid-auto-rp-announce-cnts
    
                container invalid-auto-rp-discovery-cnts {
                  description
                    "List of statistics of invalid PIM Auto-RP Discovery messages.";
                  list invalid-auto-rp-discovery-cnt {
                    key "type";
                    description
                      "Statistics of invalid PIM Auto-RP Discovery messages.";
                    leaf type {
                      type addr-family-type;
                      must
                        "../type='ipv4unicast'";
                      description
                        "Address family, which determines whether an address belongs to IPv4 or IPv6.";
                    }
    
                    leaf invalid-length {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid lengths.";
                    }
    
                    leaf invalid-rp {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid RP.";
                    }
    
                    leaf invalid-ip-source-addr {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid source IP addresses.";
                    }
    
                    leaf invalid-group {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid Group addresses.";
                    }
    
                    leaf invalid-ttl {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid TTL Value.";
                    }
    
                    leaf invalid-source-port {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Number of Auto-RP Discovery messages with invalid source port.";
                    }
                  }  // list invalid-auto-rp-discovery-cnt
                }  // container invalid-auto-rp-discovery-cnts
              }  // container invalid-messages
            }  // container protocol
          }  // container pim
        }
    
        augment /mc:multicast {
          description
            "Adds PIM configuration to the multicast module.";
          container rpf-vector-paths {
            description
              "List of paths configuration to multicast sources.";
            list rpf-vector-path {
              key "path-name path-type";
              unique "path-name";
              max-elements 2048;
              description
                "Configure paths to multicast sources.";
              leaf path-name {
                type string {
                  length "1..31";
                  pattern '[^ \?]*';
                }
                description "Path name.";
              }
    
              leaf path-type {
                type pim-path-type;
                description "Path type.";
              }
    
              container hops {
                description
                  "List of IP addresses of hops on paths.";
                list hop {
                  key "index";
                  unique "ip-addr";
                  max-elements 22;
                  description
                    "Configure IP addresses of hops on paths.";
                  leaf index {
                    type uint32 {
                      range "1..1024";
                    }
                    description "Address index.";
                  }
    
                  leaf ip-addr {
                    type inet:ip-address-no-zone;
                    mandatory true;
                    description "IP address.";
                  }
                }  // list hop
              }  // container hops
            }  // list rpf-vector-path
          }  // container rpf-vector-paths
        }
      }  // module huawei-pim
    

© 2023 YumaWorks, Inc. All rights reserved.