Cisco-IOS-XR-um-router-pim-cfg

This module contains a collection of YANG definitions for Cisco IOS-XR router pim configuration. Copyright (c) 2019-2021 by Cis...

  • Version: 2021-02-10

    Cisco-IOS-XR-um-router-pim-cfg@2021-02-10


    
      module Cisco-IOS-XR-um-router-pim-cfg {
    
        yang-version 1;
    
        namespace
          "http://cisco.com/ns/yang/Cisco-IOS-XR-um-router-pim-cfg";
    
        prefix um-router-pim-cfg;
    
        import cisco-semver {
          prefix semver;
        }
        import Cisco-IOS-XR-types {
          prefix xr;
        }
        import ietf-inet-types {
          prefix inet;
        }
    
        organization "Cisco Systems, Inc.";
    
        contact
          "Cisco Systems, Inc.
         Customer Service
         
         Postal: 170 West Tasman Drive
         San Jose, CA 95134
         
         Tel: +1 800 553-NETS
         
         E-mail: cs-yang@cisco.com";
    
        description
          "This module contains a collection of YANG definitions
         for Cisco IOS-XR router pim configuration.
         
         Copyright (c) 2019-2021 by Cisco Systems, Inc.
         All rights reserved.";
    
        revision "2021-02-10" {
          description
            "Added new yang nodes in order to support sticky-dr feature
           2021-01-28
             Added cisco-support task yang nodes
           2020-12-09
             Removed cisco-support task nodes
           2020-10-15
             Adjusted must statement under bsr candidate-rp";
        }
    
        revision "2019-08-20" {
          description "Initial release";
        }
    
        semver:module-version "2.0.0";
        semver:module-version "1.0.0";
    
        container router {
          description "Enable a routing process";
          container pim {
            presence
              "Indicates a pim node is configured.";
            description
              "PIM configuration subcommands";
            container vrfs {
              description "VRF configs";
              list vrf {
                key "vrf-name";
                description "VRF configs";
                leaf vrf-name {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description "VRF configs";
                }
    
                container address-family {
                  description
                    "Enter Address Family command mode";
                  container ipv4 {
                    description
                      "IPv4 Address Family";
                    container rp-addresses {
                      description
                        "Configure Rendezvous Point";
                      list rp-address {
                        key "address";
                        description
                          "Configure Rendezvous Point";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description
                            "Configure Rendezvous Point";
                        }
    
                        leaf access-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          description
                            "Access list of groups that should map to given RP";
                        }
    
                        container override {
                          presence
                            "Indicates a override node is configured.";
                          description
                            "Static RP config overrides auto-rp and BSR";
                        }  // container override
                      }  // list rp-address
    
                      container bidir {
                        description
                          "Specify keyword bidir to configure a bidir RP";
                        list rp-address {
                          key "address";
                          description
                            "Configure Rendezvous Point";
                          leaf address {
                            type inet:ipv4-address-no-zone;
                            description
                              "Configure Rendezvous Point";
                          }
    
                          leaf access-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..32";
                            }
                            description
                              "Access list of groups that should map to given RP";
                          }
    
                          container override {
                            presence
                              "Indicates a override node is configured.";
                            description
                              "Static RP config overrides auto-rp and BSR";
                          }  // container override
                        }  // list rp-address
                      }  // container bidir
                    }  // container rp-addresses
    
                    leaf rp-static-deny {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Configure static RP deny range";
                    }
    
                    leaf accept-register {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Registers accept filter";
                    }
    
                    container suppress-data-registers {
                      presence
                        "Indicates a suppress-data-registers node is configured.";
                      description
                        "Suppress data registers after initial state setup";
                    }  // container suppress-data-registers
    
                    leaf register-source {
                      type xr:Interface-name;
                      description
                        "Source address to use for register messages";
                    }
    
                    container suppress-rpf-change-prunes {
                      presence
                        "Indicates a suppress-rpf-change-prunes node is configured.";
                      description
                        "Suppress prunes triggered as a result of RPF changes";
                    }  // container suppress-rpf-change-prunes
    
                    leaf neighbor-filter {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Neighbor filter";
                    }
    
                    container convergence {
                      description
                        "Convergence related parameters";
                      leaf rpf-conflict-join-delay {
                        type uint32 {
                          range "0..15";
                        }
                        description
                          "Delay in sending first join if RPF points to any downstream neighbor";
                      }
    
                      leaf link-down-prune-delay {
                        type uint32 {
                          range "0..60";
                        }
                        description
                          "Delay prunes if route join state transitions to not-joined on link down";
                      }
                    }  // container convergence
    
                    container spt-threshold {
                      description
                        "Configure threshold for switching to SPT on last-hop";
                      container infinity {
                        presence
                          "Indicates a infinity node is configured.";
                        description
                          "Always stay on shared-tree";
                        leaf group-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          description
                            "Only stay on the shared-tree for specified groups";
                        }
                      }  // container infinity
                    }  // container spt-threshold
    
                    container old-register-checksum {
                      presence
                        "Indicates a old-register-checksum node is configured.";
                      description
                        "Generate registers compatible with older IOS versions";
                    }  // container old-register-checksum
    
                    container neighbor-check-on-send {
                      description
                        "Check for PIM neighbor before sending control messages";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable this feature";
                      }  // container enable
                    }  // container neighbor-check-on-send
    
                    container neighbor-check-on-recv {
                      description
                        "Check for PIM neighbor before rcv'ing control messages";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable this feature";
                      }  // container enable
                    }  // container neighbor-check-on-recv
    
                    leaf hello-interval {
                      type uint32 {
                        range "1..3600";
                      }
                      description
                        "Inherited by all interfaces : Hello interval in seconds";
                    }
    
                    leaf dr-priority {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello DR priority";
                    }
    
                    leaf join-prune-interval {
                      type uint32 {
                        range "10..600";
                      }
                      description
                        "Inherited by all interfaces : Join-Prune interval";
                    }
    
                    leaf join-prune-mtu {
                      type uint32 {
                        range "576..65535";
                      }
                      description
                        "Inherited by all interfaces : Join-Prune MTU";
                    }
    
                    leaf propagation-delay {
                      type uint32 {
                        range "100..32767";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello Propagation delay";
                    }
    
                    leaf override-interval {
                      type uint32 {
                        range "400..65535";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello override interval";
                    }
    
                    container maximum {
                      description
                        "Maximum state limits";
                      container routes {
                        presence
                          "Indicates a routes node is configured.";
                        description "PIM routes";
                        leaf maximum-routes {
                          type uint32 {
                            range "1..200000";
                          }
                          mandatory true;
                          description
                            "PIM routes";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..200000";
                          }
                          must
                            ". <= ../maximum-routes";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container routes
    
                      container route-interfaces {
                        presence
                          "Indicates a route-interfaces node is configured.";
                        description
                          "PIM total number of interfaces on all routes";
                        leaf maximum-route-interfaces {
                          type uint32 {
                            range "1..1100000";
                          }
                          mandatory true;
                          description
                            "PIM total number of interfaces on all routes";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..1100000";
                          }
                          must
                            ". <= ../maximum-route-interfaces";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container route-interfaces
    
                      container register-states {
                        presence
                          "Indicates a register-states node is configured.";
                        description
                          "PIM source register states";
                        leaf maximum-register-states {
                          type uint32 {
                            range "0..75000";
                          }
                          mandatory true;
                          description
                            "PIM source register states";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "0..75000";
                          }
                          must
                            ". <= ../maximum-register-states";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container register-states
    
                      container group-mappings {
                        description
                          "PIM group-to-RP mapping ranges";
                        container bsr {
                          presence
                            "Indicates a group-mappings node is configured.";
                          description
                            "Learned through the BSR distribution mechanism";
                          leaf maximum-bsr {
                            type uint32 {
                              range "1..10000";
                            }
                            mandatory true;
                            description
                              "Learned through the BSR distribution mechanism";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..10000";
                            }
                            must
                              ". <= ../maximum-bsr";
                            description
                              "Set threshold to print warning";
                          }
                        }  // container bsr
    
                        container autorp {
                          presence
                            "Indicates a autorp node is configured.";
                          description
                            "Learned through the Auto-RP distribution mechanism";
                          leaf maximum-autorp {
                            type uint32 {
                              range "1..10000";
                            }
                            mandatory true;
                            description
                              "Learned through the Auto-RP distribution mechanism";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..10000";
                            }
                            must
                              ". <= ../maximum-autorp";
                            description
                              "Set threshold to print warning";
                          }
                        }  // container autorp
                      }  // container group-mappings
    
                      container bsr {
                        description
                          "BSR maximum C-RP cache setting";
                        container crp-cache {
                          presence
                            "Indicates a crp-cache node is configured.";
                          description
                            "Set maximum number of C-RP cache in BSR";
                          leaf maximum-crp-cache {
                            type uint32 {
                              range "1..10000";
                            }
                            mandatory true;
                            description
                              "Set maximum number of C-RP cache in BSR";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..10000";
                            }
                            must
                              ". <= ../maximum-crp-cache";
                            description
                              "Set threshold to print warning";
                          }
                        }  // container crp-cache
                      }  // container bsr
                    }  // container maximum
    
                    leaf convergence-timeout {
                      type uint32 {
                        range "1800..2400";
                      }
                      description
                        "Timeout value for the RIB convergence notification";
                    }
    
                    container log {
                      description
                        "Enable PIM logging";
                      container neighbor {
                        description
                          "Enable PIM neighbor logging";
                        container changes {
                          presence
                            "Indicates a changes node is configured.";
                          description
                            "Enable PIM neighbor state logging";
                        }  // container changes
                      }  // container neighbor
                    }  // container log
    
                    container rpf-vector {
                      presence
                        "Indicates a rpf-vector node is configured.";
                      description
                        "Enable PIM RPF Vector";
                      container allow-ebgp {
                        presence
                          "Indicates a allow-ebgp node is configured.";
                        description
                          "Allow origination of RPF vector over an eBGP session";
                      }  // container allow-ebgp
    
                      container disable-ibgp {
                        presence
                          "Indicates a disable-ibgp node is configured.";
                        description
                          "Disable origination of RPF vector over an iBGP session";
                      }  // container disable-ibgp
    
                      container use-standard-encoding {
                        presence
                          "Indicates a use-standard-encoding node is configured.";
                        description
                          "Use RFC standard encode type";
                      }  // container use-standard-encoding
                    }  // container rpf-vector
    
                    container rpf-vector-injects {
                      description
                        "inject RPF vector";
                      list inject {
                        must "rpf-vector";
                        key "source-address masklen";
                        description
                          "inject RPF vector";
                        leaf source-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "inject RPF vector";
                        }
    
                        leaf masklen {
                          type uint32 {
                            range "0..32";
                          }
                          description "masklen";
                        }
    
                        leaf-list rpf-vector {
                          type inet:ipv4-address-no-zone;
                          max-elements 22;
                          description
                            "configure this node";
                        }
                      }  // list inject
                    }  // container rpf-vector-injects
    
                    container explicit-rpf-vector {
                      description
                        "Enable Explicit PIM RPF Vector";
                      container injects {
                        description
                          "inject Explicit RPF vector";
                        list inject {
                          must "rpf-vector";
                          key "source-address masklen";
                          description
                            "inject Explicit RPF vector";
                          leaf source-address {
                            type inet:ipv4-address-no-zone;
                            description
                              "inject Explicit RPF vector";
                          }
    
                          leaf masklen {
                            type uint32 {
                              range "0..32";
                            }
                            description
                              "masklen";
                          }
    
                          leaf-list rpf-vector {
                            type inet:ipv4-address-no-zone;
                            max-elements 22;
                            description
                              "configure this node";
                          }
                        }  // list inject
                      }  // container injects
                    }  // container explicit-rpf-vector
    
                    container rpf {
                      description "RPF commands";
                      container topology {
                        description
                          "Select RPF topology";
                        leaf route-policy {
                          type xr:Route-policy-name;
                          description
                            "Route policy to select RPF topology";
                        }
                      }  // container topology
                    }  // container rpf
    
                    container mdt {
                      description
                        "Multicast Distribution Tree commands";
                      leaf neighbor-filter {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Neighbor filter";
                      }
    
                      container data {
                        description
                          "Data MDT Options";
                        leaf switchover-interval {
                          type uint32 {
                            range "3..60";
                          }
                          description
                            "Data MDT switchover interval";
                        }
    
                        leaf announce-interval {
                          type uint32 {
                            range "3..120";
                          }
                          description
                            "Periodic Data MDT Join TLV interval";
                        }
    
                        leaf max-aggregation {
                          type uint32 {
                            range "1..16777215";
                          }
                          description
                            "Data MDT max-aggregation";
                        }
                      }  // container data
    
                      container c-multicast-routing {
                        presence
                          "Indicates a c-multicast-routing node is configured.";
                        description
                          "MVPN customer routing commands";
                        leaf type {
                          type enumeration {
                            enum "pim" {
                              value 1;
                              description
                                "PIM customer multicast routing";
                            }
                            enum "bgp" {
                              value 2;
                              description
                                "BGP customer multicast routing";
                            }
                          }
                          mandatory true;
                          description
                            "MVPN customer routing commands";
                        }
    
                        container announce-pim-join-tlv {
                          presence
                            "Indicates a announce-pim-join-tlv node is configured.";
                          description
                            "Announce PIM MDT Join TLVs";
                        }  // container announce-pim-join-tlv
    
                        container suppress-shared-tree-join {
                          presence
                            "Indicates a suppress-shared-tree-join node is configured.";
                          description
                            "Suppress shared tree joins";
                        }  // container suppress-shared-tree-join
    
                        container suppress-pim-data-signaling {
                          presence
                            "Indicates a suppress-pim-data-signaling node is configured.";
                          description
                            "Suppress PIM data signaling";
                        }  // container suppress-pim-data-signaling
    
                        container mdt-hello {
                          when
                            "../type != 'pim'";
                          description
                            "PIM Hellos over MDT";
                          container enable {
                            presence
                              "Indicates a enable node is configured.";
                            description
                              "Enable PIM Hellos over MDT";
                          }  // container enable
                        }  // container mdt-hello
    
                        leaf shared-tree-prune-delay {
                          type uint32 {
                            range "0..1800";
                          }
                          description
                            "Delay before pruning I-S PMSI from S,G when SA received";
                        }
    
                        leaf source-tree-prune-delay {
                          type uint32 {
                            range "0..300";
                          }
                          description
                            "Delay before removing PMSI from olist after BGP withdrawal";
                        }
    
                        container migration {
                          presence
                            "Indicates a migration node is configured.";
                          description
                            "customer routing migration";
                          leaf route-policy {
                            type xr:Route-policy-name;
                            description
                              "Route policy to select customer routing";
                          }
                        }  // container migration
    
                        container unicast-reachability {
                          description
                            "Control addition of Extended Communities to Unicast VPN-IP routes";
                          container connector {
                            description
                              "Enable/Disable Connector";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable Connector Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable Connector Attribute";
                            }  // container enable
                          }  // container connector
    
                          container source-as {
                            description
                              "Enable/Disable Source AS";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable Source-AS Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable Source-AS Attribute";
                            }  // container enable
                          }  // container source-as
    
                          container vrf-route-import {
                            description
                              "Enable/Disable VRF Route Import";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable VRF Route Import Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable VRF Route Import Attribute";
                            }  // container enable
                          }  // container vrf-route-import
                        }  // container unicast-reachability
                      }  // container c-multicast-routing
                    }  // container mdt
    
                    container allow-rp {
                      presence
                        "Indicates a allow-rp node is configured.";
                      description
                        "Sparse-Mode RP addresses to be allowed";
                      leaf rp-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list for allowed RP addresses";
                      }
    
                      leaf group-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list for allowed group ranges";
                      }
                    }  // container allow-rp
    
                    container sg-expiry-timer {
                      presence
                        "Indicates a sg-expiry-timer node is configured.";
                      description
                        "Configure SG expiry timer";
                      leaf sg-expiry-timer-value {
                        type uint32 {
                          range "40..57600";
                        }
                        mandatory true;
                        description
                          "Configure SG expiry timer";
                      }
    
                      leaf sg-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list of (S,G) routes for which expiry timer is applicable";
                      }
                    }  // container sg-expiry-timer
    
                    container ssm {
                      description
                        "Configure a group range for Source-Specific use";
                      leaf range {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        must "not(../disable)";
                        description
                          "Provide ACL that specifies non-standard SSM range";
                      }
    
                      container disable {
                        must "not(../range)";
                        presence
                          "Indicates a disable node is configured.";
                        description
                          "Disable use of all SSM group ranges";
                      }  // container disable
    
                      container allow-override {
                        presence
                          "Indicates a allow-override node is configured.";
                        description
                          "Allow SSM ranges to be overridden by more specific ranges";
                      }  // container allow-override
                    }  // container ssm
    
                    container multipath {
                      presence
                        "Indicates a multipath node is configured.";
                      description
                        "Enable equal-cost multipath routing";
                      container hash {
                        must
                          "source or source-nexthop or source-group";
                        presence
                          "Indicates a hash node is configured.";
                        description
                          "Enter a hashing algorithm";
                        container source {
                          must
                            "not(../source-nexthop) and not(../source-group)";
                          presence
                            "Indicates a source node is configured.";
                          description
                            "Enable source based multipath hashing (Compatible with IOS versions)";
                        }  // container source
    
                        container source-nexthop {
                          must
                            "not(../source) and not(../source-group)";
                          presence
                            "Indicates a source-nexthop node is configured.";
                          description
                            "Enable source with next-hop multipath hashing (better distribution)";
                        }  // container source-nexthop
    
                        container source-group {
                          must
                            "not(../source-nexthop) and not(../source)";
                          presence
                            "Indicates a source-group node is configured.";
                          description
                            "Enable source, group based multipath hashing (Compatible with IOS versions)";
                        }  // container source-group
                      }  // container hash
                    }  // container multipath
    
                    container auto-rp {
                      description
                        "Auto-RP Commands";
                      container listen {
                        description
                          "RP discovery through AUTORP protocol";
                        container disable {
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable RP discovery through the AUTORP protocol";
                        }  // container disable
                      }  // container listen
    
                      container relay {
                        description "relay";
                        container vrfs {
                          description "vrf";
                          list vrf {
                            key "vrf-name";
                            description "vrf";
                            leaf vrf-name {
                              type xr:Cisco-ios-xr-string {
                                length "1..32";
                              }
                              description "vrf";
                            }
    
                            container listen {
                              presence
                                "Indicates a listen node is configured.";
                              description
                                "Enable RP relay in listen mode";
                            }  // container listen
                          }  // list vrf
                        }  // container vrfs
                      }  // container relay
                    }  // container auto-rp
    
                    container interfaces {
                      description
                        "PIM interface configuration subcommands";
                      list interface {
                        key "interface-name";
                        description
                          "Select an interface to configure";
                        leaf interface-name {
                          type xr:Interface-name;
                          description
                            "Select an interface to configure";
                        }
    
                        leaf dr-priority {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "PIM Hello DR priority";
                        }
    
                        leaf hello-interval {
                          type uint32 {
                            range "1..3600";
                          }
                          description
                            "PIM neighbor Hello announcement interval";
                        }
    
                        leaf join-prune-interval {
                          type uint32 {
                            range "10..600";
                          }
                          description
                            "PIM periodic Join-Prune announcement interval";
                        }
    
                        leaf join-prune-mtu {
                          type uint32 {
                            range "576..65535";
                          }
                          description
                            "MTU to use when sending PIM J/P packets";
                        }
    
                        leaf propagation-delay {
                          type uint32 {
                            range "100..32767";
                          }
                          description
                            "PIM Hello propagation delay";
                        }
    
                        leaf override-interval {
                          type uint32 {
                            range "400..65535";
                          }
                          description
                            "PIM Hello override interval";
                        }
    
                        container bsr-border {
                          presence
                            "Indicates a bsr-border node is configured.";
                          description
                            "Do not fwd BSR messages on this interface";
                        }  // container bsr-border
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable PIM processing on this interface";
                        }  // container enable
    
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable PIM processing on this interface";
                        }  // container disable
    
                        leaf neighbor-filter {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description
                            "PIM Neighbor filter on this interface";
                        }
    
                        container maximum {
                          description
                            "Per interface maximum state limits";
                          container route-interfaces {
                            presence
                              "Indicates a route-interfaces node is configured.";
                            description
                              "PIM downstream joined interfaces";
                            leaf maximum-route-interfaces {
                              type uint32 {
                                range
                                  "1..1100000";
                              }
                              mandatory true;
                              description
                                "PIM downstream joined interfaces";
                            }
    
                            leaf threshold {
                              type uint32 {
                                range
                                  "1..1100000";
                              }
                              must
                                ". <= ../maximum-route-interfaces";
                              description
                                "Threshold warning";
                            }
    
                            leaf access-list {
                              type xr:Cisco-ios-xr-string {
                                length "1..64";
                              }
                              description
                                "Name of ACL that specifies to which routes to apply the maximum limit";
                            }
                          }  // container route-interfaces
                        }  // container maximum
    
                        container bfd {
                          description
                            "Configure BFD parameters";
                          container fast-detect {
                            presence
                              "Indicates a fast-detect node is configured.";
                            description
                              "Enable Fast detection";
                          }  // container fast-detect
    
                          leaf minimum-interval {
                            type uint32 {
                              range "3..30000";
                            }
                            description
                              "Hello interval";
                          }
    
                          leaf multiplier {
                            type uint32 {
                              range "2..50";
                            }
                            description
                              "Detect multiplier";
                          }
                        }  // container bfd
    
                        container sticky-dr {
                          presence
                            "Indicates a sticky-dr node is configured.";
                          description
                            "Enable sticky DR on this interface";
                        }  // container sticky-dr
                      }  // list interface
                    }  // container interfaces
    
                    container bsr {
                      description
                        "BSR Configurations";
                      container candidate-bsr {
                        presence
                          "Indicates a candidate-bsr node is configured.";
                        description
                          "configure candidate BSR";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          mandatory true;
                          description
                            "IP address of configured BSR";
                        }
    
                        leaf hash-mask-len {
                          type uint32 {
                            range "0..32";
                          }
                          mandatory true;
                          description
                            "BSR Hash Mask Length";
                        }
    
                        leaf priority {
                          type uint32 {
                            range "1..255";
                          }
                          mandatory true;
                          description
                            "BSR Priority";
                        }
                      }  // container candidate-bsr
    
                      container candidate-rps {
                        description
                          "BSR Candidate RP Configurations";
                        list candidate-rp {
                          must
                            "(priority and interval) or (bidir/priority and bidir/interval)";
                          key "address";
                          description
                            "BSR Candidate RP Configurations";
                          leaf address {
                            type inet:ipv4-address-no-zone;
                            description
                              "BSR Candidate RP Configurations";
                          }
    
                          leaf group-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..64";
                            }
                            description
                              "Group List access-list";
                          }
    
                          leaf priority {
                            type uint32 {
                              range "1..255";
                            }
                            description
                              "C-RP Priority";
                          }
    
                          leaf interval {
                            type uint32 {
                              range "30..600";
                            }
                            description
                              "C-RP Advertisement interval";
                          }
    
                          container bidir {
                            description
                              "To specify group ranges as Bidir";
                            leaf group-list {
                              type xr:Cisco-ios-xr-string {
                                length "1..64";
                              }
                              description
                                "Group List access-list";
                            }
    
                            leaf priority {
                              type uint32 {
                                range "1..255";
                              }
                              description
                                "C-RP Priority";
                            }
    
                            leaf interval {
                              type uint32 {
                                range "30..600";
                              }
                              description
                                "C-RP Advertisement interval";
                            }
                          }  // container bidir
                        }  // list candidate-rp
                      }  // container candidate-rps
    
                      container relay {
                        description
                          "BSR RP relay config";
                        container vrfs {
                          description "vrf";
                          list vrf {
                            key "vrf-name";
                            description "vrf";
                            leaf vrf-name {
                              type xr:Cisco-ios-xr-string {
                                length "1..1024";
                              }
                              description "vrf";
                            }
    
                            container listen {
                              presence
                                "Indicates a listen node is configured.";
                              description
                                "Enable RP relay in listen mode";
                            }  // container listen
                          }  // list vrf
                        }  // container vrfs
                      }  // container relay
                    }  // container bsr
    
                    container mofrr {
                      presence
                        "Indicates a mofrr node is configured.";
                      description "PIM Mofrr";
                      leaf flow {
                        type xr:Cisco-ios-xr-string {
                          length "1..1024";
                        }
                        description
                          "Multicast Only FRR";
                      }
    
                      leaf rib {
                        type string {
                          length "1..1024";
                        }
                        description
                          "Use the rib keyword to restrict switchover triggers to RIB events";
                      }
    
                      container non-revertive {
                        presence
                          "Indicates a non-revertive node is configured.";
                        description
                          "Non-revertive MoFRR";
                      }  // container non-revertive
    
                      container clone {
                        description
                          "Use the clone keyword to clone";
                        container joins {
                          description
                            "Use the join keyword to clone S,G as S1,G joins as S2,G joins";
                          list join {
                            must "to";
                            key "address";
                            description
                              "Use the join keyword to clone S,G as S1,G joins as S2,G joins";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source S";
                            }
    
                            list to {
                              must "and";
                              key "address";
                              description "to";
                              leaf address {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Source S1";
                              }
    
                              list and {
                                must "masklen";
                                key "address";
                                description
                                  "and";
                                leaf address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source S2";
                                }
    
                                list masklen {
                                  key "mask-length";
                                  description
                                    "masklen";
                                  leaf mask-length {
                                    type uint32 {
                                      range
                                        "0..32";
                                    }
                                    description
                                      "masklen";
                                  }
                                }  // list masklen
                              }  // list and
                            }  // list to
                          }  // list join
                        }  // container joins
    
                        container sources {
                          description
                            "Use the source keyword to clone S,G as S1,G traffic and S2,G traffic";
                          list source {
                            must "to";
                            key "address";
                            description
                              "Use the source keyword to clone S,G as S1,G traffic and S2,G traffic";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source S";
                            }
    
                            list to {
                              must "and";
                              key "address";
                              description "to";
                              leaf address {
                                type inet:ipv4-address-no-zone;
                                description
                                  "Source S1";
                              }
    
                              list and {
                                must "masklen";
                                key "address";
                                description
                                  "and";
                                leaf address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source S2";
                                }
    
                                list masklen {
                                  key "mask-length";
                                  description
                                    "masklen";
                                  leaf mask-length {
                                    type uint32 {
                                      range
                                        "0..32";
                                    }
                                    description
                                      "masklen";
                                  }
                                }  // list masklen
                              }  // list and
                            }  // list to
                          }  // list source
                        }  // container sources
                      }  // container clone
                    }  // container mofrr
    
                    container sr-p2mp-policies {
                      description
                        "Segment-routing P2MP policy";
                      list sr-p2mp-policy {
                        key "policy-name";
                        description
                          "Segment-routing P2MP policy";
                        leaf policy-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description
                            "Segment-routing P2MP policy";
                        }
    
                        container static-group {
                          description
                            "ipv4 static multicast group";
                          list group-address {
                            key "group-address";
                            description
                              "ipv4 static multicast group";
                            leaf group-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "ipv4 static multicast group";
                            }
    
                            container group-address-only {
                              presence
                                "Indicates a group-address-only node is configured.";
                              description
                                "Group-address without increment mask/source-address";
                            }  // container group-address-only
    
                            container group-address-inc-masks {
                              description
                                "Group-address with increment mask for group address";
                              list inc-mask {
                                key "group-mask-address";
                                description
                                  "Increment mask for group address";
                                leaf group-mask-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-inc-masks
    
                            container group-address-source-address {
                              description
                                "Group-address with source-address";
                              list source-address {
                                key "source-address";
                                description
                                  "Source address to join";
                                leaf source-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source address to join";
                                }
                              }  // list source-address
                            }  // container group-address-source-address
    
                            container group-address-inc-mask-source-address {
                              description
                                "Group-address with increment-mask and source-address";
                              list inc-mask {
                                key "group-mask-address source-address";
                                description
                                  "Increment mask for group address";
                                leaf group-mask-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf source-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-inc-mask-source-address
    
                            container group-address-source-address-inc-mask {
                              description
                                "Group-address and source-address with increment-mask";
                              list inc-mask {
                                key "source-address source-mask-address";
                                description
                                  "Increment mask for group address";
                                leaf source-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf source-mask-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Increment mask for source address";
                                }
    
                                leaf source-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of source addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-source-address-inc-mask
    
                            container group-inc-mask-source-inc-mask {
                              description
                                "Group-address with increment-mask and source-address with increment-mask";
                              list inc-mask {
                                key "group-mask-address source-address source-mask-address";
                                leaf group-mask-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf source-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf source-mask-address {
                                  type inet:ipv4-address-no-zone;
                                  description
                                    "Increment mask for source address";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
    
                                leaf source-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of source addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-inc-mask-source-inc-mask
                          }  // list group-address
                        }  // container static-group
                      }  // list sr-p2mp-policy
                    }  // container sr-p2mp-policies
                  }  // container ipv4
    
                  container ipv6 {
                    description
                      "IPv6 Address Family";
                    container rp-addresses {
                      description
                        "Configure Rendezvous Point";
                      list rp-address {
                        key "address";
                        description
                          "Configure Rendezvous Point";
                        leaf address {
                          type inet:ipv6-address-no-zone;
                          description
                            "Configure Rendezvous Point";
                        }
    
                        leaf access-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          description
                            "Access list of groups that should map to given RP";
                        }
    
                        container override {
                          presence
                            "Indicates a override node is configured.";
                          description
                            "Static RP config overrides auto-rp and BSR";
                        }  // container override
                      }  // list rp-address
    
                      container bidir {
                        description
                          "Specify keyword bidir to configure a bidir RP";
                        list rp-address {
                          key "address";
                          description
                            "Configure Rendezvous Point";
                          leaf address {
                            type inet:ipv6-address-no-zone;
                            description
                              "Configure Rendezvous Point";
                          }
    
                          leaf access-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..32";
                            }
                            description
                              "Access list of groups that should map to given RP";
                          }
    
                          container override {
                            presence
                              "Indicates a override node is configured.";
                            description
                              "Static RP config overrides auto-rp and BSR";
                          }  // container override
                        }  // list rp-address
                      }  // container bidir
                    }  // container rp-addresses
    
                    leaf rp-static-deny {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Configure static RP deny range";
                    }
    
                    leaf accept-register {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Registers accept filter";
                    }
    
                    container suppress-data-registers {
                      presence
                        "Indicates a suppress-data-registers node is configured.";
                      description
                        "Suppress data registers after initial state setup";
                    }  // container suppress-data-registers
    
                    leaf register-source {
                      type xr:Interface-name;
                      description
                        "Source address to use for register messages";
                    }
    
                    container suppress-rpf-change-prunes {
                      presence
                        "Indicates a suppress-rpf-change-prunes node is configured.";
                      description
                        "Suppress prunes triggered as a result of RPF changes";
                    }  // container suppress-rpf-change-prunes
    
                    leaf neighbor-filter {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Neighbor filter";
                    }
    
                    container convergence {
                      description
                        "Convergence related parameters";
                      leaf rpf-conflict-join-delay {
                        type uint32 {
                          range "0..15";
                        }
                        description
                          "Delay in sending first join if RPF points to any downstream neighbor";
                      }
    
                      leaf link-down-prune-delay {
                        type uint32 {
                          range "0..60";
                        }
                        description
                          "Delay prunes if route join state transitions to not-joined on link down";
                      }
                    }  // container convergence
    
                    container spt-threshold {
                      description
                        "Configure threshold for switching to SPT on last-hop";
                      container infinity {
                        presence
                          "Indicates a infinity node is configured.";
                        description
                          "Always stay on shared-tree";
                        leaf group-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          description
                            "Only stay on the shared-tree for specified groups";
                        }
                      }  // container infinity
                    }  // container spt-threshold
    
                    container old-register-checksum {
                      presence
                        "Indicates a old-register-checksum node is configured.";
                      description
                        "Generate registers compatible with older IOS versions";
                    }  // container old-register-checksum
    
                    container neighbor-check-on-send {
                      description
                        "Check for PIM neighbor before sending control messages";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable this feature";
                      }  // container enable
                    }  // container neighbor-check-on-send
    
                    container neighbor-check-on-recv {
                      description
                        "Check for PIM neighbor before rcv'ing control messages";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable this feature";
                      }  // container enable
                    }  // container neighbor-check-on-recv
    
                    leaf hello-interval {
                      type uint32 {
                        range "1..3600";
                      }
                      description
                        "Inherited by all interfaces : Hello interval in seconds";
                    }
    
                    leaf dr-priority {
                      type uint32 {
                        range "0..4294967295";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello DR priority";
                    }
    
                    leaf join-prune-interval {
                      type uint32 {
                        range "10..600";
                      }
                      description
                        "Inherited by all interfaces : Join-Prune interval";
                    }
    
                    leaf join-prune-mtu {
                      type uint32 {
                        range "576..65535";
                      }
                      description
                        "Inherited by all interfaces : Join-Prune MTU";
                    }
    
                    leaf propagation-delay {
                      type uint32 {
                        range "100..32767";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello Propagation delay";
                    }
    
                    leaf override-interval {
                      type uint32 {
                        range "400..65535";
                      }
                      description
                        "Inherited by all interfaces : PIM Hello override interval";
                    }
    
                    container maximum {
                      description
                        "Maximum state limits";
                      container routes {
                        presence
                          "Indicates a routes node is configured.";
                        description "PIM routes";
                        leaf maximum-routes {
                          type uint32 {
                            range "1..200000";
                          }
                          mandatory true;
                          description
                            "PIM routes";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..200000";
                          }
                          must
                            ". <= ../maximum-routes";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container routes
    
                      container route-interfaces {
                        presence
                          "Indicates a route-interfaces node is configured.";
                        description
                          "PIM total number of interfaces on all routes";
                        leaf maximum-route-interfaces {
                          type uint32 {
                            range "1..1100000";
                          }
                          mandatory true;
                          description
                            "PIM total number of interfaces on all routes";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..1100000";
                          }
                          must
                            ". <= ../maximum-route-interfaces";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container route-interfaces
    
                      container register-states {
                        presence
                          "Indicates a register-states node is configured.";
                        description
                          "PIM source register states";
                        leaf maximum-register-states {
                          type uint32 {
                            range "0..75000";
                          }
                          mandatory true;
                          description
                            "PIM source register states";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "0..75000";
                          }
                          must
                            ". <= ../maximum-register-states";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container register-states
    
                      container group-mappings {
                        description
                          "PIM group-to-RP mapping ranges";
                        container bsr {
                          presence
                            "Indicates a group-mappings node is configured.";
                          description
                            "Learned through the BSR distribution mechanism";
                          leaf maximum-bsr {
                            type uint32 {
                              range "1..10000";
                            }
                            mandatory true;
                            description
                              "Learned through the BSR distribution mechanism";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..10000";
                            }
                            must
                              ". <= ../maximum-bsr";
                            description
                              "Set threshold to print warning";
                          }
                        }  // container bsr
                      }  // container group-mappings
    
                      container bsr {
                        description
                          "BSR maximum C-RP cache setting";
                        container crp-cache {
                          presence
                            "Indicates a crp-cache node is configured.";
                          description
                            "Set maximum number of C-RP cache in BSR";
                          leaf maximum-crp-cache {
                            type uint32 {
                              range "1..10000";
                            }
                            mandatory true;
                            description
                              "Set maximum number of C-RP cache in BSR";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..10000";
                            }
                            must
                              ". <= ../maximum-crp-cache";
                            description
                              "Set threshold to print warning";
                          }
                        }  // container crp-cache
                      }  // container bsr
                    }  // container maximum
    
                    leaf convergence-timeout {
                      type uint32 {
                        range "1800..2400";
                      }
                      description
                        "Timeout value for the RIB convergence notification";
                    }
    
                    container log {
                      description
                        "Enable PIM logging";
                      container neighbor {
                        description
                          "Enable PIM neighbor logging";
                        container changes {
                          presence
                            "Indicates a changes node is configured.";
                          description
                            "Enable PIM neighbor state logging";
                        }  // container changes
                      }  // container neighbor
                    }  // container log
    
                    container rpf-vector {
                      presence
                        "Indicates a rpf-vector node is configured.";
                      description
                        "Enable PIM RPF Vector";
                      container allow-ebgp {
                        presence
                          "Indicates a allow-ebgp node is configured.";
                        description
                          "Allow origination of RPF vector over an eBGP session";
                      }  // container allow-ebgp
    
                      container disable-ibgp {
                        presence
                          "Indicates a disable-ibgp node is configured.";
                        description
                          "Disable origination of RPF vector over an iBGP session";
                      }  // container disable-ibgp
    
                      container use-standard-encoding {
                        presence
                          "Indicates a use-standard-encoding node is configured.";
                        description
                          "Use RFC standard encode type";
                      }  // container use-standard-encoding
                    }  // container rpf-vector
    
                    container rpf {
                      description "RPF commands";
                      container topology {
                        description
                          "Select RPF topology";
                        leaf route-policy {
                          type xr:Route-policy-name;
                          description
                            "Route policy to select RPF topology";
                        }
                      }  // container topology
                    }  // container rpf
    
                    container mdt {
                      description
                        "Multicast Distribution Tree commands";
                      leaf neighbor-filter {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Neighbor filter";
                      }
    
                      container data {
                        description
                          "Data MDT Options";
                        leaf switchover-interval {
                          type uint32 {
                            range "3..60";
                          }
                          description
                            "Data MDT switchover interval";
                        }
    
                        leaf announce-interval {
                          type uint32 {
                            range "3..120";
                          }
                          description
                            "Periodic Data MDT Join TLV interval";
                        }
    
                        leaf max-aggregation {
                          type uint32 {
                            range "1..16777215";
                          }
                          description
                            "Data MDT max-aggregation";
                        }
                      }  // container data
    
                      container c-multicast-routing {
                        presence
                          "Indicates a c-multicast-routing node is configured.";
                        description
                          "MVPN customer routing commands";
                        leaf type {
                          type enumeration {
                            enum "pim" {
                              value 1;
                              description
                                "PIM customer multicast routing";
                            }
                            enum "bgp" {
                              value 2;
                              description
                                "BGP customer multicast routing";
                            }
                          }
                          mandatory true;
                          description
                            "MVPN customer routing commands";
                        }
    
                        container announce-pim-join-tlv {
                          presence
                            "Indicates a announce-pim-join-tlv node is configured.";
                          description
                            "Announce PIM MDT Join TLVs";
                        }  // container announce-pim-join-tlv
    
                        container suppress-shared-tree-join {
                          presence
                            "Indicates a suppress-shared-tree-join node is configured.";
                          description
                            "Suppress shared tree joins";
                        }  // container suppress-shared-tree-join
    
                        container suppress-pim-data-signaling {
                          presence
                            "Indicates a suppress-pim-data-signaling node is configured.";
                          description
                            "Suppress PIM data signaling";
                        }  // container suppress-pim-data-signaling
    
                        container mdt-hello {
                          when
                            "../type != 'pim'";
                          description
                            "PIM Hellos over MDT";
                          container enable {
                            presence
                              "Indicates a enable node is configured.";
                            description
                              "Enable PIM Hellos over MDT";
                          }  // container enable
                        }  // container mdt-hello
    
                        leaf shared-tree-prune-delay {
                          type uint32 {
                            range "0..1800";
                          }
                          description
                            "Delay before pruning I-S PMSI from S,G when SA received";
                        }
    
                        leaf source-tree-prune-delay {
                          type uint32 {
                            range "0..300";
                          }
                          description
                            "Delay before removing PMSI from olist after BGP withdrawal";
                        }
    
                        container migration {
                          presence
                            "Indicates a migration node is configured.";
                          description
                            "customer routing migration";
                          leaf route-policy {
                            type xr:Route-policy-name;
                            description
                              "Route policy to select customer routing";
                          }
                        }  // container migration
    
                        container unicast-reachability {
                          description
                            "Control addition of Extended Communities to Unicast VPN-IP routes";
                          container connector {
                            description
                              "Enable/Disable Connector";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable Connector Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable Connector Attribute";
                            }  // container enable
                          }  // container connector
    
                          container source-as {
                            description
                              "Enable/Disable Source AS";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable Source-AS Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable Source-AS Attribute";
                            }  // container enable
                          }  // container source-as
    
                          container vrf-route-import {
                            description
                              "Enable/Disable VRF Route Import";
                            container disable {
                              must
                                "not(../enable)";
                              presence
                                "Indicates a disable node is configured.";
                              description
                                "Disable VRF Route Import Attribute";
                            }  // container disable
    
                            container enable {
                              must
                                "not(../disable)";
                              presence
                                "Indicates a enable node is configured.";
                              description
                                "Enable VRF Route Import Attribute";
                            }  // container enable
                          }  // container vrf-route-import
                        }  // container unicast-reachability
                      }  // container c-multicast-routing
                    }  // container mdt
    
                    container allow-rp {
                      presence
                        "Indicates a allow-rp node is configured.";
                      description
                        "Sparse-Mode RP addresses to be allowed";
                      leaf rp-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list for allowed RP addresses";
                      }
    
                      leaf group-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list for allowed group ranges";
                      }
                    }  // container allow-rp
    
                    container sg-expiry-timer {
                      presence
                        "Indicates a sg-expiry-timer node is configured.";
                      description
                        "Configure SG expiry timer";
                      leaf sg-expiry-timer-value {
                        type uint32 {
                          range "40..57600";
                        }
                        mandatory true;
                        description
                          "Configure SG expiry timer";
                      }
    
                      leaf sg-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access-list of (S,G) routes for which expiry timer is applicable";
                      }
                    }  // container sg-expiry-timer
    
                    container ssm {
                      description
                        "Configure a group range for Source-Specific use";
                      leaf range {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        must "not(../disable)";
                        description
                          "Provide ACL that specifies non-standard SSM range";
                      }
    
                      container disable {
                        must "not(../range)";
                        presence
                          "Indicates a disable node is configured.";
                        description
                          "Disable use of all SSM group ranges";
                      }  // container disable
    
                      container allow-override {
                        presence
                          "Indicates a allow-override node is configured.";
                        description
                          "Allow SSM ranges to be overridden by more specific ranges";
                      }  // container allow-override
                    }  // container ssm
    
                    container multipath {
                      presence
                        "Indicates a multipath node is configured.";
                      description
                        "Enable equal-cost multipath routing";
                      container hash {
                        must
                          "interface-extended or source-nexthop or source-group";
                        presence
                          "Indicates a hash node is configured.";
                        description
                          "Enter a hashing algorithm";
                        container interface-extended {
                          must
                            "not(../source-nexthop) and not(../source-group)";
                          presence
                            "Indicates a interface-extended node is configured.";
                          description
                            "Enable interface extensions for non-unique next-hop addrs";
                        }  // container interface-extended
    
                        container source-nexthop {
                          must
                            "not(../interface-extended) and not(../source-group)";
                          presence
                            "Indicates a source-nexthop node is configured.";
                          description
                            "Enable source with next-hop multipath hashing (better distribution)";
                        }  // container source-nexthop
    
                        container source-group {
                          must
                            "not(../source-nexthop) and not(../interface-extended)";
                          presence
                            "Indicates a source-group node is configured.";
                          description
                            "Enable source, group based multipath hashing (Compatible with IOS versions)";
                        }  // container source-group
                      }  // container hash
                    }  // container multipath
    
                    container interfaces {
                      description
                        "PIM interface configuration subcommands";
                      list interface {
                        key "interface-name";
                        description
                          "Select an interface to configure";
                        leaf interface-name {
                          type xr:Interface-name;
                          description
                            "Select an interface to configure";
                        }
    
                        leaf dr-priority {
                          type uint32 {
                            range
                              "0..4294967295";
                          }
                          description
                            "PIM Hello DR priority";
                        }
    
                        leaf hello-interval {
                          type uint32 {
                            range "1..3600";
                          }
                          description
                            "PIM neighbor Hello announcement interval";
                        }
    
                        leaf join-prune-interval {
                          type uint32 {
                            range "10..600";
                          }
                          description
                            "PIM periodic Join-Prune announcement interval";
                        }
    
                        leaf join-prune-mtu {
                          type uint32 {
                            range "576..65535";
                          }
                          description
                            "MTU to use when sending PIM J/P packets";
                        }
    
                        leaf propagation-delay {
                          type uint32 {
                            range "100..32767";
                          }
                          description
                            "PIM Hello propagation delay";
                        }
    
                        leaf override-interval {
                          type uint32 {
                            range "400..65535";
                          }
                          description
                            "PIM Hello override interval";
                        }
    
                        container bsr-border {
                          presence
                            "Indicates a bsr-border node is configured.";
                          description
                            "Do not fwd BSR messages on this interface";
                        }  // container bsr-border
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable PIM processing on this interface";
                        }  // container enable
    
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable PIM processing on this interface";
                        }  // container disable
    
                        leaf neighbor-filter {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description
                            "PIM Neighbor filter on this interface";
                        }
    
                        container maximum {
                          description
                            "Per interface maximum state limits";
                          container route-interfaces {
                            presence
                              "Indicates a route-interfaces node is configured.";
                            description
                              "PIM downstream joined interfaces";
                            leaf maximum-route-interfaces {
                              type uint32 {
                                range
                                  "1..1100000";
                              }
                              mandatory true;
                              description
                                "PIM downstream joined interfaces";
                            }
    
                            leaf threshold {
                              type uint32 {
                                range
                                  "1..1100000";
                              }
                              must
                                ". <= ../maximum-route-interfaces";
                              description
                                "Threshold warning";
                            }
    
                            leaf access-list {
                              type xr:Cisco-ios-xr-string {
                                length "1..64";
                              }
                              description
                                "Name of ACL that specifies to which routes to apply the maximum limit";
                            }
                          }  // container route-interfaces
                        }  // container maximum
    
                        container bfd {
                          description
                            "Configure BFD parameters";
                          container fast-detect {
                            presence
                              "Indicates a fast-detect node is configured.";
                            description
                              "Enable Fast detection";
                          }  // container fast-detect
    
                          leaf minimum-interval {
                            type uint32 {
                              range "3..30000";
                            }
                            description
                              "Hello interval";
                          }
    
                          leaf multiplier {
                            type uint32 {
                              range "2..50";
                            }
                            description
                              "Detect multiplier";
                          }
                        }  // container bfd
    
                        container sticky-dr {
                          presence
                            "Indicates a sticky-dr node is configured.";
                          description
                            "Enable sticky DR on this interface";
                        }  // container sticky-dr
                      }  // list interface
                    }  // container interfaces
    
                    container bsr {
                      description
                        "BSR Configurations";
                      container candidate-bsr {
                        presence
                          "Indicates a candidate-bsr node is configured.";
                        description
                          "configure candidate BSR";
                        leaf address {
                          type inet:ipv6-address-no-zone;
                          mandatory true;
                          description
                            "IP address of configured BSR";
                        }
    
                        leaf hash-mask-len {
                          type uint32 {
                            range "0..128";
                          }
                          mandatory true;
                          description
                            "BSR Hash Mask Length";
                        }
    
                        leaf priority {
                          type uint32 {
                            range "1..255";
                          }
                          mandatory true;
                          description
                            "BSR Priority";
                        }
                      }  // container candidate-bsr
    
                      container candidate-rps {
                        description
                          "BSR Candidate RP Configurations";
                        list candidate-rp {
                          must
                            "(priority and interval) or (bidir/priority and bidir/interval)";
                          key "address";
                          description
                            "BSR Candidate RP Configurations";
                          leaf address {
                            type inet:ipv6-address-no-zone;
                            description
                              "BSR Candidate RP Configurations";
                          }
    
                          leaf group-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..64";
                            }
                            description
                              "Group List access-list";
                          }
    
                          leaf priority {
                            type uint32 {
                              range "1..255";
                            }
                            description
                              "C-RP Priority";
                          }
    
                          leaf interval {
                            type uint32 {
                              range "30..600";
                            }
                            description
                              "C-RP Advertisement interval";
                          }
    
                          container bidir {
                            description
                              "To specify group ranges as Bidir";
                            leaf group-list {
                              type xr:Cisco-ios-xr-string {
                                length "1..64";
                              }
                              description
                                "Group List access-list";
                            }
    
                            leaf priority {
                              type uint32 {
                                range "1..255";
                              }
                              description
                                "C-RP Priority";
                            }
    
                            leaf interval {
                              type uint32 {
                                range "30..600";
                              }
                              description
                                "C-RP Advertisement interval";
                            }
                          }  // container bidir
                        }  // list candidate-rp
                      }  // container candidate-rps
    
                      container relay {
                        description
                          "BSR RP relay config";
                        container vrfs {
                          description "vrf";
                          list vrf {
                            key "vrf-name";
                            description "vrf";
                            leaf vrf-name {
                              type xr:Cisco-ios-xr-string {
                                length "1..1024";
                              }
                              description "vrf";
                            }
    
                            container listen {
                              presence
                                "Indicates a listen node is configured.";
                              description
                                "Enable RP relay in listen mode";
                            }  // container listen
                          }  // list vrf
                        }  // container vrfs
                      }  // container relay
                    }  // container bsr
    
                    container sr-p2mp-policies {
                      description
                        "Segment-routing P2MP policy";
                      list sr-p2mp-policy {
                        key "policy-name";
                        description
                          "Segment-routing P2MP policy";
                        leaf policy-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description
                            "Segment-routing P2MP policy";
                        }
    
                        container static-group {
                          description
                            "ipv6 static multicast group";
                          list group-address {
                            key "group-address";
                            description
                              "ipv6 static multicast group";
                            leaf group-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "ipv6 static multicast group";
                            }
    
                            container group-address-only {
                              presence
                                "Indicates a group-address-only node is configured.";
                              description
                                "Group-address without increment mask/source-address";
                            }  // container group-address-only
    
                            container group-address-inc-masks {
                              description
                                "Group-address with increment mask for group address";
                              list inc-mask {
                                key "group-mask-address";
                                description
                                  "Increment mask for group address";
                                leaf group-mask-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-inc-masks
    
                            container group-address-source-address {
                              description
                                "Group-address with source-address";
                              list source-address {
                                key "source-address";
                                description
                                  "Source address to join";
                                leaf source-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Source address to join";
                                }
                              }  // list source-address
                            }  // container group-address-source-address
    
                            container group-address-inc-mask-source-address {
                              description
                                "Group-address with increment-mask and source-address";
                              list inc-mask {
                                key "group-mask-address source-address";
                                description
                                  "Increment mask for group address";
                                leaf group-mask-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf source-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-inc-mask-source-address
    
                            container group-address-source-address-inc-mask {
                              description
                                "Group-address and source-address with increment-mask";
                              list inc-mask {
                                key "source-address source-mask-address";
                                description
                                  "Increment mask for group address";
                                leaf source-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf source-mask-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Increment mask for source address";
                                }
    
                                leaf source-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of source addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-address-source-address-inc-mask
    
                            container group-inc-mask-source-inc-mask {
                              description
                                "Group-address with increment-mask and source-address with increment-mask";
                              list inc-mask {
                                key "group-mask-address source-address source-mask-address";
                                leaf group-mask-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Increment mask for group address";
                                }
    
                                leaf source-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Source address to join";
                                }
    
                                leaf source-mask-address {
                                  type inet:ipv6-address-no-zone;
                                  description
                                    "Increment mask for source address";
                                }
    
                                leaf group-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of group addresses to join";
                                }
    
                                leaf source-address-count {
                                  type uint32 {
                                    range
                                      "1..512";
                                  }
                                  mandatory
                                    true;
                                  description
                                    "No. of source addresses to join";
                                }
                              }  // list inc-mask
                            }  // container group-inc-mask-source-inc-mask
                          }  // list group-address
                        }  // container static-group
                      }  // list sr-p2mp-policy
                    }  // container sr-p2mp-policies
    
                    container embedded-rp {
                      description
                        "Set Embedded RP processing support";
                      list ip-addresses {
                        key "ip-address";
                        description
                          "IP name or address of Rendezvous Point";
                        leaf ip-address {
                          type inet:ipv6-address-no-zone;
                          description
                            "IP name or address of Rendezvous Point";
                        }
    
                        leaf access-list-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          mandatory true;
                          description
                            "Access list of groups that should map to given RP";
                        }
                      }  // list ip-addresses
    
                      container disable {
                        presence
                          "Indicates a disable node is configured.";
                        description
                          "Disable Embedded RP processing";
                      }  // container disable
                    }  // container embedded-rp
                  }  // container ipv6
                }  // container address-family
              }  // list vrf
            }  // container vrfs
    
            container address-family {
              description
                "Enter Address Family command mode";
              container ipv4 {
                description
                  "IPv4 Address Family";
                container rp-addresses {
                  description
                    "Configure Rendezvous Point";
                  list rp-address {
                    key "address";
                    description
                      "Configure Rendezvous Point";
                    leaf address {
                      type inet:ipv4-address-no-zone;
                      description
                        "Configure Rendezvous Point";
                    }
    
                    leaf access-list {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Access list of groups that should map to given RP";
                    }
    
                    container override {
                      presence
                        "Indicates a override node is configured.";
                      description
                        "Static RP config overrides auto-rp and BSR";
                    }  // container override
                  }  // list rp-address
    
                  container bidir {
                    description
                      "Specify keyword bidir to configure a bidir RP";
                    list rp-address {
                      key "address";
                      description
                        "Configure Rendezvous Point";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "Configure Rendezvous Point";
                      }
    
                      leaf access-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access list of groups that should map to given RP";
                      }
    
                      container override {
                        presence
                          "Indicates a override node is configured.";
                        description
                          "Static RP config overrides auto-rp and BSR";
                      }  // container override
                    }  // list rp-address
                  }  // container bidir
                }  // container rp-addresses
    
                leaf rp-static-deny {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description
                    "Configure static RP deny range";
                }
    
                leaf accept-register {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description
                    "Registers accept filter";
                }
    
                container suppress-data-registers {
                  presence
                    "Indicates a suppress-data-registers node is configured.";
                  description
                    "Suppress data registers after initial state setup";
                }  // container suppress-data-registers
    
                leaf register-source {
                  type xr:Interface-name;
                  description
                    "Source address to use for register messages";
                }
    
                container suppress-rpf-change-prunes {
                  presence
                    "Indicates a suppress-rpf-change-prunes node is configured.";
                  description
                    "Suppress prunes triggered as a result of RPF changes";
                }  // container suppress-rpf-change-prunes
    
                leaf neighbor-filter {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description "Neighbor filter";
                }
    
                container convergence {
                  description
                    "Convergence related parameters";
                  leaf rpf-conflict-join-delay {
                    type uint32 {
                      range "0..15";
                    }
                    description
                      "Delay in sending first join if RPF points to any downstream neighbor";
                  }
    
                  leaf link-down-prune-delay {
                    type uint32 {
                      range "0..60";
                    }
                    description
                      "Delay prunes if route join state transitions to not-joined on link down";
                  }
                }  // container convergence
    
                container spt-threshold {
                  description
                    "Configure threshold for switching to SPT on last-hop";
                  container infinity {
                    presence
                      "Indicates a infinity node is configured.";
                    description
                      "Always stay on shared-tree";
                    leaf group-list {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Only stay on the shared-tree for specified groups";
                    }
                  }  // container infinity
                }  // container spt-threshold
    
                container old-register-checksum {
                  presence
                    "Indicates a old-register-checksum node is configured.";
                  description
                    "Generate registers compatible with older IOS versions";
                }  // container old-register-checksum
    
                container nsf {
                  description
                    "Configure Non-stop forwarding (NSF) options";
                  leaf lifetime {
                    type uint32 {
                      range "10..600";
                    }
                    description
                      "Override default maximum lifetime for PIM NSF mode";
                  }
                }  // container nsf
    
                container neighbor-check-on-send {
                  description
                    "Check for PIM neighbor before sending control messages";
                  container enable {
                    presence
                      "Indicates a enable node is configured.";
                    description
                      "Enable this feature";
                  }  // container enable
                }  // container neighbor-check-on-send
    
                container neighbor-check-on-recv {
                  description
                    "Check for PIM neighbor before rcv'ing control messages";
                  container enable {
                    presence
                      "Indicates a enable node is configured.";
                    description
                      "Enable this feature";
                  }  // container enable
                }  // container neighbor-check-on-recv
    
                leaf hello-interval {
                  type uint32 {
                    range "1..3600";
                  }
                  description
                    "Inherited by all interfaces : Hello interval in seconds";
                }
    
                leaf mdt-hello-interval {
                  type uint32 {
                    range "1..3600";
                  }
                  description
                    "Hello interval for all MDT interfaces (seconds)";
                }
    
                leaf dr-priority {
                  type uint32 {
                    range "0..4294967295";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello DR priority";
                }
    
                leaf join-prune-interval {
                  type uint32 {
                    range "10..600";
                  }
                  description
                    "Inherited by all interfaces : Join-Prune interval";
                }
    
                leaf join-prune-mtu {
                  type uint32 {
                    range "576..65535";
                  }
                  description
                    "Inherited by all interfaces : Join-Prune MTU";
                }
    
                leaf propagation-delay {
                  type uint32 {
                    range "100..32767";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello Propagation delay";
                }
    
                leaf override-interval {
                  type uint32 {
                    range "400..65535";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello override interval";
                }
    
                container global {
                  description
                    "Global maximum limits";
                  container maximum {
                    description
                      "Maximum state limits";
                    container routes {
                      presence
                        "Indicates a routes node is configured.";
                      description
                        "PIM routes for all VRFs";
                      leaf maximum-routes {
                        type uint32 {
                          range "1..200000";
                        }
                        mandatory true;
                        description
                          "PIM routes for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..200000";
                        }
                        must
                          ". <= ../maximum-routes";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container routes
    
                    container route-interfaces {
                      presence
                        "Indicates a route-interfaces node is configured.";
                      description
                        "PIM total interfaces on routes for all VRFs";
                      leaf maximum-route-interfaces {
                        type uint32 {
                          range "1..1100000";
                        }
                        mandatory true;
                        description
                          "PIM total interfaces on routes for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..1100000";
                        }
                        must
                          ". <= ../maximum-route-interfaces";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container route-interfaces
    
                    container register-states {
                      presence
                        "Indicates a register-states node is configured.";
                      description
                        "PIM source register states for all VRFs";
                      leaf maximum-register-states {
                        type uint32 {
                          range "0..75000";
                        }
                        mandatory true;
                        description
                          "PIM source register states for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "0..75000";
                        }
                        must
                          ". <= ../maximum-register-states";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container register-states
    
                    container packet-queue {
                      description
                        "PIM Packet queue size in bytes";
                      leaf high-priority {
                        type uint32 {
                          range "0..2147483648";
                        }
                        description
                          "PIM high priority packet queue size in bytes";
                      }
    
                      leaf low-priority {
                        type uint32 {
                          range "0..2147483648";
                        }
                        description
                          "PIM low priority packet queue size in bytes";
                      }
                    }  // container packet-queue
    
                    container group-mappings {
                      description
                        "PIM group-to-RP mapping ranges";
                      container bsr {
                        presence
                          "Indicates a bsr node is configured.";
                        description
                          "Learned through the BSR distribution mechanism";
                        leaf maximum-bsr {
                          type uint32 {
                            range "1..10000";
                          }
                          mandatory true;
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..10000";
                          }
                          must
                            ". <= ../maximum-bsr";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container bsr
    
                      container autorp {
                        presence
                          "Indicates a autorp node is configured.";
                        description
                          "Learned through the Auto-RP distribution mechanism";
                        leaf maximum-autorp {
                          type uint32 {
                            range "1..10000";
                          }
                          mandatory true;
                          description
                            "Learned through the Auto-RP distribution mechanism";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..10000";
                          }
                          must
                            ". <= ../maximum-autorp";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container autorp
                    }  // container group-mappings
    
                    container bsr {
                      description
                        "BSR maximum C-RP cache setting";
                      container crp-cache {
                        presence
                          "Indicates a crp-cache node is configured.";
                        description
                          "Set maximum number of C-RP cache in BSR";
                        leaf maximum-crp-cache {
                          type uint32 {
                            range "1..10000";
                          }
                          mandatory true;
                          description
                            "Set maximum number of C-RP cache in BSR";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..10000";
                          }
                          must
                            ". <= ../maximum-crp-cache";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container crp-cache
                    }  // container bsr
                  }  // container maximum
                }  // container global
    
                container maximum {
                  description
                    "Maximum state limits";
                  container routes {
                    presence
                      "Indicates a routes node is configured.";
                    description "PIM routes";
                    leaf maximum-routes {
                      type uint32 {
                        range "1..200000";
                      }
                      mandatory true;
                      description "PIM routes";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "1..200000";
                      }
                      must
                        ". <= ../maximum-routes";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container routes
    
                  container route-interfaces {
                    presence
                      "Indicates a route-interfaces node is configured.";
                    description
                      "PIM total number of interfaces on all routes";
                    leaf maximum-route-interfaces {
                      type uint32 {
                        range "1..1100000";
                      }
                      mandatory true;
                      description
                        "PIM total number of interfaces on all routes";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "1..1100000";
                      }
                      must
                        ". <= ../maximum-route-interfaces";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container route-interfaces
    
                  container register-states {
                    presence
                      "Indicates a register-states node is configured.";
                    description
                      "PIM source register states";
                    leaf maximum-register-states {
                      type uint32 {
                        range "0..75000";
                      }
                      mandatory true;
                      description
                        "PIM source register states";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "0..75000";
                      }
                      must
                        ". <= ../maximum-register-states";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container register-states
    
                  container group-mappings {
                    description
                      "PIM group-to-RP mapping ranges";
                    container bsr {
                      presence
                        "Indicates a group-mappings node is configured.";
                      description
                        "Learned through the BSR distribution mechanism";
                      leaf maximum-bsr {
                        type uint32 {
                          range "1..10000";
                        }
                        mandatory true;
                        description
                          "Learned through the BSR distribution mechanism";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..10000";
                        }
                        must
                          ". <= ../maximum-bsr";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container bsr
    
                    container autorp {
                      presence
                        "Indicates a autorp node is configured.";
                      description
                        "Learned through the Auto-RP distribution mechanism";
                      leaf maximum-autorp {
                        type uint32 {
                          range "1..10000";
                        }
                        mandatory true;
                        description
                          "Learned through the Auto-RP distribution mechanism";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..10000";
                        }
                        must
                          ". <= ../maximum-autorp";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container autorp
                  }  // container group-mappings
    
                  container bsr {
                    description
                      "BSR maximum C-RP cache setting";
                    container crp-cache {
                      presence
                        "Indicates a crp-cache node is configured.";
                      description
                        "Set maximum number of C-RP cache in BSR";
                      leaf maximum-crp-cache {
                        type uint32 {
                          range "1..10000";
                        }
                        mandatory true;
                        description
                          "Set maximum number of C-RP cache in BSR";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..10000";
                        }
                        must
                          ". <= ../maximum-crp-cache";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container crp-cache
                  }  // container bsr
                }  // container maximum
    
                leaf convergence-timeout {
                  type uint32 {
                    range "1800..2400";
                  }
                  description
                    "Timeout value for the RIB convergence notification";
                }
    
                container log {
                  description
                    "Enable PIM logging";
                  container neighbor {
                    description
                      "Enable PIM neighbor logging";
                    container changes {
                      presence
                        "Indicates a changes node is configured.";
                      description
                        "Enable PIM neighbor state logging";
                    }  // container changes
                  }  // container neighbor
                }  // container log
    
                container rpf-vector {
                  presence
                    "Indicates a rpf-vector node is configured.";
                  description
                    "Enable PIM RPF Vector";
                  container allow-ebgp {
                    presence
                      "Indicates a allow-ebgp node is configured.";
                    description
                      "Allow origination of RPF vector over an eBGP session";
                  }  // container allow-ebgp
    
                  container disable-ibgp {
                    presence
                      "Indicates a disable-ibgp node is configured.";
                    description
                      "Disable origination of RPF vector over an iBGP session";
                  }  // container disable-ibgp
    
                  container use-standard-encoding {
                    presence
                      "Indicates a use-standard-encoding node is configured.";
                    description
                      "Use RFC standard encode type";
                  }  // container use-standard-encoding
                }  // container rpf-vector
    
                container rpf-vector-injects {
                  description
                    "inject RPF vector";
                  list inject {
                    must "rpf-vector";
                    key "source-address masklen";
                    description
                      "inject RPF vector";
                    leaf source-address {
                      type inet:ipv4-address-no-zone;
                      description
                        "inject RPF vector";
                    }
    
                    leaf masklen {
                      type uint32 {
                        range "0..32";
                      }
                      description "masklen";
                    }
    
                    leaf-list rpf-vector {
                      type inet:ipv4-address-no-zone;
                      max-elements 22;
                      description
                        "configure this node";
                    }
                  }  // list inject
                }  // container rpf-vector-injects
    
                container explicit-rpf-vector {
                  description
                    "Enable Explicit PIM RPF Vector";
                  container injects {
                    description
                      "inject Explicit RPF vector";
                    list inject {
                      must "rpf-vector";
                      key "source-address masklen";
                      description
                        "inject Explicit RPF vector";
                      leaf source-address {
                        type inet:ipv4-address-no-zone;
                        description
                          "inject Explicit RPF vector";
                      }
    
                      leaf masklen {
                        type uint32 {
                          range "0..32";
                        }
                        description "masklen";
                      }
    
                      leaf-list rpf-vector {
                        type inet:ipv4-address-no-zone;
                        max-elements 22;
                        description
                          "configure this node";
                      }
                    }  // list inject
                  }  // container injects
                }  // container explicit-rpf-vector
    
                container rpf {
                  description "RPF commands";
                  container topology {
                    description
                      "Select RPF topology";
                    leaf route-policy {
                      type xr:Route-policy-name;
                      description
                        "Route policy to select RPF topology";
                    }
                  }  // container topology
                }  // container rpf
    
                container mdt {
                  description
                    "Multicast Distribution Tree commands";
                  leaf neighbor-filter {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Neighbor filter";
                  }
    
                  container data {
                    description
                      "Data MDT Options";
                    leaf switchover-interval {
                      type uint32 {
                        range "3..60";
                      }
                      description
                        "Data MDT switchover interval";
                    }
    
                    leaf announce-interval {
                      type uint32 {
                        range "3..120";
                      }
                      description
                        "Periodic Data MDT Join TLV interval";
                    }
    
                    leaf max-aggregation {
                      type uint32 {
                        range "1..16777215";
                      }
                      description
                        "Data MDT max-aggregation";
                    }
                  }  // container data
    
                  container c-multicast-routing {
                    presence
                      "Indicates a c-multicast-routing node is configured.";
                    description
                      "MVPN customer routing commands";
                    leaf type {
                      type enumeration {
                        enum "pim" {
                          value 1;
                          description
                            "PIM customer multicast routing";
                        }
                        enum "bgp" {
                          value 2;
                          description
                            "BGP customer multicast routing";
                        }
                      }
                      mandatory true;
                      description
                        "MVPN customer routing commands";
                    }
    
                    container announce-pim-join-tlv {
                      presence
                        "Indicates a announce-pim-join-tlv node is configured.";
                      description
                        "Announce PIM MDT Join TLVs";
                    }  // container announce-pim-join-tlv
    
                    container suppress-shared-tree-join {
                      presence
                        "Indicates a suppress-shared-tree-join node is configured.";
                      description
                        "Suppress shared tree joins";
                    }  // container suppress-shared-tree-join
    
                    container suppress-pim-data-signaling {
                      presence
                        "Indicates a suppress-pim-data-signaling node is configured.";
                      description
                        "Suppress PIM data signaling";
                    }  // container suppress-pim-data-signaling
    
                    container mdt-hello {
                      when "../type != 'pim'";
                      description
                        "PIM Hellos over MDT";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable PIM Hellos over MDT";
                      }  // container enable
                    }  // container mdt-hello
    
                    leaf shared-tree-prune-delay {
                      type uint32 {
                        range "0..1800";
                      }
                      description
                        "Delay before pruning I-S PMSI from S,G when SA received";
                    }
    
                    leaf source-tree-prune-delay {
                      type uint32 {
                        range "0..300";
                      }
                      description
                        "Delay before removing PMSI from olist after BGP withdrawal";
                    }
    
                    container migration {
                      presence
                        "Indicates a migration node is configured.";
                      description
                        "customer routing migration";
                      leaf route-policy {
                        type xr:Route-policy-name;
                        description
                          "Route policy to select customer routing";
                      }
                    }  // container migration
    
                    container unicast-reachability {
                      description
                        "Control addition of Extended Communities to Unicast VPN-IP routes";
                      container connector {
                        description
                          "Enable/Disable Connector";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable Connector Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable Connector Attribute";
                        }  // container enable
                      }  // container connector
    
                      container source-as {
                        description
                          "Enable/Disable Source AS";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable Source-AS Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable Source-AS Attribute";
                        }  // container enable
                      }  // container source-as
    
                      container vrf-route-import {
                        description
                          "Enable/Disable VRF Route Import";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable VRF Route Import Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable VRF Route Import Attribute";
                        }  // container enable
                      }  // container vrf-route-import
                    }  // container unicast-reachability
                  }  // container c-multicast-routing
                }  // container mdt
    
                container allow-rp {
                  presence
                    "Indicates a allow-rp node is configured.";
                  description
                    "Sparse-Mode RP addresses to be allowed";
                  leaf rp-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list for allowed RP addresses";
                  }
    
                  leaf group-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list for allowed group ranges";
                  }
                }  // container allow-rp
    
                container sg-expiry-timer {
                  presence
                    "Indicates a sg-expiry-timer node is configured.";
                  description
                    "Configure SG expiry timer";
                  leaf sg-expiry-timer-value {
                    type uint32 {
                      range "40..57600";
                    }
                    mandatory true;
                    description
                      "Configure SG expiry timer";
                  }
    
                  leaf sg-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list of (S,G) routes for which expiry timer is applicable";
                  }
                }  // container sg-expiry-timer
    
                container ssm {
                  description
                    "Configure a group range for Source-Specific use";
                  leaf range {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    must "not(../disable)";
                    description
                      "Provide ACL that specifies non-standard SSM range";
                  }
    
                  container disable {
                    must "not(../range)";
                    presence
                      "Indicates a disable node is configured.";
                    description
                      "Disable use of all SSM group ranges";
                  }  // container disable
    
                  container allow-override {
                    presence
                      "Indicates a allow-override node is configured.";
                    description
                      "Allow SSM ranges to be overridden by more specific ranges";
                  }  // container allow-override
                }  // container ssm
    
                container rpf-redirect {
                  description
                    "Route policy for rpf-redirect bundles";
                  leaf route-policy {
                    type xr:Route-policy-name;
                    description
                      "Bandwidth assigment (kbps) for SG routes";
                  }
                }  // container rpf-redirect
    
                container multipath {
                  presence
                    "Indicates a multipath node is configured.";
                  description
                    "Enable equal-cost multipath routing";
                  container hash {
                    must
                      "source or source-nexthop or source-group";
                    presence
                      "Indicates a hash node is configured.";
                    description
                      "Enter a hashing algorithm";
                    container source {
                      must
                        "not(../source-nexthop) and not(../source-group)";
                      presence
                        "Indicates a source node is configured.";
                      description
                        "Enable source based multipath hashing (Compatible with IOS versions)";
                    }  // container source
    
                    container source-nexthop {
                      must
                        "not(../source) and not(../source-group)";
                      presence
                        "Indicates a source-nexthop node is configured.";
                      description
                        "Enable source with next-hop multipath hashing (better distribution)";
                    }  // container source-nexthop
    
                    container source-group {
                      must
                        "not(../source-nexthop) and not(../source)";
                      presence
                        "Indicates a source-group node is configured.";
                      description
                        "Enable source, group based multipath hashing (Compatible with IOS versions)";
                    }  // container source-group
                  }  // container hash
                }  // container multipath
    
                container auto-rp {
                  description "Auto-RP Commands";
                  container candidate-rps {
                    description
                      "Configure as a Candidate RP";
                    list candidate-rp {
                      must
                        "scope or bidir/scope";
                      key "interface-name";
                      description
                        "Candidate RP Configurations";
                      leaf interface-name {
                        type xr:Interface-name;
                        description
                          "Candidate RP Configurations";
                      }
    
                      leaf scope {
                        type uint32 {
                          range "1..255";
                        }
                        must
                          "../group-list and ../interval";
                        description
                          "TTL for the announcement";
                      }
    
                      leaf group-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..64";
                        }
                        description
                          "Be a candidate RP for groups specified by the acl";
                      }
    
                      leaf interval {
                        type uint32 {
                          range "1..600";
                        }
                        description
                          "time between announcements <in seconds>";
                      }
    
                      container bidir {
                        description
                          "to specify group ranges as bidir, default is pim-sm";
                        leaf scope {
                          type uint32 {
                            range "1..255";
                          }
                          must
                            "../group-list and ../interval";
                          description
                            "TTL for the announcement";
                        }
    
                        leaf group-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..64";
                          }
                          description
                            "Be a candidate RP for groups specified by the acl";
                        }
    
                        leaf interval {
                          type uint32 {
                            range "1..600";
                          }
                          description
                            "time between announcements <in seconds>";
                        }
                      }  // container bidir
                    }  // list candidate-rp
                  }  // container candidate-rps
    
                  container mapping-agent {
                    presence
                      "Indicates a mapping-agent node is configured.";
                    description
                      "Configure as a Mapping Agent";
                    leaf interface-name {
                      type xr:Interface-name;
                      mandatory true;
                      description
                        "Candidate RP Configurations";
                    }
    
                    leaf scope {
                      type uint32 {
                        range "1..255";
                      }
                      mandatory true;
                      description
                        "TTL for the announcement";
                    }
    
                    leaf interval {
                      type uint32 {
                        range "1..600";
                      }
                      mandatory true;
                      description
                        "number of seconds between discovery messages";
                    }
                  }  // container mapping-agent
    
                  container listen {
                    description
                      "RP discovery through AUTORP protocol";
                    container disable {
                      presence
                        "Indicates a disable node is configured.";
                      description
                        "Disable RP discovery through the AUTORP protocol";
                    }  // container disable
                  }  // container listen
    
                  container relay {
                    description "relay";
                    container vrfs {
                      description "vrf";
                      list vrf {
                        key "vrf-name";
                        description "vrf";
                        leaf vrf-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          description "vrf";
                        }
    
                        container listen {
                          presence
                            "Indicates a listen node is configured.";
                          description
                            "Enable RP relay in listen mode";
                        }  // container listen
                      }  // list vrf
                    }  // container vrfs
                  }  // container relay
                }  // container auto-rp
    
                container interface {
                  description
                    "PIM interface configuration subcommands";
                  container interfaces {
                    description
                      "Select an interface to configure";
                    list interface {
                      key "interface-name";
                      description
                        "Select an interface to configure";
                      leaf interface-name {
                        type xr:Interface-name;
                        description
                          "Select an interface to configure";
                      }
    
                      leaf dr-priority {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "PIM Hello DR priority";
                      }
    
                      leaf hello-interval {
                        type uint32 {
                          range "1..3600";
                        }
                        description
                          "PIM neighbor Hello announcement interval";
                      }
    
                      leaf join-prune-interval {
                        type uint32 {
                          range "10..600";
                        }
                        description
                          "PIM periodic Join-Prune announcement interval";
                      }
    
                      leaf join-prune-mtu {
                        type uint32 {
                          range "576..65535";
                        }
                        description
                          "MTU to use when sending PIM J/P packets";
                      }
    
                      leaf propagation-delay {
                        type uint32 {
                          range "100..32767";
                        }
                        description
                          "PIM Hello propagation delay";
                      }
    
                      leaf override-interval {
                        type uint32 {
                          range "400..65535";
                        }
                        description
                          "PIM Hello override interval";
                      }
    
                      container bsr-border {
                        presence
                          "Indicates a bsr-border node is configured.";
                        description
                          "Do not fwd BSR messages on this interface";
                      }  // container bsr-border
    
                      container enable {
                        must "not(../disable)";
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable PIM processing on this interface";
                      }  // container enable
    
                      container disable {
                        must "not(../enable)";
                        presence
                          "Indicates a disable node is configured.";
                        description
                          "Disable PIM processing on this interface";
                      }  // container disable
    
                      leaf neighbor-filter {
                        type xr:Cisco-ios-xr-string {
                          length "1..1024";
                        }
                        description
                          "PIM Neighbor filter on this interface";
                      }
    
                      container maximum {
                        description
                          "Per interface maximum state limits";
                        container route-interfaces {
                          presence
                            "Indicates a route-interfaces node is configured.";
                          description
                            "PIM downstream joined interfaces";
                          leaf maximum-route-interfaces {
                            type uint32 {
                              range "1..1100000";
                            }
                            mandatory true;
                            description
                              "PIM downstream joined interfaces";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..1100000";
                            }
                            must
                              ". <= ../maximum-route-interfaces";
                            description
                              "Threshold warning";
                          }
    
                          leaf access-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..64";
                            }
                            description
                              "Name of ACL that specifies to which routes to apply the maximum limit";
                          }
                        }  // container route-interfaces
                      }  // container maximum
    
                      container bfd {
                        description
                          "Configure BFD parameters";
                        container fast-detect {
                          presence
                            "Indicates a fast-detect node is configured.";
                          description
                            "Enable Fast detection";
                        }  // container fast-detect
    
                        leaf minimum-interval {
                          type uint32 {
                            range "3..30000";
                          }
                          description
                            "Hello interval";
                        }
    
                        leaf multiplier {
                          type uint32 {
                            range "2..50";
                          }
                          description
                            "Detect multiplier";
                        }
                      }  // container bfd
    
                      container rpf-redirect {
                        presence
                          "Indicates a rpf-redirect node is configured.";
                        description
                          "RPF redirect bundle configuration";
                        leaf bundle {
                          type xr:Cisco-ios-xr-string {
                            length "1..32";
                          }
                          mandatory true;
                          description
                            "Bundle name";
                        }
    
                        leaf bandwidth {
                          type uint32 {
                            range "0..100000000";
                          }
                          description
                            "Interface bandwidth in Kbps";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "0..100000000";
                          }
                          must "../bandwidth";
                          description
                            "Bandwidth threshold in Kbps";
                        }
                      }  // container rpf-redirect
    
                      container sticky-dr {
                        presence
                          "Indicates a sticky-dr node is configured.";
                        description
                          "Enable sticky DR on this interface";
                      }  // container sticky-dr
                    }  // list interface
                  }  // container interfaces
                }  // container interface
    
                container bsr {
                  description
                    "BSR Configurations";
                  container candidate-bsr {
                    presence
                      "Indicates a candidate-bsr node is configured.";
                    description
                      "configure candidate BSR";
                    leaf address {
                      type inet:ipv4-address-no-zone;
                      mandatory true;
                      description
                        "IP address of configured BSR";
                    }
    
                    leaf hash-mask-len {
                      type uint32 {
                        range "0..32";
                      }
                      mandatory true;
                      description
                        "BSR Hash Mask Length";
                    }
    
                    leaf priority {
                      type uint32 {
                        range "1..255";
                      }
                      mandatory true;
                      description "BSR Priority";
                    }
                  }  // container candidate-bsr
    
                  container candidate-rps {
                    description
                      "BSR Candidate RP Configurations";
                    list candidate-rp {
                      must
                        "(priority and interval) or (bidir/priority and bidir/interval)";
                      key "address";
                      description
                        "BSR Candidate RP Configurations";
                      leaf address {
                        type inet:ipv4-address-no-zone;
                        description
                          "BSR Candidate RP Configurations";
                      }
    
                      leaf group-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..64";
                        }
                        description
                          "Group List access-list";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "1..255";
                        }
                        description
                          "C-RP Priority";
                      }
    
                      leaf interval {
                        type uint32 {
                          range "30..600";
                        }
                        description
                          "C-RP Advertisement interval";
                      }
    
                      container bidir {
                        description
                          "To specify group ranges as Bidir";
                        leaf group-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..64";
                          }
                          description
                            "Group List access-list";
                        }
    
                        leaf priority {
                          type uint32 {
                            range "1..255";
                          }
                          description
                            "C-RP Priority";
                        }
    
                        leaf interval {
                          type uint32 {
                            range "30..600";
                          }
                          description
                            "C-RP Advertisement interval";
                        }
                      }  // container bidir
                    }  // list candidate-rp
                  }  // container candidate-rps
    
                  container relay {
                    description
                      "BSR RP relay config";
                    container vrfs {
                      description "vrf";
                      list vrf {
                        key "vrf-name";
                        description "vrf";
                        leaf vrf-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description "vrf";
                        }
    
                        container listen {
                          presence
                            "Indicates a listen node is configured.";
                          description
                            "Enable RP relay in listen mode";
                        }  // container listen
                      }  // list vrf
                    }  // container vrfs
                  }  // container relay
                }  // container bsr
    
                container mofrr {
                  presence
                    "Indicates a mofrr node is configured.";
                  description "PIM Mofrr";
                  leaf flow {
                    type string {
                      length "1..1024";
                    }
                    description
                      "Multicast Only FRR";
                  }
    
                  leaf rib {
                    type string {
                      length "1..1024";
                    }
                    description
                      "Use the rib keyword to restrict switchover triggers to RIB events";
                  }
    
                  container non-revertive {
                    presence
                      "Indicates a non-revertive node is configured.";
                    description
                      "Non-revertive MoFRR";
                  }  // container non-revertive
    
                  container clone {
                    description
                      "Use the clone keyword to clone";
                    container joins {
                      description
                        "Use the join keyword to clone S,G as S1,G joins and S2,G joins";
                      list join {
                        must "to";
                        key "address";
                        description
                          "Use the join keyword to clone S,G as S1,G joins as S2,G joins";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description "Source S";
                        }
    
                        list to {
                          must "and";
                          key "address";
                          description "to";
                          leaf address {
                            type inet:ipv4-address-no-zone;
                            description
                              "Source S1";
                          }
    
                          list and {
                            must "masklen";
                            key "address";
                            description "and";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source S2";
                            }
    
                            list masklen {
                              key "mask-length";
                              description
                                "masklen";
                              leaf mask-length {
                                type uint32 {
                                  range "0..32";
                                }
                                description
                                  "masklen";
                              }
                            }  // list masklen
                          }  // list and
                        }  // list to
                      }  // list join
                    }  // container joins
    
                    container sources {
                      description
                        "Use the source keyword to clone S,G as S1,G traffic and S2,G traffic";
                      list source {
                        must "to";
                        key "address";
                        description
                          "Use the source keyword to clone S,G as S1,G traffic and S2,G traffic";
                        leaf address {
                          type inet:ipv4-address-no-zone;
                          description "Source S";
                        }
    
                        list to {
                          must "and";
                          key "address";
                          description "to";
                          leaf address {
                            type inet:ipv4-address-no-zone;
                            description
                              "Source S1";
                          }
    
                          list and {
                            must "masklen";
                            key "address";
                            description "and";
                            leaf address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source S2";
                            }
    
                            list masklen {
                              key "mask-length";
                              description
                                "masklen";
                              leaf mask-length {
                                type uint32 {
                                  range "0..32";
                                }
                                description
                                  "masklen";
                              }
                            }  // list masklen
                          }  // list and
                        }  // list to
                      }  // list source
                    }  // container sources
                  }  // container clone
                }  // container mofrr
    
                container sr-p2mp-policies {
                  description
                    "Segment-routing P2MP policy";
                  list sr-p2mp-policy {
                    key "sr-p2mp-policy-id";
                    description
                      "Segment-routing P2MP policy";
                    leaf sr-p2mp-policy-id {
                      type xr:Cisco-ios-xr-string {
                        length "1..1024";
                      }
                      description
                        "Segment-routing P2MP policy";
                    }
    
                    container static-group {
                      description
                        "ipv4 static multicast group";
                      list group-address {
                        key "group-address";
                        description
                          "ipv4 static multicast group";
                        leaf group-address {
                          type inet:ipv4-address-no-zone;
                          description
                            "ipv4 static multicast group";
                        }
    
                        container group-address-only {
                          presence
                            "Indicates a group-address-only node is configured.";
                          description
                            "Group-address without increment mask/source-address";
                        }  // container group-address-only
    
                        container group-address-inc-masks {
                          description
                            "Group-address with increment mask for group address";
                          list inc-mask {
                            key "group-mask-address";
                            description
                              "Increment mask for group address";
                            leaf group-mask-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-inc-masks
    
                        container group-address-source-address {
                          description
                            "Group-address with source-address";
                          list source-address {
                            key "source-address";
                            description
                              "Source address to join";
                            leaf source-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source address to join";
                            }
                          }  // list source-address
                        }  // container group-address-source-address
    
                        container group-address-inc-mask-source-address {
                          description
                            "Group-address with increment-mask and source-address";
                          list inc-mask {
                            key "group-mask-address source-address";
                            description
                              "Increment mask for group address";
                            leaf group-mask-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf source-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-inc-mask-source-address
    
                        container group-address-source-address-inc-mask {
                          description
                            "Group-address and source-address with increment-mask";
                          list inc-mask {
                            key "source-address source-mask-address";
                            description
                              "Increment mask for group address";
                            leaf source-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf source-mask-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Increment mask for source address";
                            }
    
                            leaf source-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of source addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-source-address-inc-mask
    
                        container group-inc-mask-source-inc-mask {
                          description
                            "Group-address with increment-mask and source-address with increment-mask";
                          list inc-mask {
                            key "group-mask-address source-address source-mask-address";
                            leaf group-mask-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf source-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf source-mask-address {
                              type inet:ipv4-address-no-zone;
                              description
                                "Increment mask for source address";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
    
                            leaf source-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of source addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-inc-mask-source-inc-mask
                      }  // list group-address
                    }  // container static-group
                  }  // list sr-p2mp-policy
                }  // container sr-p2mp-policies
              }  // container ipv4
    
              container ipv6 {
                description
                  "IPv6 Address Family";
                container rp-addresses {
                  description
                    "Configure Rendezvous Point";
                  list rp-address {
                    key "address";
                    description
                      "Configure Rendezvous Point";
                    leaf address {
                      type inet:ipv6-address-no-zone;
                      description
                        "Configure Rendezvous Point";
                    }
    
                    leaf access-list {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Access list of groups that should map to given RP";
                    }
    
                    container override {
                      presence
                        "Indicates a override node is configured.";
                      description
                        "Static RP config overrides auto-rp and BSR";
                    }  // container override
                  }  // list rp-address
    
                  container bidir {
                    description
                      "Specify keyword bidir to configure a bidir RP";
                    list rp-address {
                      key "address";
                      description
                        "Configure Rendezvous Point";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "Configure Rendezvous Point";
                      }
    
                      leaf access-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..32";
                        }
                        description
                          "Access list of groups that should map to given RP";
                      }
    
                      container override {
                        presence
                          "Indicates a override node is configured.";
                        description
                          "Static RP config overrides auto-rp and BSR";
                      }  // container override
                    }  // list rp-address
                  }  // container bidir
                }  // container rp-addresses
    
                leaf rp-static-deny {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description
                    "Configure static RP deny range";
                }
    
                leaf accept-register {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description
                    "Registers accept filter";
                }
    
                container suppress-data-registers {
                  presence
                    "Indicates a suppress-data-registers node is configured.";
                  description
                    "Suppress data registers after initial state setup";
                }  // container suppress-data-registers
    
                leaf register-source {
                  type xr:Interface-name;
                  description
                    "Source address to use for register messages";
                }
    
                container suppress-rpf-change-prunes {
                  presence
                    "Indicates a suppress-rpf-change-prunes node is configured.";
                  description
                    "Suppress prunes triggered as a result of RPF changes";
                }  // container suppress-rpf-change-prunes
    
                leaf neighbor-filter {
                  type xr:Cisco-ios-xr-string {
                    length "1..32";
                  }
                  description "Neighbor filter";
                }
    
                container convergence {
                  description
                    "Convergence related parameters";
                  leaf rpf-conflict-join-delay {
                    type uint32 {
                      range "0..15";
                    }
                    description
                      "Delay in sending first join if RPF points to any downstream neighbor";
                  }
    
                  leaf link-down-prune-delay {
                    type uint32 {
                      range "0..60";
                    }
                    description
                      "Delay prunes if route join state transitions to not-joined on link down";
                  }
                }  // container convergence
    
                container spt-threshold {
                  description
                    "Configure threshold for switching to SPT on last-hop";
                  container infinity {
                    presence
                      "Indicates a infinity node is configured.";
                    description
                      "Always stay on shared-tree";
                    leaf group-list {
                      type xr:Cisco-ios-xr-string {
                        length "1..32";
                      }
                      description
                        "Only stay on the shared-tree for specified groups";
                    }
                  }  // container infinity
                }  // container spt-threshold
    
                container old-register-checksum {
                  presence
                    "Indicates a old-register-checksum node is configured.";
                  description
                    "Generate registers compatible with older IOS versions";
                }  // container old-register-checksum
    
                container nsf {
                  description
                    "Configure Non-stop forwarding (NSF) options";
                  leaf lifetime {
                    type uint32 {
                      range "10..600";
                    }
                    description
                      "Override default maximum lifetime for PIM NSF mode";
                  }
                }  // container nsf
    
                container neighbor-check-on-send {
                  description
                    "Check for PIM neighbor before sending control messages";
                  container enable {
                    presence
                      "Indicates a enable node is configured.";
                    description
                      "Enable this feature";
                  }  // container enable
                }  // container neighbor-check-on-send
    
                container neighbor-check-on-recv {
                  description
                    "Check for PIM neighbor before rcv'ing control messages";
                  container enable {
                    presence
                      "Indicates a enable node is configured.";
                    description
                      "Enable this feature";
                  }  // container enable
                }  // container neighbor-check-on-recv
    
                leaf hello-interval {
                  type uint32 {
                    range "1..3600";
                  }
                  description
                    "Inherited by all interfaces : Hello interval in seconds";
                }
    
                leaf mdt-hello-interval {
                  type uint32 {
                    range "1..3600";
                  }
                  description
                    "Hello interval for all MDT interfaces (seconds)";
                }
    
                leaf dr-priority {
                  type uint32 {
                    range "0..4294967295";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello DR priority";
                }
    
                leaf join-prune-interval {
                  type uint32 {
                    range "10..600";
                  }
                  description
                    "Inherited by all interfaces : Join-Prune interval";
                }
    
                leaf join-prune-mtu {
                  type uint32 {
                    range "576..65535";
                  }
                  description
                    "Inherited by all interfaces : Join-Prune MTU";
                }
    
                leaf propagation-delay {
                  type uint32 {
                    range "100..32767";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello Propagation delay";
                }
    
                leaf override-interval {
                  type uint32 {
                    range "400..65535";
                  }
                  description
                    "Inherited by all interfaces : PIM Hello override interval";
                }
    
                container global {
                  description
                    "Global maximum limits";
                  container maximum {
                    description
                      "Maximum state limits";
                    container routes {
                      presence
                        "Indicates a routes node is configured.";
                      description
                        "PIM routes for all VRFs";
                      leaf maximum-routes {
                        type uint32 {
                          range "1..200000";
                        }
                        mandatory true;
                        description
                          "PIM routes for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..200000";
                        }
                        must
                          ". <= ../maximum-routes";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container routes
    
                    container route-interfaces {
                      presence
                        "Indicates a route-interfaces node is configured.";
                      description
                        "PIM total interfaces on routes for all VRFs";
                      leaf maximum-route-interfaces {
                        type uint32 {
                          range "1..1100000";
                        }
                        mandatory true;
                        description
                          "PIM total interfaces on routes for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..1100000";
                        }
                        must
                          ". <= ../maximum-route-interfaces";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container route-interfaces
    
                    container register-states {
                      presence
                        "Indicates a register-states node is configured.";
                      description
                        "PIM source register states for all VRFs";
                      leaf maximum-register-states {
                        type uint32 {
                          range "0..75000";
                        }
                        mandatory true;
                        description
                          "PIM source register states for all VRFs";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "0..75000";
                        }
                        must
                          ". <= ../maximum-register-states";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container register-states
    
                    container packet-queue {
                      description
                        "PIM Packet queue size in bytes";
                      leaf high-priority {
                        type uint32 {
                          range "0..2147483648";
                        }
                        description
                          "PIM high priority packet queue size in bytes";
                      }
    
                      leaf low-priority {
                        type uint32 {
                          range "0..2147483648";
                        }
                        description
                          "PIM low priority packet queue size in bytes";
                      }
                    }  // container packet-queue
    
                    container group-mappings {
                      description
                        "PIM group-to-RP mapping ranges";
                      container bsr {
                        presence
                          "Indicates a bsr node is configured.";
                        description
                          "Learned through the BSR distribution mechanism";
                        leaf maximum-bsr {
                          type uint32 {
                            range "1..10000";
                          }
                          mandatory true;
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..10000";
                          }
                          must
                            ". <= ../maximum-bsr";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container bsr
                    }  // container group-mappings
    
                    container bsr {
                      description
                        "BSR maximum C-RP cache setting";
                      container crp-cache {
                        presence
                          "Indicates a crp-cache node is configured.";
                        description
                          "Set maximum number of C-RP cache in BSR";
                        leaf maximum-crp-cache {
                          type uint32 {
                            range "1..10000";
                          }
                          mandatory true;
                          description
                            "Set maximum number of C-RP cache in BSR";
                        }
    
                        leaf threshold {
                          type uint32 {
                            range "1..10000";
                          }
                          must
                            ". <= ../maximum-crp-cache";
                          description
                            "Set threshold to print warning";
                        }
                      }  // container crp-cache
                    }  // container bsr
                  }  // container maximum
                }  // container global
    
                container maximum {
                  description
                    "Maximum state limits";
                  container routes {
                    presence
                      "Indicates a routes node is configured.";
                    description "PIM routes";
                    leaf maximum-routes {
                      type uint32 {
                        range "1..200000";
                      }
                      mandatory true;
                      description "PIM routes";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "1..200000";
                      }
                      must
                        ". <= ../maximum-routes";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container routes
    
                  container route-interfaces {
                    presence
                      "Indicates a route-interfaces node is configured.";
                    description
                      "PIM total number of interfaces on all routes";
                    leaf maximum-route-interfaces {
                      type uint32 {
                        range "1..1100000";
                      }
                      mandatory true;
                      description
                        "PIM total number of interfaces on all routes";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "1..1100000";
                      }
                      must
                        ". <= ../maximum-route-interfaces";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container route-interfaces
    
                  container register-states {
                    presence
                      "Indicates a register-states node is configured.";
                    description
                      "PIM source register states";
                    leaf maximum-register-states {
                      type uint32 {
                        range "0..75000";
                      }
                      mandatory true;
                      description
                        "PIM source register states";
                    }
    
                    leaf threshold {
                      type uint32 {
                        range "0..75000";
                      }
                      must
                        ". <= ../maximum-register-states";
                      description
                        "Set threshold to print warning";
                    }
                  }  // container register-states
    
                  container group-mappings {
                    description
                      "PIM group-to-RP mapping ranges";
                    container bsr {
                      presence
                        "Indicates a group-mappings node is configured.";
                      description
                        "Learned through the BSR distribution mechanism";
                      leaf maximum-bsr {
                        type uint32 {
                          range "1..10000";
                        }
                        mandatory true;
                        description
                          "Learned through the BSR distribution mechanism";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..10000";
                        }
                        must
                          ". <= ../maximum-bsr";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container bsr
                  }  // container group-mappings
    
                  container bsr {
                    description
                      "BSR maximum C-RP cache setting";
                    container crp-cache {
                      presence
                        "Indicates a crp-cache node is configured.";
                      description
                        "Set maximum number of C-RP cache in BSR";
                      leaf maximum-crp-cache {
                        type uint32 {
                          range "1..10000";
                        }
                        mandatory true;
                        description
                          "Set maximum number of C-RP cache in BSR";
                      }
    
                      leaf threshold {
                        type uint32 {
                          range "1..10000";
                        }
                        must
                          ". <= ../maximum-crp-cache";
                        description
                          "Set threshold to print warning";
                      }
                    }  // container crp-cache
                  }  // container bsr
                }  // container maximum
    
                leaf convergence-timeout {
                  type uint32 {
                    range "1800..2400";
                  }
                  description
                    "Timeout value for the RIB convergence notification";
                }
    
                container log {
                  description
                    "Enable PIM logging";
                  container neighbor {
                    description
                      "Enable PIM neighbor logging";
                    container changes {
                      presence
                        "Indicates a changes node is configured.";
                      description
                        "Enable PIM neighbor state logging";
                    }  // container changes
                  }  // container neighbor
                }  // container log
    
                container rpf-vector {
                  presence
                    "Indicates a rpf-vector node is configured.";
                  description
                    "Enable PIM RPF Vector";
                  container allow-ebgp {
                    presence
                      "Indicates a allow-ebgp node is configured.";
                    description
                      "Allow origination of RPF vector over an eBGP session";
                  }  // container allow-ebgp
    
                  container disable-ibgp {
                    presence
                      "Indicates a disable-ibgp node is configured.";
                    description
                      "Disable origination of RPF vector over an iBGP session";
                  }  // container disable-ibgp
    
                  container use-standard-encoding {
                    presence
                      "Indicates a use-standard-encoding node is configured.";
                    description
                      "Use RFC standard encode type";
                  }  // container use-standard-encoding
                }  // container rpf-vector
    
                container rpf {
                  description "RPF commands";
                  container topology {
                    description
                      "Select RPF topology";
                    leaf route-policy {
                      type xr:Route-policy-name;
                      description
                        "Route policy to select RPF topology";
                    }
                  }  // container topology
                }  // container rpf
    
                container mdt {
                  description
                    "Multicast Distribution Tree commands";
                  leaf neighbor-filter {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Neighbor filter";
                  }
    
                  container data {
                    description
                      "Data MDT Options";
                    leaf switchover-interval {
                      type uint32 {
                        range "3..60";
                      }
                      description
                        "Data MDT switchover interval";
                    }
    
                    leaf announce-interval {
                      type uint32 {
                        range "3..120";
                      }
                      description
                        "Periodic Data MDT Join TLV interval";
                    }
    
                    leaf max-aggregation {
                      type uint32 {
                        range "1..16777215";
                      }
                      description
                        "Data MDT max-aggregation";
                    }
                  }  // container data
    
                  container c-multicast-routing {
                    presence
                      "Indicates a c-multicast-routing node is configured.";
                    description
                      "MVPN customer routing commands";
                    leaf type {
                      type enumeration {
                        enum "pim" {
                          value 1;
                          description
                            "PIM customer multicast routing";
                        }
                        enum "bgp" {
                          value 2;
                          description
                            "BGP customer multicast routing";
                        }
                      }
                      mandatory true;
                      description
                        "MVPN customer routing commands";
                    }
    
                    container announce-pim-join-tlv {
                      presence
                        "Indicates a announce-pim-join-tlv node is configured.";
                      description
                        "Announce PIM MDT Join TLVs";
                    }  // container announce-pim-join-tlv
    
                    container suppress-shared-tree-join {
                      presence
                        "Indicates a suppress-shared-tree-join node is configured.";
                      description
                        "Suppress shared tree joins";
                    }  // container suppress-shared-tree-join
    
                    container suppress-pim-data-signaling {
                      presence
                        "Indicates a suppress-pim-data-signaling node is configured.";
                      description
                        "Suppress PIM data signaling";
                    }  // container suppress-pim-data-signaling
    
                    container mdt-hello {
                      when "../type != 'pim'";
                      description
                        "PIM Hellos over MDT";
                      container enable {
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable PIM Hellos over MDT";
                      }  // container enable
                    }  // container mdt-hello
    
                    leaf shared-tree-prune-delay {
                      type uint32 {
                        range "0..1800";
                      }
                      description
                        "Delay before pruning I-S PMSI from S,G when SA received";
                    }
    
                    leaf source-tree-prune-delay {
                      type uint32 {
                        range "0..300";
                      }
                      description
                        "Delay before removing PMSI from olist after BGP withdrawal";
                    }
    
                    container migration {
                      presence
                        "Indicates a migration node is configured.";
                      description
                        "customer routing migration";
                      leaf route-policy {
                        type xr:Route-policy-name;
                        description
                          "Route policy to select customer routing";
                      }
                    }  // container migration
    
                    container unicast-reachability {
                      description
                        "Control addition of Extended Communities to Unicast VPN-IP routes";
                      container connector {
                        description
                          "Enable/Disable Connector";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable Connector Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable Connector Attribute";
                        }  // container enable
                      }  // container connector
    
                      container source-as {
                        description
                          "Enable/Disable Source AS";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable Source-AS Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable Source-AS Attribute";
                        }  // container enable
                      }  // container source-as
    
                      container vrf-route-import {
                        description
                          "Enable/Disable VRF Route Import";
                        container disable {
                          must "not(../enable)";
                          presence
                            "Indicates a disable node is configured.";
                          description
                            "Disable VRF Route Import Attribute";
                        }  // container disable
    
                        container enable {
                          must "not(../disable)";
                          presence
                            "Indicates a enable node is configured.";
                          description
                            "Enable VRF Route Import Attribute";
                        }  // container enable
                      }  // container vrf-route-import
                    }  // container unicast-reachability
                  }  // container c-multicast-routing
                }  // container mdt
    
                container allow-rp {
                  presence
                    "Indicates a allow-rp node is configured.";
                  description
                    "Sparse-Mode RP addresses to be allowed";
                  leaf rp-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list for allowed RP addresses";
                  }
    
                  leaf group-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list for allowed group ranges";
                  }
                }  // container allow-rp
    
                container sg-expiry-timer {
                  presence
                    "Indicates a sg-expiry-timer node is configured.";
                  description
                    "Configure SG expiry timer";
                  leaf sg-expiry-timer-value {
                    type uint32 {
                      range "40..57600";
                    }
                    mandatory true;
                    description
                      "Configure SG expiry timer";
                  }
    
                  leaf sg-list {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    description
                      "Access-list of (S,G) routes for which expiry timer is applicable";
                  }
                }  // container sg-expiry-timer
    
                container ssm {
                  description
                    "Configure a group range for Source-Specific use";
                  leaf range {
                    type xr:Cisco-ios-xr-string {
                      length "1..32";
                    }
                    must "not(../disable)";
                    description
                      "Provide ACL that specifies non-standard SSM range";
                  }
    
                  container disable {
                    must "not(../range)";
                    presence
                      "Indicates a disable node is configured.";
                    description
                      "Disable use of all SSM group ranges";
                  }  // container disable
    
                  container allow-override {
                    presence
                      "Indicates a allow-override node is configured.";
                    description
                      "Allow SSM ranges to be overridden by more specific ranges";
                  }  // container allow-override
                }  // container ssm
    
                container multipath {
                  presence
                    "Indicates a multipath node is configured.";
                  description
                    "Enable equal-cost multipath routing";
                  container hash {
                    must
                      "interface-extended or source-nexthop or source-group";
                    presence
                      "Indicates a hash node is configured.";
                    description
                      "Enter a hashing algorithm";
                    container interface-extended {
                      must
                        "not(../source-nexthop) and not(../source-group)";
                      presence
                        "Indicates a interface-extended node is configured.";
                      description
                        "Enable interface extensions for non-unique next-hop addrs";
                    }  // container interface-extended
    
                    container source-nexthop {
                      must
                        "not(../interface-extended) and not(../source-group)";
                      presence
                        "Indicates a source-nexthop node is configured.";
                      description
                        "Enable source with next-hop multipath hashing (better distribution)";
                    }  // container source-nexthop
    
                    container source-group {
                      must
                        "not(../source-nexthop) and not(../interface-extended)";
                      presence
                        "Indicates a source-group node is configured.";
                      description
                        "Enable source, group based multipath hashing (Compatible with IOS versions)";
                    }  // container source-group
                  }  // container hash
                }  // container multipath
    
                container interface {
                  description
                    "PIM interface configuration subcommands";
                  container interfaces {
                    description
                      "Select an interface to configure";
                    list interface {
                      key "interface-name";
                      description
                        "Select an interface to configure";
                      leaf interface-name {
                        type xr:Interface-name;
                        description
                          "Select an interface to configure";
                      }
    
                      leaf dr-priority {
                        type uint32 {
                          range "0..4294967295";
                        }
                        description
                          "PIM Hello DR priority";
                      }
    
                      leaf hello-interval {
                        type uint32 {
                          range "1..3600";
                        }
                        description
                          "PIM neighbor Hello announcement interval";
                      }
    
                      leaf join-prune-interval {
                        type uint32 {
                          range "10..600";
                        }
                        description
                          "PIM periodic Join-Prune announcement interval";
                      }
    
                      leaf join-prune-mtu {
                        type uint32 {
                          range "576..65535";
                        }
                        description
                          "MTU to use when sending PIM J/P packets";
                      }
    
                      leaf propagation-delay {
                        type uint32 {
                          range "100..32767";
                        }
                        description
                          "PIM Hello propagation delay";
                      }
    
                      leaf override-interval {
                        type uint32 {
                          range "400..65535";
                        }
                        description
                          "PIM Hello override interval";
                      }
    
                      container bsr-border {
                        presence
                          "Indicates a bsr-border node is configured.";
                        description
                          "Do not fwd BSR messages on this interface";
                      }  // container bsr-border
    
                      container enable {
                        must "not(../disable)";
                        presence
                          "Indicates a enable node is configured.";
                        description
                          "Enable PIM processing on this interface";
                      }  // container enable
    
                      container disable {
                        must "not(../enable)";
                        presence
                          "Indicates a disable node is configured.";
                        description
                          "Disable PIM processing on this interface";
                      }  // container disable
    
                      leaf neighbor-filter {
                        type xr:Cisco-ios-xr-string {
                          length "1..1024";
                        }
                        description
                          "PIM Neighbor filter on this interface";
                      }
    
                      container maximum {
                        description
                          "Per interface maximum state limits";
                        container route-interfaces {
                          presence
                            "Indicates a route-interfaces node is configured.";
                          description
                            "PIM downstream joined interfaces";
                          leaf maximum-route-interfaces {
                            type uint32 {
                              range "1..1100000";
                            }
                            mandatory true;
                            description
                              "PIM downstream joined interfaces";
                          }
    
                          leaf threshold {
                            type uint32 {
                              range "1..1100000";
                            }
                            must
                              ". <= ../maximum-route-interfaces";
                            description
                              "Threshold warning";
                          }
    
                          leaf access-list {
                            type xr:Cisco-ios-xr-string {
                              length "1..64";
                            }
                            description
                              "Name of ACL that specifies to which routes to apply the maximum limit";
                          }
                        }  // container route-interfaces
                      }  // container maximum
    
                      container bfd {
                        description
                          "Configure BFD parameters";
                        container fast-detect {
                          presence
                            "Indicates a fast-detect node is configured.";
                          description
                            "Enable Fast detection";
                        }  // container fast-detect
    
                        leaf minimum-interval {
                          type uint32 {
                            range "3..30000";
                          }
                          description
                            "Hello interval";
                        }
    
                        leaf multiplier {
                          type uint32 {
                            range "2..50";
                          }
                          description
                            "Detect multiplier";
                        }
                      }  // container bfd
    
                      container sticky-dr {
                        presence
                          "Indicates a sticky-dr node is configured.";
                        description
                          "Enable sticky DR on this interface";
                      }  // container sticky-dr
                    }  // list interface
                  }  // container interfaces
                }  // container interface
    
                container bsr {
                  description
                    "BSR Configurations";
                  container candidate-bsr {
                    presence
                      "Indicates a candidate-bsr node is configured.";
                    description
                      "configure candidate BSR";
                    leaf address {
                      type inet:ipv6-address-no-zone;
                      mandatory true;
                      description
                        "IP address of configured BSR";
                    }
    
                    leaf hash-mask-len {
                      type uint32 {
                        range "0..128";
                      }
                      mandatory true;
                      description
                        "BSR Hash Mask Length";
                    }
    
                    leaf priority {
                      type uint32 {
                        range "1..255";
                      }
                      mandatory true;
                      description "BSR Priority";
                    }
                  }  // container candidate-bsr
    
                  container candidate-rps {
                    description
                      "BSR Candidate RP Configurations";
                    list candidate-rp {
                      must
                        "(priority and interval) or (bidir/priority and bidir/interval)";
                      key "address";
                      description
                        "BSR Candidate RP Configurations";
                      leaf address {
                        type inet:ipv6-address-no-zone;
                        description
                          "BSR Candidate RP Configurations";
                      }
    
                      leaf group-list {
                        type xr:Cisco-ios-xr-string {
                          length "1..64";
                        }
                        description
                          "Group List access-list";
                      }
    
                      leaf priority {
                        type uint32 {
                          range "1..255";
                        }
                        description
                          "C-RP Priority";
                      }
    
                      leaf interval {
                        type uint32 {
                          range "30..600";
                        }
                        description
                          "C-RP Advertisement interval";
                      }
    
                      container bidir {
                        description
                          "To specify group ranges as Bidir";
                        leaf group-list {
                          type xr:Cisco-ios-xr-string {
                            length "1..64";
                          }
                          description
                            "Group List access-list";
                        }
    
                        leaf priority {
                          type uint32 {
                            range "1..255";
                          }
                          description
                            "C-RP Priority";
                        }
    
                        leaf interval {
                          type uint32 {
                            range "30..600";
                          }
                          description
                            "C-RP Advertisement interval";
                        }
                      }  // container bidir
                    }  // list candidate-rp
                  }  // container candidate-rps
    
                  container relay {
                    description
                      "BSR RP relay config";
                    container vrfs {
                      description "vrf";
                      list vrf {
                        key "vrf-name";
                        description "vrf";
                        leaf vrf-name {
                          type xr:Cisco-ios-xr-string {
                            length "1..1024";
                          }
                          description "vrf";
                        }
    
                        container listen {
                          presence
                            "Indicates a listen node is configured.";
                          description
                            "Enable RP relay in listen mode";
                        }  // container listen
                      }  // list vrf
                    }  // container vrfs
                  }  // container relay
                }  // container bsr
    
                container sr-p2mp-policies {
                  description
                    "Segment-routing P2MP policy";
                  list sr-p2mp-policy {
                    key "sr-p2mp-policy-id";
                    description
                      "Segment-routing P2MP policy";
                    leaf sr-p2mp-policy-id {
                      type xr:Cisco-ios-xr-string {
                        length "1..1024";
                      }
                      description
                        "Segment-routing P2MP policy";
                    }
    
                    container static-group {
                      description
                        "ipv6 static multicast group";
                      list group-address {
                        key "group-address";
                        description
                          "ipv6 static multicast group";
                        leaf group-address {
                          type inet:ipv6-address-no-zone;
                          description
                            "ipv6 static multicast group";
                        }
    
                        container group-address-only {
                          presence
                            "Indicates a group-address-only node is configured.";
                          description
                            "Group-address without increment mask/source-address";
                        }  // container group-address-only
    
                        container group-address-inc-masks {
                          description
                            "Group-address with increment mask for group address";
                          list inc-mask {
                            key "group-mask-address";
                            description
                              "Increment mask for group address";
                            leaf group-mask-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-inc-masks
    
                        container group-address-source-address {
                          description
                            "Group-address with source-address";
                          list source-address {
                            key "source-address";
                            description
                              "Source address to join";
                            leaf source-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Source address to join";
                            }
                          }  // list source-address
                        }  // container group-address-source-address
    
                        container group-address-inc-mask-source-address {
                          description
                            "Group-address with increment-mask and source-address";
                          list inc-mask {
                            key "group-mask-address source-address";
                            description
                              "Increment mask for group address";
                            leaf group-mask-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf source-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-inc-mask-source-address
    
                        container group-address-source-address-inc-mask {
                          description
                            "Group-address and source-address with increment-mask";
                          list inc-mask {
                            key "source-address source-mask-address";
                            description
                              "Increment mask for group address";
                            leaf source-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf source-mask-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Increment mask for source address";
                            }
    
                            leaf source-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of source addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-address-source-address-inc-mask
    
                        container group-inc-mask-source-inc-mask {
                          description
                            "Group-address with increment-mask and source-address with increment-mask";
                          list inc-mask {
                            key "group-mask-address source-address source-mask-address";
                            leaf group-mask-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Increment mask for group address";
                            }
    
                            leaf source-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Source address to join";
                            }
    
                            leaf source-mask-address {
                              type inet:ipv6-address-no-zone;
                              description
                                "Increment mask for source address";
                            }
    
                            leaf group-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of group addresses to join";
                            }
    
                            leaf source-address-count {
                              type uint32 {
                                range "1..512";
                              }
                              mandatory true;
                              description
                                "No. of source addresses to join";
                            }
                          }  // list inc-mask
                        }  // container group-inc-mask-source-inc-mask
                      }  // list group-address
                    }  // container static-group
                  }  // list sr-p2mp-policy
                }  // container sr-p2mp-policies
    
                container embedded-rp {
                  description
                    "Set Embedded RP processing support";
                  list ip-addresses {
                    key "ip-address";
                    description
                      "IP name or address of Rendezvous Point";
                    leaf ip-address {
                      type inet:ipv6-address-no-zone;
                      description
                        "IP name or address of Rendezvous Point";
                    }
    
                    leaf access-list-name {
                      type xr:Cisco-ios-xr-string {
                        length "1..1024";
                      }
                      mandatory true;
                      description
                        "Access list of groups that should map to given RP";
                    }
                  }  // list ip-addresses
    
                  container disable {
                    presence
                      "Indicates a disable node is configured.";
                    description
                      "Disable Embedded RP processing";
                  }  // container disable
                }  // container embedded-rp
              }  // container ipv6
            }  // container address-family
          }  // container pim
        }  // container router
      }  // module Cisco-IOS-XR-um-router-pim-cfg
    

© 2023 YumaWorks, Inc. All rights reserved.